public void TestVoidMethodDeclaration() { var test = @" namespace Foo { machine M { start state S { } void Bar() { } } }"; var tokens = new PSharpLexer().Tokenize(test); var program = new PSharpParser(new PSharpProject(), SyntaxFactory.ParseSyntaxTree(test), false).ParseTokens(tokens); program.Rewrite(); var expected = @" using System; using Microsoft.PSharp; namespace Foo { class M : Machine { [Microsoft.PSharp.Start] class S : MachineState { } private void Bar(){ } } }"; Assert.AreEqual(expected.Replace(Environment.NewLine, string.Empty), program.GetSyntaxTree().ToString().Replace("\n", string.Empty)); }
public void TestUsingDeclaration() { var test = "using System.Text;"; var tokens = new PSharpLexer().Tokenize(test); var program = new PSharpParser(new PSharpProject(), SyntaxFactory.ParseSyntaxTree(test), false).ParseTokens(tokens); program.Rewrite(); var expected = @" using System; using Microsoft.PSharp; using System.Text;"; Assert.AreEqual(expected.Replace(Environment.NewLine, string.Empty), program.GetSyntaxTree().ToString().Replace("\n", string.Empty)); }
public void TestEventDeclaration() { var test = @" namespace Foo { event e1; internal event e2; public event e3; }"; var tokens = new PSharpLexer().Tokenize(test); var program = new PSharpParser(new PSharpProject(), SyntaxFactory.ParseSyntaxTree(test), false). ParseTokens(tokens); program.Rewrite(); var expected = @" using System; using Microsoft.PSharp; namespace Foo { class e1 : Event { internal e1() : base() { } } internal class e2 : Event { internal e2() : base() { } } public class e3 : Event { internal e3() : base() { } } }"; Assert.AreEqual(expected.Replace(Environment.NewLine, string.Empty), program.GetSyntaxTree().ToString().Replace("\n", string.Empty)); }
public void TestOnEventGotoStateAndDoActionDeclaration() { var test = @" namespace Foo { machine M { start state S1 { on e1 goto S2; on e2 do Bar; } } }"; var tokens = new PSharpLexer().Tokenize(test); var program = new PSharpParser(new PSharpProject(), SyntaxFactory.ParseSyntaxTree(test), false).ParseTokens(tokens); program.Rewrite(); var expected = @" using System; using Microsoft.PSharp; namespace Foo { class M : Machine { [Microsoft.PSharp.Start] [OnEventGotoState(typeof(e1), typeof(S2))] [OnEventDoAction(typeof(e2), nameof(Bar))] class S1 : MachineState { } } }"; Assert.AreEqual(expected.Replace(Environment.NewLine, string.Empty), program.GetSyntaxTree().ToString().Replace("\n", string.Empty)); }