Skip to content

Commit

Permalink
MONDRIAN: Add 'virtualCubeDefs' parameter to TestContext.create()
Browse files Browse the repository at this point in the history
[git-p4: depot-paths = "//open/mondrian/": change = 7473]
  • Loading branch information
julianhyde committed Aug 25, 2006
1 parent 75e4e68 commit 59c5f58
Show file tree
Hide file tree
Showing 8 changed files with 99 additions and 33 deletions.
19 changes: 0 additions & 19 deletions demo/FoodMart.xml
Expand Up @@ -755,25 +755,6 @@ fullname
</CalculatedMember>
</VirtualCube>

<!-- Virtual cube with a non-conforming dimension (Warehouse) that does not
have ALL as its default member -->
<VirtualCube name="Warehouse (Default USA) and Sales">
<VirtualCubeDimension name="Product"/>
<VirtualCubeDimension name="Store"/>
<VirtualCubeDimension name="Time"/>
<VirtualCubeDimension cubeName="Warehouse (Default USA)" name="Warehouse"/>
<VirtualCubeMeasure cubeName="Sales 2" name="[Measures].[Sales Count]"/>
<VirtualCubeMeasure cubeName="Sales 2" name="[Measures].[Store Cost]"/>
<VirtualCubeMeasure cubeName="Sales 2" name="[Measures].[Store Sales]"/>
<VirtualCubeMeasure cubeName="Sales 2" name="[Measures].[Unit Sales]"/>
<VirtualCubeMeasure cubeName="Warehouse" name="[Measures].[Store Invoice]"/>
<VirtualCubeMeasure cubeName="Warehouse" name="[Measures].[Supply Time]"/>
<VirtualCubeMeasure cubeName="Warehouse" name="[Measures].[Units Ordered]"/>
<VirtualCubeMeasure cubeName="Warehouse" name="[Measures].[Units Shipped]"/>
<VirtualCubeMeasure cubeName="Warehouse" name="[Measures].[Warehouse Cost]"/>
<VirtualCubeMeasure cubeName="Warehouse" name="[Measures].[Warehouse Sales]"/>
</VirtualCube>

<!-- A California manager can only see customers and stores in California.
They cannot drill down on Gender. -->
<Role name="California manager">
Expand Down
66 changes: 64 additions & 2 deletions testsrc/main/mondrian/rolap/VirtualCubeTest.java
Expand Up @@ -11,6 +11,7 @@

import mondrian.olap.*;
import mondrian.test.FoodMartTestCase;
import mondrian.test.TestContext;

