public void CannotLookupAmbiguous() { var env = new StandardEnvironment(); var one = new ConstantValueTestRow("one", "FOO"); var two = new ConstantValueTestRow("two", "FOO"); env.DefineFields(one, "one"); env.DefineFields(two, "two"); var ex = Assert.Catch <EvaluationException>(() => env.Lookup("FOO", null)); Console.WriteLine(@"Expected exception: {0}", ex.Message); Assert.AreEqual("one", env.Lookup("FOO", "one")); Assert.AreEqual("two", env.Lookup("FOO", "two")); }
private static object IsAbove( object inputKunstbaute, object inputStufe, object crossingKunstbaute, object crossingStufe) { const string i = "DECODE(input.KUNSTBAUTE," + " 200,100, 300,100, 400,100, 500,100," + " 700,-100, 1100,-100, 1200,-100, 0) + (input.STUFE ?? 0)"; const string c = "DECODE(crossing.KUNSTBAUTE," + " 200,100, 300,100, 400,100, 500,100," + " 700,-100, 1100,-100, 1200,-100, 0) + (crossing.STUFE ?? 0)"; var ie = ExpressionEvaluator.Create(i); var ce = ExpressionEvaluator.Create(c); var ee = ExpressionEvaluator.Create(string.Format("({0}) < ({1})", i, c)); var input = new NamedValues { { "KUNSTBAUTE", inputKunstbaute }, { "STUFE", inputStufe } }; var crossing = new NamedValues { { "KUNSTBAUTE", crossingKunstbaute }, { "STUFE", crossingStufe } }; var env = new StandardEnvironment(); env.DefineFields(input, "input"); env.DefineFields(crossing, "crossing"); var iv = ie.Evaluate(env); var cv = ce.Evaluate(env); var ev = ee.Evaluate(env); Console.WriteLine( @"Input: {0} level {1}, Crossing: {2} level {3}, iv={4}, cv={5}, above={6}", inputKunstbaute, inputStufe, crossingKunstbaute, crossingStufe, iv, cv, ev); return(ev); }
public void CanLookupPrecedence() { // Lookup precedence for unqualified names: // defined value < standard function < field value // Qualified names are always looked up on a row of fields // defined with the qualifier. CONCAT is a standard function. var env = new StandardEnvironment(); var row = new ConstantValueTestRow("row", "CONCAT", "FOO"); const string qualifier = "qualifier"; Assert.Catch <EvaluationException>(() => env.Lookup("FOO", null)); Assert.IsInstanceOf <Function>(env.Lookup("CONCAT", null)); Assert.Catch <EvaluationException>(() => env.Lookup("CONCAT", qualifier)); env.DefineFields(row, qualifier); Assert.AreEqual("row", env.Lookup("FOO", null)); Assert.IsInstanceOf <Function>(env.Lookup("CONCAT", null)); Assert.AreEqual("row", env.Lookup("CONCAT", qualifier)); env.DefineValue("FOO", "foo"); env.DefineValue("CONCAT", "value"); Assert.AreEqual("foo", env.Lookup("FOO", null)); Assert.AreEqual("value", env.Lookup("CONCAT", null)); Assert.AreEqual("row", env.Lookup("CONCAT", qualifier)); env.ForgetValue("CONCAT"); env.ForgetValue("FOO"); Assert.AreEqual("row", env.Lookup("FOO", null)); Assert.IsInstanceOf <Function>(env.Lookup("CONCAT", null)); Assert.AreEqual("row", env.Lookup("CONCAT", qualifier)); env.ForgetFields("qualifier"); Assert.Catch <EvaluationException>(() => env.Lookup("FOO", null)); Assert.IsInstanceOf <Function>(env.Lookup("CONCAT", null)); Assert.Catch <EvaluationException>(() => env.Lookup("CONCAT", qualifier)); }