Exemplo n.º 1
0
        public void AssignEvaluation_assignGivenAnObjectValueCreatesValidJson_addsObjectIfItDoesNotExistIntLastAndAddsProperty()
        {
            var env = CreateTestEnvWithData();
            var x   = new JArray();

            var result = PublicFunctions.EvalEnvExpression("[[rec(1).a]]", 0, false, env);
            var parsed = EvaluationFunctions.parseLanguageExpressionWithoutUpdate("[[@Person.Child.Name]]");
            var val    = (LanguageAST.LanguageExpression.JsonIdentifierExpression)parsed;
            var env2   = AssignEvaluation.assignGivenAValue(env, result, val.Item);

            Assert.IsTrue(env2.JsonObjects.ContainsKey("Person"));
            Assert.AreEqual(env2.JsonObjects["Person"].ToString(), "{\r\n  \"Child\": {\r\n    \"Name\": \"2\"\r\n  }\r\n}");
        }
Exemplo n.º 2
0
        public void AssignEvaluation_assignGivenAValueCreatesValidJson_addsObjectIfItDoesNotExist()
        {
            var env = CreateTestEnvWithData();

            var result = PublicFunctions.EvalEnvExpression("[[a]]", 0, false, env);

            var env2 = AssignEvaluation.assignGivenAValue(env, result, LanguageAST.JsonIdentifierExpression.NewNestedNameExpression(new LanguageAST.JsonPropertyIdentifier("Bob", LanguageAST.JsonIdentifierExpression.NewNameExpression(new LanguageAST.JsonIdentifier("Age")))));

            Assert.IsTrue(env2.JsonObjects.ContainsKey("Bob"));
            Assert.AreEqual(env2.JsonObjects["Bob"].ToString(), @"{
  ""Age"": ""5""
}");
        }
Exemplo n.º 3
0
        public void AssignEvaluation_AddPropertyToJsonValue_ReturnsPropertyIfItExists()
        {
            //------------Setup for test--------------------------

            JObject a = new JObject();
            var     x = new JValue("a");

            a.Add("Bob", x);
            //------------Execute Test---------------------------
            var res = AssignEvaluation.addPropertyToJsonNoValue(a, "Bob");

            //------------Assert Results-------------------------
            Assert.IsTrue(ReferenceEquals(x, res));
        }
Exemplo n.º 4
0
        public void AssignEvaluation_IndexToInt_IntIndexReturnsInt()
        {
            //------------Setup for test--------------------------
            var arr = new JArray {
                new JValue("bob")
            };

            //------------Execute Test---------------------------
            var res = AssignEvaluation.indexToInt(LanguageAST.Index.NewIntIndex(1), arr);

            //------------Assert Results-------------------------
            Assert.AreEqual(res.Length, 1);
            Assert.AreEqual(1, res.Head);
        }
Exemplo n.º 5
0
        public void AssignEvaluation_IndexToInt_LastReturnsCountPlusOne()
        {
            //------------Setup for test--------------------------
            var arr = new JArray {
                new JValue("bob")
            };

            //------------Execute Test---------------------------
            var res = AssignEvaluation.indexToInt(LanguageAST.Index.Last, arr);

            //------------Assert Results-------------------------
            Assert.AreEqual(res.Length, 1);
            Assert.AreEqual(2, res.Head);
        }
Exemplo n.º 6
0
        private void BuildIndexMapHelper(string exp, List <string> indexMap, LanguageAST.JsonIdentifierExpression.IndexNestedNameExpression nameExpression, string objectName, JArray arr)
        {
            var indexToInt = AssignEvaluation.indexToInt(LanguageAST.Index.Star, arr).ToList();

            foreach (var i in indexToInt)
            {
                if (!string.IsNullOrEmpty(exp))
                {
                    var indexed    = objectName + @"(" + i + @")";
                    var updatedExp = exp.Replace(objectName + @"(*)", indexed);
                    indexMap.Add(updatedExp);
                    BuildIndexMap(nameExpression.Item.Next, updatedExp, indexMap, arr[i - 1] as JContainer);
                }
            }
        }
Exemplo n.º 7
0
        public void AssignEvaluation_IndexToInt_StarIndexReturnsAllIndexes()
        {
            //------------Setup for test--------------------------
            var arr = new JArray {
                new JValue("bob"), new JValue("bob")
            };

            //------------Execute Test---------------------------
            var res = AssignEvaluation.indexToInt(LanguageAST.Index.Star, arr);

            //------------Assert Results-------------------------
            Assert.AreEqual(res.Length, 2);
            Assert.AreEqual(1, res.Head);
            Assert.AreEqual(2, res[1]);
        }
Exemplo n.º 8
0
        public void AssignEvaluation_assignObject_ArrayJson_Last_TwoObjects()
        {
            var env  = CreateTestEnvWithData();
            var env2 = AssignEvaluation.evalJsonAssign(new AssignValue("[[Person()]]", "{\"Name\":\"a\"}"), 0, env);
            var env3 = AssignEvaluation.evalJsonAssign(new AssignValue("[[Person()]]", "{\"Name\":\"h\"}"), 0, env2);

            Assert.IsTrue(env2.JsonObjects.ContainsKey("Person"));
            var nameValue = PublicFunctions.EvalEnvExpression("[[@Person().Name]]", 0, false, env3);

            Assert.IsNotNull(nameValue);
            var warewolfAtomResult = nameValue as CommonFunctions.WarewolfEvalResult.WarewolfAtomResult;

            Assert.IsNotNull(warewolfAtomResult);
            Assert.AreEqual("h", warewolfAtomResult.Item.ToString());
        }
