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}"); }
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"" }"); }
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)); }
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); }
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); }
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); } } }
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]); }
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()); }
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}"); }
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"); }
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); } } } }