diff --git a/testsrc/org/olap4j/ConnectionTest.java b/testsrc/org/olap4j/ConnectionTest.java index f65f6ee..b47124d 100644 --- a/testsrc/org/olap4j/ConnectionTest.java +++ b/testsrc/org/olap4j/ConnectionTest.java @@ -1658,14 +1658,21 @@ public void testParentChild() throws ClassNotFoundException, SQLException { assertEquals(member0.getUniqueName(), member1.getParentMember().getUniqueName()); assertEquals(member0, member1.getParentMember()); Member member2 = rowsAxis.getPositions().get(2).getMembers().get(0); - assertEquals("[Employees].[All Employees].[Derrick Whelply]", member2.getUniqueName()); - // TODO: should return depth=2 here but mondrian erroneously returns 1 - assertEquals(1, member2.getDepth()); + assertTrue( + member2.getUniqueName().equals( + "[Employees].[All Employees].[Derrick Whelply]") + || member2.getUniqueName().equals( + "[Employees].[All Employees].[Sheri Nowmer].[Derrick Whelply]")); + assertEquals(2, member2.getDepth()); assertEquals(1, member2.getLevel().getDepth()); - // TODO: member2.parentMember should equal member1, but currently - // mondrian cannot look up a member of a parent-child hierarchy based - // on its unique name - assertNull(member2.getParentMember()); + final Member parent = member2.getParentMember(); + assertNotNull(parent); + assertEquals( + "[Employees].[All Employees].[Sheri Nowmer]", + parent.getUniqueName()); + assertEquals(1, parent.getDepth()); + assertEquals(member2.getLevel(), parent.getLevel()); + assertEquals(member1, parent); } /** diff --git a/testsrc/org/olap4j/MetadataTest.java b/testsrc/org/olap4j/MetadataTest.java index 1ec2eeb..a171924 100644 --- a/testsrc/org/olap4j/MetadataTest.java +++ b/testsrc/org/olap4j/MetadataTest.java @@ -74,6 +74,32 @@ private void assertContains(String seek, String s) { } } + private void assertContainsLine(String partial, String seek, String s) { + if (partial == null) { + partial = seek; + } + int i = s.indexOf(partial); + if (i < 0) { + fail("expected to find '" + seek + "' in '" + s + "'"); + } + int start = i; + while (start > 0 + && s.charAt(start - 1) != 0x0D + && s.charAt(start - 1) != 0x0A) + { + --start; + } + int end = i; + while (end < s.length() + && s.charAt(end) != 0x0D + && s.charAt(end) != 0x0A) + { + ++end; + } + String line = s.substring(start, end); + assertEquals(seek, line); + } + private void assertNotContains(String seek, String s) { if (s.indexOf(seek) >= 0) { fail("expected not to find '" + seek + "' in '" + s + "'"); @@ -348,7 +374,10 @@ public void testDatabaseMetaDataGetLevels() throws SQLException { olapDatabaseMetaData.getLevels( catalogName, null, null, null, null, null), LEVELS_COLUMN_NAMES); - assertContains("CATALOG_NAME=" + catalogName + ", SCHEMA_NAME=FoodMart, CUBE_NAME=Sales, DIMENSION_UNIQUE_NAME=[Product], HIERARCHY_UNIQUE_NAME=[Product], LEVEL_NAME=Product Category, LEVEL_UNIQUE_NAME=[Product].[Product Category], LEVEL_GUID=null, LEVEL_CAPTION=Product Category, LEVEL_NUMBER=3, LEVEL_CARDINALITY=55, LEVEL_TYPE=0, CUSTOM_ROLLUP_SETTINGS=0, LEVEL_UNIQUE_SETTINGS=0, LEVEL_IS_VISIBLE=true, DESCRIPTION=Sales Cube - Product HierarchyProduct Category Level", s); + assertContainsLine( + "LEVEL_NAME=Product Category,", + "CATALOG_NAME=" + catalogName + ", SCHEMA_NAME=FoodMart, CUBE_NAME=Sales, DIMENSION_UNIQUE_NAME=[Product], HIERARCHY_UNIQUE_NAME=[Product], LEVEL_NAME=Product Category, LEVEL_UNIQUE_NAME=[Product].[Product Category], LEVEL_GUID=null, LEVEL_CAPTION=Product Category, LEVEL_NUMBER=3, LEVEL_CARDINALITY=55, LEVEL_TYPE=0, CUSTOM_ROLLUP_SETTINGS=0, LEVEL_UNIQUE_SETTINGS=0, LEVEL_IS_VISIBLE=true, DESCRIPTION=Sales Cube - Product Hierarchy - Product Category Level", + s); s = checkResultSet( olapDatabaseMetaData.getLevels( @@ -460,7 +489,6 @@ private String checkResultSet( ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); final int columnCount = resultSetMetaData.getColumnCount(); if (columnNames != null) { - System.out.println(columnNames); assertEquals( columnNames.size(), columnCount);