Exemplo n.º 9
0
        public void AssignEvaluation_assignGivenAnArrayValueCreatesValidJson_LastIndex_MutateArray()
        {
            var    env = CreateTestEnvWithData();
            JArray x   = new JArray();

            var result       = PublicFunctions.EvalEnvExpression("[[rec(1).a]]", 0, false, env);
            var secondResult = PublicFunctions.EvalEnvExpression("[[rec(2).a]]", 0, false, env);
            var parsed       = EvaluationFunctions.parseLanguageExpressionWithoutUpdate("[[@Person.Child().Name]]");

            var val = (LanguageAST.LanguageExpression.JsonIdentifierExpression)parsed;
            // ReSharper disable once RedundantAssignment
            var env2 = AssignEvaluation.assignGivenAValue(env, result, val.Item);

            env2 = AssignEvaluation.assignGivenAValue(env2, secondResult, val.Item);
            Assert.IsTrue(env2.JsonObjects.ContainsKey("Person"));
            Assert.AreEqual(env2.JsonObjects["Person"].ToString(), "{\r\n  \"Child\": [\r\n    {\r\n      \"Name\": \"2\"\r\n    },\r\n    {\r\n      \"Name\": \"4\"\r\n    }\r\n  ]\r\n}");
        }
Exemplo n.º 10
0
        public void AssignEvaluation_LanguageExpressionToJsonExpression()
        {
            var parsed = EvaluationFunctions.parseLanguageExpressionWithoutUpdate("[[Child(1).Name]]");
            var exp    = AssignEvaluation.languageExpressionToJsonIdentifier(parsed);

            Assert.IsTrue(exp.IsIndexNestedNameExpression);
            var exp2  = (exp as LanguageAST.JsonIdentifierExpression.IndexNestedNameExpression).Item;
            var index = exp2.Index;

            Assert.IsTrue(index.IsIntIndex);
            var bob = (index as LanguageAST.Index.IntIndex).Item;

            Assert.AreEqual(1, bob);
            Assert.AreEqual("Child", exp2.ObjectName);
            Assert.IsTrue(exp2.Next.IsNameExpression);
            var x2 = (exp2.Next as LanguageAST.JsonIdentifierExpression.NameExpression).Item;

            Assert.AreEqual(x2.Name, "Name");
        }
Exemplo n.º 11
0
 public void AssignEvaluation_LanguageExpressionToJsonExpression_Complex()
 {
     var parsed = EvaluationFunctions.parseLanguageExpressionWithoutUpdate("[[[[bob]]]]");
     var exp    = AssignEvaluation.languageExpressionToJsonIdentifier(parsed);
 }
        private void BuildIndexMap(LanguageAST.JsonIdentifierExpression var, string exp, List <string> indexMap, JContainer container)
        {
            var jsonIdentifierExpression = var;

            if (jsonIdentifierExpression != null)
            {
                var nameExpression = jsonIdentifierExpression as LanguageAST.JsonIdentifierExpression.IndexNestedNameExpression;
                if (nameExpression != null)
                {
                    var        objectName = nameExpression.Item.ObjectName;
                    JContainer obj;
                    JArray     arr = null;
                    if (container == null)
                    {
                        obj = _env.JsonObjects[objectName];
                        arr = obj as JArray;
                    }
                    else
                    {
                        var props = container.FirstOrDefault(token => token.Type == JTokenType.Property && ((JProperty)token).Name == objectName);
                        if (props != null)
                        {
                            obj = props.First as JContainer;
                            arr = obj as JArray;
                        }
                        else
                        {
                            obj = container;
                        }
                    }

                    if (arr != null)
                    {
                        var indexToInt = AssignEvaluation.indexToInt(LanguageAST.Index.Star, arr).ToList();
                        foreach (var i in indexToInt)
                        {
                            if (!string.IsNullOrEmpty(exp))
                            {
                                var indexed    = objectName + @"(" + i + @")";
                                var updatedExp = exp.Replace(objectName + @"(*)", indexed);
                                indexMap.Add(updatedExp);
                                BuildIndexMap(nameExpression.Item.Next, updatedExp, indexMap, arr[i - 1] as JContainer);
                            }
                        }
                    }
                    else
                    {
                        if (!nameExpression.Item.Next.IsTerminal)
                        {
                            BuildIndexMap(nameExpression.Item.Next, exp, indexMap, obj);
                        }
                    }
                }
                else
                {
                    var nestedNameExpression = jsonIdentifierExpression as LanguageAST.JsonIdentifierExpression.NestedNameExpression;
                    if (nestedNameExpression != null)
                    {
                        JContainer obj;
                        var        objectName = nestedNameExpression.Item.ObjectName;
                        if (container == null)
                        {
                            obj = _env.JsonObjects[objectName];
                        }
                        else
                        {
                            var props = container.FirstOrDefault(token => token.Type == JTokenType.Property && ((JProperty)token).Name == objectName);
                            if (props != null)
                            {
                                obj = props.First as JContainer;
                            }
                            else
                            {
                                obj = container;
                            }
                        }
                        BuildIndexMap(nestedNameExpression.Item.Next, exp, indexMap, obj);
                    }
                }
            }
        }