Ejemplo n.º 1
0
        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));
        }