public void CallAVoidMethodToAndFromJson() { // call FlipActive method on the game object // compiles to: Param_0.FlipActive() var rule = new MethodVoidCallRule <Game> { MethodToCall = "FlipActive" }; // convert to json var ruleJson = JsonConvert.SerializeObject(rule, Formatting.Indented, new JsonConverterForRule()); _testOutputHelper.WriteLine($"{nameof(ruleJson)}:{Environment.NewLine}{ruleJson}"); // re-hydrate from json var ruleFromJson = (MethodVoidCallRule <Game>)JsonConvert.DeserializeObject <Rule>(ruleJson, new JsonConverterForRule()); var compileResult = ruleFromJson.Compile(); compileResult.Should().BeTrue(); _testOutputHelper.WriteLine($"{nameof(ruleFromJson)}:{Environment.NewLine}" + $"{ruleFromJson.ExpressionDebugView()}"); var currentActiveState2 = _game1.Active; ruleFromJson.Execute(_game1); _game1.Active.Should().Be(!currentActiveState2); }
public static MethodVoidCallRule <T> CreateMethodVoidCallRule <T>(string methodToCall, string methodClassName, Expression <Func <T, object> > objectToCallMethodOn, IList <Rule> methodParams) { var rule = new MethodVoidCallRule <T> { MethodToCall = methodToCall, MethodClassName = methodClassName, ObjectToCallMethodOn = objectToCallMethodOn?.GetObjectToWorkOnFromExpression() }; rule.MethodParameters.AddRange(methodParams); return(rule); }