public void TestVariableGet() { var visualScript = new VisualScriptAsset(); var condition = new Property("bool", "Condition"); visualScript.Properties.Add(condition); // Build blocks // TODO: Switch to a simple Write(variable) later, so that we don't depend on ConditionalBranchBlock for this test? var functionStart = new FunctionStartBlock(); var conditionGet = new VariableGet { Name = condition.Name }; var conditionalBranch = new ConditionalBranchBlock(); var writeTrue = new CustomCodeBlock { Code = "System.Console.Write(true);" }; var writeFalse = new CustomCodeBlock { Code = "System.Console.Write(false);" }; var method = new Method { Name = "Test" }; method.Blocks.Add(functionStart); method.Blocks.Add(conditionGet); method.Blocks.Add(conditionalBranch); method.Blocks.Add(writeTrue); method.Blocks.Add(writeFalse); // Generate slots foreach (var block in method.Blocks) { block.Value.GenerateSlots(block.Value.Slots, new SlotGeneratorContext()); } // Build links method.Links.Add(new Link(functionStart, conditionalBranch)); method.Links.Add(new Link(conditionGet.ValueSlot, conditionalBranch.ConditionSlot)); method.Links.Add(new Link(conditionalBranch.TrueSlot, writeTrue)); method.Links.Add(new Link(conditionalBranch.FalseSlot, writeFalse)); visualScript.Methods.Add(method); // Test TestAndCompareOutput(visualScript, "True", testInstance => { testInstance.Condition = true; testInstance.Test(); }); TestAndCompareOutput(visualScript, "False", testInstance => { testInstance.Condition = false; testInstance.Test(); }); }
public void TestConditionalExpression() { var visualScript = new VisualScriptAsset(); // Build blocks var functionStart = new FunctionStartBlock(); var conditionalBranch = new ConditionalBranchBlock(); var writeTrue = new CustomCodeBlock { Code = "System.Console.Write(true);" }; var writeFalse = new CustomCodeBlock { Code = "System.Console.Write(false);" }; var method = new Method { Name = "Test" }; method.Blocks.Add(functionStart); method.Blocks.Add(conditionalBranch); method.Blocks.Add(writeTrue); method.Blocks.Add(writeFalse); // Generate slots foreach (var block in method.Blocks) { block.Value.GenerateSlots(block.Value.Slots, new SlotGeneratorContext()); } // Build links method.Links.Add(new Link(functionStart, conditionalBranch)); method.Links.Add(new Link(conditionalBranch.TrueSlot, writeTrue)); method.Links.Add(new Link(conditionalBranch.FalseSlot, writeFalse)); visualScript.Methods.Add(method); // Test conditionalBranch.ConditionSlot.Value = "true"; TestAndCompareOutput(visualScript, "True", testInstance => testInstance.Test()); conditionalBranch.ConditionSlot.Value = "false"; TestAndCompareOutput(visualScript, "False", testInstance => testInstance.Test()); }