/**
* <code>VirtualCubeTest</code> shows virtual cube tests.
Expand Down Expand Up @@ -93,7 +94,28 @@ private void checkXxx() {
* does not have ALL as its default member.
*/
public void testNonDefaultAllMember() {
assertQueryReturns(
// Create a virtual cube with a non-conforming dimension (Warehouse)
// that does not have ALL as its default member.
TestContext testContext = TestContext.create(null, null,
"<VirtualCube name=\"Warehouse (Default USA) and Sales\">\n" +
" <VirtualCubeDimension name=\"Product\"/>\n" +
" <VirtualCubeDimension name=\"Store\"/>\n" +
" <VirtualCubeDimension name=\"Time\"/>\n" +
" <VirtualCubeDimension cubeName=\"Warehouse (Default USA)\" name=\"Warehouse\"/>\n" +
" <VirtualCubeMeasure cubeName=\"Sales 2\" name=\"[Measures].[Sales Count]\"/>\n" +
" <VirtualCubeMeasure cubeName=\"Sales 2\" name=\"[Measures].[Store Cost]\"/>\n" +
" <VirtualCubeMeasure cubeName=\"Sales 2\" name=\"[Measures].[Store Sales]\"/>\n" +
" <VirtualCubeMeasure cubeName=\"Sales 2\" name=\"[Measures].[Unit Sales]\"/>\n" +
" <VirtualCubeMeasure cubeName=\"Warehouse\" name=\"[Measures].[Store Invoice]\"/>\n" +
" <VirtualCubeMeasure cubeName=\"Warehouse\" name=\"[Measures].[Supply Time]\"/>\n" +
" <VirtualCubeMeasure cubeName=\"Warehouse\" name=\"[Measures].[Units Ordered]\"/>\n" +
" <VirtualCubeMeasure cubeName=\"Warehouse\" name=\"[Measures].[Units Shipped]\"/>\n" +
" <VirtualCubeMeasure cubeName=\"Warehouse\" name=\"[Measures].[Warehouse Cost]\"/>\n" +
" <VirtualCubeMeasure cubeName=\"Warehouse\" name=\"[Measures].[Warehouse Sales]\"/>\n" +
"</VirtualCube>",
null, null);

testContext.assertQueryReturns(
"select {[Warehouse].defaultMember} on columns, " +
"{[Measures].[Warehouse Cost]} on rows from [Warehouse (Default USA)]",
fold("Axis #0:\n" +
Expand All @@ -104,7 +126,7 @@ public void testNonDefaultAllMember() {
"{[Measures].[Warehouse Cost]}\n" +
"Row #0: 89,043.253\n"));

assertQueryReturns(
testContext.assertQueryReturns(
"select {[Warehouse].defaultMember} on columns, " +
"{[Measures].[Warehouse Cost], [Measures].[Sales Count]} on rows " +
"from [Warehouse (Default USA) and Sales]",
Expand All @@ -118,6 +140,46 @@ public void testNonDefaultAllMember() {
"Row #0: 89,043.253\n" +
"Row #1: \n"));
}

// disabled pending fix
public void _testMemberVisibility() {
TestContext testContext = TestContext.create(
null, null,
"<VirtualCube name=\"Warehouse and Sales Member Visibility\">\n" +
" <VirtualCubeDimension cubeName=\"Sales\" name=\"Customers\"/>\n" +
" <VirtualCubeDimension name=\"Time\"/>\n" +
" <VirtualCubeMeasure cubeName=\"Sales\" name=\"[Measures].[Sales Count]\" visible=\"true\" />\n" +
" <VirtualCubeMeasure cubeName=\"Sales\" name=\"[Measures].[Store Cost]\" visible=\"false\" />\n" +
" <VirtualCubeMeasure cubeName=\"Sales\" name=\"[Measures].[Store Sales]\"/>\n" +
" <VirtualCubeMeasure cubeName=\"Warehouse\" name=\"[Measures].[Units Shipped]\" visible=\"false\" />\n" +
" <CalculatedMember name=\"Profit\" dimension=\"Measures\" visible=\"false\" >\n" +
" <Formula>[Measures].[Store Sales] - [Measures].[Store Cost]</Formula>\n" +
" </CalculatedMember>\n" +
"</VirtualCube>",
null, null);
Result result = testContext.executeQuery(
"select {[Measures].[Sales Count],\n" +
" [Measures].[Store Cost],\n" +
" [Measures].[Store Sales],\n" +
" [Measures].[Units Shipped],\n" +
" [Measures].[Profit]} on columns\n" +
"from [Warehouse and Sales Member Visibility]");
assertVisibility(result, 0, "Sales Count", true); // explicitly visible
assertVisibility(result, 1, "Store Cost", false); // explicitly invisible
assertVisibility(result, 2, "Store Sales", true); // visible by default
assertVisibility(result, 3, "Units Shipped", false); // explicitly invisible
assertVisibility(result, 4, "Profit", false); // explicitly invisible
}

private void assertVisibility(
Result result, int ordinal, String expectedName,
boolean expectedVisibility)
{
Position[] columnPositions = result.getAxes()[0].positions;
Member measure = columnPositions[ordinal].getMembers()[0];
assertEquals(expectedName, measure.getName());
assertEquals(expectedVisibility, measure.getPropertyValue(Property.VISIBLE.name));
}
}

// End VirtualCubeTest.java
4 changes: 2 additions & 2 deletions testsrc/main/mondrian/test/BasicQueryTest.java
Expand Up @@ -5188,7 +5188,7 @@ private void executeAndCancel(String queryString, int waitMillis)
final TestContext tc = TestContext.create(
null,
null,
null, "<UserDefinedFunction name=\"SleepUdf\" className=\"" +
null, null, "<UserDefinedFunction name=\"SleepUdf\" className=\"" +
SleepUdf.class.getName() + "\"/>");
Connection connection = tc.getConnection();

Expand Down Expand Up @@ -5234,7 +5234,7 @@ public void testQueryTimeout()
final TestContext tc = TestContext.create(
null,
null,
null, "<UserDefinedFunction name=\"SleepUdf\" className=\"" +
null, null, "<UserDefinedFunction name=\"SleepUdf\" className=\"" +
SleepUdf.class.getName() + "\"/>");

String query =
Expand Down
1 change: 1 addition & 0 deletions testsrc/main/mondrian/test/NamedSetTest.java
Expand Up @@ -673,6 +673,7 @@ public synchronized Connection getFoodMartConnection(boolean fresh) {

public void testBadNamedSet() {
final TestContext tc = TestContext.create(
null,
null,
null,
"<NamedSet name=\"Bad\" formula=\"{[Store].[USA].[WA].Children}}\"/>",
Expand Down
20 changes: 15 additions & 5 deletions testsrc/main/mondrian/test/ParameterTest.java
Expand Up @@ -397,7 +397,9 @@ public void testSystemPropsSet() {
*/
public void testSchemaProp() {
final TestContext tc = TestContext.create(
"<Parameter name=\"prop\" type=\"String\" defaultValue=\" 'foo bar' \" />", null, null, null);
"<Parameter name=\"prop\" type=\"String\" defaultValue=\" 'foo bar' \" />", null,
null,
null, null);
tc.assertExprReturns("ParamRef(\"prop\")", "foo bar");
}

Expand All @@ -408,14 +410,18 @@ public void testSchemaPropDupFails() {
final TestContext tc = TestContext.create(
"<Parameter name=\"foo\" type=\"Numeric\" defaultValue=\"1\" />\n" +
"<Parameter name=\"bar\" type=\"Numeric\" defaultValue=\"2\" />\n" +
"<Parameter name=\"foo\" type=\"Numeric\" defaultValue=\"3\" />\n", null, null, null);
"<Parameter name=\"foo\" type=\"Numeric\" defaultValue=\"3\" />\n", null,
null,
null, null);
tc.assertExprThrows("ParamRef(\"foo\")",
"Duplicate parameter 'foo' in schema");
}

public void testSchemaPropIllegalTypeFails() {
final TestContext tc = TestContext.create(
"<Parameter name=\"foo\" type=\"Bad type\" defaultValue=\"1\" />", null, null, null);
"<Parameter name=\"foo\" type=\"Bad type\" defaultValue=\"1\" />", null,
null,
null, null);
tc.assertExprThrows(
"1",
"In element 'Schema': In element 'Parameter': " +
Expand All @@ -425,7 +431,9 @@ public void testSchemaPropIllegalTypeFails() {

public void testSchemaPropInvalidDefaultExpFails() {
final TestContext tc = TestContext.create(
"<Parameter name=\"Product Current Member\" type=\"Member\" defaultValue=\"[Product].DefaultMember.Children(2) \" />", null, null, null);
"<Parameter name=\"Product Current Member\" type=\"Member\" defaultValue=\"[Product].DefaultMember.Children(2) \" />", null,
null,
null, null);
tc.assertExprThrows("ParamRef(\"Product Current Member\")",
"No function matches signature '<Member>.Children(<Numeric Expression>)'");
}
Expand All @@ -436,7 +444,9 @@ public void testSchemaPropInvalidDefaultExpFails() {
*/
public void testSchemaPropContext() {
final TestContext tc = TestContext.create(
"<Parameter name=\"Customer Current Member\" type=\"Member\" defaultValue=\"[Customers].DefaultMember.Children.Item(2) \" />", null, null, null);
"<Parameter name=\"Customer Current Member\" type=\"Member\" defaultValue=\"[Customers].DefaultMember.Children.Item(2) \" />", null,
null,
null, null);

tc.assertQueryReturns(
"with member [Measures].[Foo] as ' ParamRef(\"Customer Current Member\").Name '\n" +
Expand Down
4 changes: 2 additions & 2 deletions testsrc/main/mondrian/test/ParentChildHierarchyTest.java
Expand Up @@ -317,7 +317,7 @@ public void testHierarchyFalseCycle() {
" </Dimension>" + nl +
" <Measure name='Org Salary' column='salary_paid' aggregator='sum' formatString='Currency' />" + nl +
" <Measure name='Count' column='employee_id' aggregator='count' formatString='#,#'/>" + nl +
"</Cube>", null, null);
"</Cube>", null, null, null);

// On a cube with fewer dimensions, this gave a false failure.
testContext.assertQueryReturns(
Expand Down Expand Up @@ -585,7 +585,7 @@ public void testParentChildOrdinal() {
" formatString=\"Currency\"/>\n" +
" <Measure name=\"Count\" column=\"employee_id\" aggregator=\"count\"\n" +
" formatString=\"#,#\"/>\n" +
"</Cube>", null, null);
"</Cube>", null, null, null);

// Make sure <Hierarchy>.MEMBERS is sorted.
testContext.assertQueryReturns(
Expand Down
14 changes: 13 additions & 1 deletion testsrc/main/mondrian/test/TestContext.java
Expand Up @@ -225,6 +225,7 @@ public synchronized Connection getFoodMartConnection(String catalogContent) {
public String getFoodMartSchema(
String parameterDefs,
String cubeDefs,
String virtualCubeDefs,
String namedSetDefs,
String udfDefs)
{
Expand All @@ -251,6 +252,14 @@ public String getFoodMartSchema(
s.substring(i);
}

// Add virtual cube definitions, if specified.
if (virtualCubeDefs != null) {
int i = s.indexOf("<VirtualCube name=\"Warehouse and Sales\">");
s = s.substring(0, i) +
virtualCubeDefs +
s.substring(i);
}

// Add named set definitions, if specified. Schema-level named sets
// occur after <Cube> and <VirtualCube> and before <Role> elements.
if (namedSetDefs != null) {
Expand Down Expand Up @@ -765,6 +774,7 @@ public SqlQuery.Dialect getDialect() {
* @param cubeDefs Cube definition(s). If not null, the string is
* is inserted into the schema XML in the appropriate place for
* cube definitions.
* @param virtualCubeDefs
* @param namedSetDefs Definitions of named sets. If not null, the string
* is inserted into the schema XML in the appropriate place for
* named set definitions.
Expand All @@ -776,12 +786,14 @@ public SqlQuery.Dialect getDialect() {
public static TestContext create(
final String parameterDefs,
final String cubeDefs,
final String virtualCubeDefs,
final String namedSetDefs,
final String udfDefs) {
return new TestContext() {
public synchronized Connection getFoodMartConnection(boolean fresh) {
final String schema = getFoodMartSchema(
parameterDefs, cubeDefs, namedSetDefs, udfDefs);
parameterDefs, cubeDefs,
virtualCubeDefs, namedSetDefs, udfDefs);
return getFoodMartConnection(schema);
}
};
Expand Down
4 changes: 2 additions & 2 deletions testsrc/main/mondrian/test/UdfTest.java
Expand Up @@ -44,7 +44,7 @@ public UdfTest(String name) {
private final TestContext tc = TestContext.create(
null,
null,
null, "<UserDefinedFunction name=\"PlusOne\" className=\"" +
null, null, "<UserDefinedFunction name=\"PlusOne\" className=\"" +
PlusOneUdf.class.getName() + "\"/>" + nl);

public TestContext getTestContext() {
Expand Down Expand Up @@ -190,7 +190,7 @@ public void testBadFun() {
final TestContext tc = TestContext.create(
null,
null,
null, "<UserDefinedFunction name=\"BadPlusOne\" className=\"" +
null, null, "<UserDefinedFunction name=\"BadPlusOne\" className=\"" +
BadPlusOneUdf.class.getName() + "\"/>" + nl);
try {
tc.executeQuery("SELECT {} ON COLUMNS FROM [Sales]");
Expand Down

0 comments on commit 59c5f58

Please sign in to comment.