public void TestConditionParserInvalidConditions()
        {
            var conditionTests = new string[]
            {
                "$123",                     // Property names cannot start with a number
                "$_123",                    // Property names cannot start with an underscore
                "$1.23",                    // Property names cannot contain special characters
                "horizontal||$Prop[gt]1000",// OR is '|', not '||'
                "$Prop==1||$Prop==2"        // OR is '|', not '||'
            };

            var parseContext = new ParseContext();
            ConditionParser parser = new ConditionParser(new ConditionFormat() { StatesUnderscored = false });
            foreach (var test in conditionTests)
            {
                try
                {
                    parser.Parse(test, parseContext);
                    Assert.Fail("Parsing {0} succeeded", test);
                }
                catch
                {
                }
            }
        }
        public void TestConditionParserValidConditions()
        {
            var horizontal = new ConditionTreeLeaf(ConditionType.State, "horizontal", ConditionComparison.Equal, new PropertyUnion(true));
            var propertyEq1 = new ConditionTreeLeaf(ConditionType.Property, "Property", ConditionComparison.Equal, new PropertyUnion(1));

            var conditionTests = new Dictionary<string, IConditionTreeItem>()
            {
                { "horizontal", horizontal},
                { "$Property==1", propertyEq1},
                { "horizontal|$Property==1", new ConditionTree(ConditionTree.ConditionOperator.OR, horizontal, propertyEq1)},
                { "horizontal,$Property==1", new ConditionTree(ConditionTree.ConditionOperator.AND, horizontal, propertyEq1)}
            };

            var parseContext = new ParseContext();
            parseContext.PropertyTypes.Add(new KeyValuePair<string,PropertyUnionType>("Property", PropertyUnionType.Double));

            ConditionParser parser = new ConditionParser(new ConditionFormat() { StatesUnderscored = false });
            foreach(var test in conditionTests)
            {
                var parsed = parser.Parse(test.Key, parseContext);
                Assert.AreEqual(test.Value, parsed);
            }
        }