public void EdmLabeledExpression()
        {
            var e = new EdmLabeledExpression("l1", new EdmStringConstant("qwerty"));

            Assert.AreEqual("l1", e.Name, "e.Label");
            Assert.AreEqual("qwerty", ((IEdmStringValue)e.Expression).Value, ((IEdmStringValue)e.Expression).Value);
            Assert.IsFalse(e.IsBad(), "e good");

            try
            {
                new EdmLabeledExpression(null, new EdmStringConstant("qwerty"));
                Assert.Fail("exception expected.");
            }
            catch (ArgumentNullException)
            {
            }

            try
            {
                new EdmLabeledExpression("l1", null);
                Assert.Fail("exception expected.");
            }
            catch (ArgumentNullException)
            {
            }

            var ee = new MutableLabeledExpression();

            Assert.IsNull(ee.Name, "ee.Label");
            Assert.IsNull(ee.Expression, "ee.Expression");
            Assert.IsTrue(ee.IsBad(), "Expression is bad.");
            Assert.AreEqual(2, ee.Errors().Count(), "Expression has errors");
        }
        public void EdmLabeledExpressionReferenceExpressionTest()
        {
            var label = new EdmLabeledExpression("Label", new EdmStringConstant("foo"));
            var e     = new EdmLabeledExpressionReferenceExpression(label);

            Assert.AreEqual(EdmExpressionKind.LabeledExpressionReference, e.ExpressionKind, "e.ExpressionKind");
            Assert.AreEqual("Label", e.ReferencedLabeledExpression.Name, "e.ReferencedLabeledExpression");
            Assert.IsFalse(e.IsBad(), "e good");
            this.VerifyThrowsException(typeof(InvalidOperationException), () => e.ReferencedLabeledExpression = label);

            e = new EdmLabeledExpressionReferenceExpression();
            e.ReferencedLabeledExpression = label;
            Assert.AreEqual(EdmExpressionKind.LabeledExpressionReference, e.ExpressionKind, "e.ExpressionKind");
            Assert.AreEqual("Label", e.ReferencedLabeledExpression.Name, "e.ReferencedLabeledExpression");
            Assert.IsFalse(e.IsBad(), "e good");
            this.VerifyThrowsException(typeof(InvalidOperationException), () => e.ReferencedLabeledExpression = label);

            this.VerifyThrowsException(typeof(ArgumentNullException), () => new EdmLabeledExpressionReferenceExpression(null));

            var ee = new MutableEdmLabeledExpressionReferenceExpression();

            Assert.IsNull(ee.ReferencedLabeledExpression, "e.ReferencedLabeledExpression");
            Assert.IsTrue(ee.IsBad(), "Expression is bad.");
            Assert.AreEqual(1, ee.Errors().Count(), "Expression has errors");
        }
 public void Add(IEdmExpression expression)
 {
     if (!_initialized)
     {
         _initialized = true;
         var entityValidationRoot = new EdmLabeledExpression(Key,
                                                             new EdmCollectionExpression(ChildExpressions));
         Root.ChildExpressions.Add(entityValidationRoot);
     }
     ChildExpressions.Add(expression);
 }