public void LoadFromDbParam() { var tokens = new Collection <DslToken> { new DslToken(TokenType.DomainClass, "DomainClass", 1), new DslToken(TokenType.Value, "User", 1), new DslToken(TokenType.ObjectBracketOpen, "{", 1), new DslToken(TokenType.Value, "AddPost", 2), new DslToken(TokenType.ParameterBracketOpen, "(", 2), new DslToken(TokenType.Value, "NewPost", 2), new DslToken(TokenType.TypeDefSeparator, ":", 2), new DslToken(TokenType.LoadToken, "@Load", 2), new DslToken(TokenType.Value, "Post", 2), new DslToken(TokenType.ParameterBracketClose, ")", 2), new DslToken(TokenType.TypeDefSeparator, ":", 2), new DslToken(TokenType.ObjectBracketOpen, "{", 2), new DslToken(TokenType.ObjectBracketClose, "}", 2), new DslToken(TokenType.ObjectBracketClose, "}", 3) }; var parser = new MicrowaveLanguageParser(); var domainTree = parser.Parse(tokens); Assert.AreEqual(1, domainTree.Classes[0].Methods.Count); Assert.AreEqual(0, domainTree.Classes[0].Properties.Count); Assert.AreEqual("AddPost", domainTree.Classes[0].Methods[0].Name); Assert.AreEqual(1, domainTree.Classes[0].Methods[0].LoadParameters.Count); Assert.AreEqual("NewPost", domainTree.Classes[0].Methods[0].LoadParameters[0].Name); Assert.AreEqual("Post", domainTree.Classes[0].Methods[0].LoadParameters[0].Type); }
public void LoadFromDbParam_Error_DoubleLoad() { var tokens = new Collection <DslToken> { new DslToken(TokenType.DomainClass, "DomainClass", 1), new DslToken(TokenType.Value, "User", 1), new DslToken(TokenType.ObjectBracketOpen, "{", 1), new DslToken(TokenType.Value, "AddPost", 2), new DslToken(TokenType.ParameterBracketOpen, "(", 2), new DslToken(TokenType.Value, "NewPost", 2), new DslToken(TokenType.TypeDefSeparator, ":", 2), new DslToken(TokenType.LoadToken, "@Load", 2), new DslToken(TokenType.Value, "Post", 2), new DslToken(TokenType.Value, "Post", 2), }; var parser = new MicrowaveLanguageParser(); try { parser.Parse(tokens); } catch (NoTransitionException e) { Console.WriteLine(e); return; } Assert.Fail(); }
public void TypeDefException() { var tokens = new Collection <DslToken> { new DslToken(TokenType.DomainClass, "DomainClass", 1), new DslToken(TokenType.Value, "User", 1), new DslToken(TokenType.ObjectBracketOpen, "{", 1), new DslToken(TokenType.Value, "Posts", 2), new DslToken(TokenType.TypeDefSeparator, ":", 2), new DslToken(TokenType.ListBracketOpen, "[", 2), new DslToken(TokenType.Value, "Post", 2), new DslToken(TokenType.ObjectBracketClose, "}", 3) }; var parser = new MicrowaveLanguageParser(); try { parser.Parse(tokens); } catch (NoTransitionException e) { Assert.IsTrue(e.Message.Contains("Unexpected Token")); return; } Assert.Fail(); }
public void ExceptionAfterName() { var tokens = new Collection <DslToken> { new DslToken(TokenType.DomainClass, "DomainClass", 1), new DslToken(TokenType.Value, "User", 1), new DslToken(TokenType.ObjectBracketOpen, "{", 1), new DslToken(TokenType.Value, "Disable", 2), new DslToken(TokenType.Value, "Disable", 2), new DslToken(TokenType.ObjectBracketClose, "}", 2), }; var parser = new MicrowaveLanguageParser(); try { parser.Parse(tokens); } catch (NoTransitionException e) { Assert.IsTrue(e.Message.Contains("Unexpected Token")); return; } Assert.Fail(); }
public void SingleParameter_TypeDefNotFoundException() { var tokens = new Collection <DslToken> { new DslToken(TokenType.DomainClass, "DomainClass", 1), new DslToken(TokenType.Value, "User", 1), new DslToken(TokenType.ObjectBracketOpen, "{", 1), new DslToken(TokenType.Value, "UpdateStuff", 2), new DslToken(TokenType.ParameterBracketOpen, "(", 2), new DslToken(TokenType.Value, "UserName", 2), new DslToken(TokenType.Value, "UserName", 2), }; var parser = new MicrowaveLanguageParser(); try { parser.Parse(tokens); } catch (NoTransitionException e) { Assert.IsTrue(e.Message.Contains("Unexpected Token")); return; } Assert.Fail(); }
public void SynchronousHook() { var tokens = new Collection <DslToken> { new DslToken(TokenType.Value, "SendPasswordMail", 1), new DslToken(TokenType.SynchronouslyToken, "SynchronouslyToken", 1), new DslToken(TokenType.DomainHookOn, "on", 1), new DslToken(TokenType.DomainHookEventDefinition, "User.Create", 1), }; var parser = new MicrowaveLanguageParser(); var domainTree = parser.Parse(tokens); Assert.AreEqual("User", domainTree.SynchronousDomainHooks[0].ClassType); Assert.AreEqual("Create", domainTree.SynchronousDomainHooks[0].MethodName); Assert.AreEqual("SendPasswordMail", domainTree.SynchronousDomainHooks[0].Name); }
public void EmptyClass() { var tokens = new Collection <DslToken> { new DslToken(TokenType.DomainClass, "DomainClass", 1), new DslToken(TokenType.Value, "User", 1), new DslToken(TokenType.ObjectBracketOpen, "{", 1), new DslToken(TokenType.ObjectBracketClose, "}", 2) }; var parser = new MicrowaveLanguageParser(); var domainTree = parser.Parse(tokens); Assert.AreEqual(1, domainTree.Classes.Count); Assert.AreEqual("User", domainTree.Classes[0].Name); Assert.AreEqual(0, domainTree.Classes[0].Methods.Count); Assert.AreEqual(0, domainTree.Classes[0].Properties.Count); }
private static void Main(string[] args) { var wsbFile = args.Length >= 1 ? args[0] : "Schema.mic"; var basePathToSolution = args.Length >= 2 ? args[1] : "../"; var domainNameSpace = "Domain"; var applicationNameSpace = "Application"; var sqlAdapterNameSpace = "SqlAdapter"; var webAdapterNameSpace = "HttpAdapter"; var domainBasePath = $"{basePathToSolution}{domainNameSpace}/Generated/"; var applicationBasePath = $"{basePathToSolution}{applicationNameSpace}/Generated/"; var applicationRealClassesBasePath = $"{basePathToSolution}{applicationNameSpace}/"; var domainRealClassesBasePath = $"{basePathToSolution}{domainNameSpace}/"; var sqlAdapterBasePath = $"{basePathToSolution}{sqlAdapterNameSpace}/Generated/"; var webAdapterBasePath = $"{basePathToSolution}{webAdapterNameSpace}/Generated/"; var asynHostBasePath = $"{basePathToSolution}AsyncHost"; var injectionBasePath = $"{basePathToSolution}Host"; var tokenizer = new MicrowaveLanguageTokenizer(); var parser = new MicrowaveLanguageParser(); var domainBuilder = new DomainWriter(domainBasePath, domainRealClassesBasePath); var applicationWriter = new ApplicationWriter(applicationNameSpace, applicationBasePath, applicationRealClassesBasePath); var sqlAdapterWriter = new SqlAdapterWriter(sqlAdapterNameSpace, sqlAdapterBasePath); var webAdapterWriter = new HttpAdapterWriter(webAdapterNameSpace, webAdapterBasePath); var dependencyInjectionWriterAsyncHost = new DependencyInjectionBuilderAsyncHost(); var dependencyInjectionWriter = new DependencyInjectionBuilderHost(); using (var reader = new StreamReader(wsbFile)) { var content = reader.ReadToEnd(); var dslParser = new DslParser(tokenizer, parser); var domainTree = dslParser.Parse(content); domainBuilder.Write(domainTree, domainBasePath); applicationWriter.Write(domainTree); sqlAdapterWriter.Write(domainTree); webAdapterWriter.Write(domainTree); var codeNamespace = dependencyInjectionWriter.Build(domainTree.Classes, domainTree.SynchronousDomainHooks); new FileWriter(injectionBasePath).WriteToFile("Base/", codeNamespace); var write = dependencyInjectionWriterAsyncHost.Write(domainTree.Classes, domainTree.AsyncDomainHooks); new FileWriter(asynHostBasePath).WriteToFile("Base/", write); } }
public void Parse_StartState_Eexception() { var tokens = new Collection <DslToken> { new DslToken(TokenType.ObjectBracketOpen, "{", 1), }; var parser = new MicrowaveLanguageParser(); try { parser.Parse(tokens); } catch (NoTransitionException e) { Assert.IsTrue(e.Message.Contains("Unexpected Token")); return; } Assert.Fail(); }
public void ListProperty() { var tokens = new Collection <DslToken> { new DslToken(TokenType.DomainClass, "DomainClass", 1), new DslToken(TokenType.Value, "User", 1), new DslToken(TokenType.ObjectBracketOpen, "{", 1), new DslToken(TokenType.Value, "Posts", 2), new DslToken(TokenType.TypeDefSeparator, ":", 2), new DslToken(TokenType.ListBracketOpen, "[", 2), new DslToken(TokenType.Value, "Post", 2), new DslToken(TokenType.ListBracketClose, "]", 2), new DslToken(TokenType.ObjectBracketClose, "}", 3) }; var parser = new MicrowaveLanguageParser(); var domainTree = parser.Parse(tokens); Assert.AreEqual(1, domainTree.Classes[0].ListProperties.Count); Assert.AreEqual("Posts", domainTree.Classes[0].ListProperties[0].Name); Assert.AreEqual("Post", domainTree.Classes[0].ListProperties[0].Type); }
public void ExceptionTest() { var tokens = new Collection <DslToken> { new DslToken(TokenType.DomainClass, "DomainClass", 1), new DslToken(TokenType.DomainClass, "DomainClass", 1), }; var parser = new MicrowaveLanguageParser(); try { parser.Parse(tokens); } catch (NoTransitionException e) { Assert.IsTrue(e.Message.Contains("Unexpected Token")); return; } Assert.Fail(); }
public void ClassWithProperty() { var tokens = new Collection <DslToken> { new DslToken(TokenType.DomainClass, "DomainClass", 1), new DslToken(TokenType.Value, "User", 1), new DslToken(TokenType.ObjectBracketOpen, "{", 1), new DslToken(TokenType.Value, "VorName", 2), new DslToken(TokenType.TypeDefSeparator, ":", 2), new DslToken(TokenType.Value, "String", 2), new DslToken(TokenType.ObjectBracketClose, "}", 3) }; var parser = new MicrowaveLanguageParser(); var domainTree = parser.Parse(tokens); Assert.AreEqual(1, domainTree.Classes.Count); Assert.AreEqual("User", domainTree.Classes[0].Name); Assert.AreEqual(0, domainTree.Classes[0].Methods.Count); Assert.AreEqual(1, domainTree.Classes[0].Properties.Count); Assert.AreEqual("VorName", domainTree.Classes[0].Properties[0].Name); Assert.AreEqual("String", domainTree.Classes[0].Properties[0].Type); }
public void OnChildSynchronousHook() { var tokens = new Collection <DslToken> { new DslToken(TokenType.DomainClass, "DomainClass", 1), new DslToken(TokenType.Value, "User", 1), new DslToken(TokenType.ObjectBracketOpen, "{", 1), new DslToken(TokenType.Value, "CheckAgeRequirement", 1), new DslToken(TokenType.OnChild, "OnChild", 1), new DslToken(TokenType.DomainHookEventDefinition, "PinnedPost.UpdateTitle", 1), new DslToken(TokenType.ObjectBracketClose, "}", 2) }; var parser = new MicrowaveLanguageParser(); var domainTree = parser.Parse(tokens); Assert.AreEqual("CheckAgeRequirement", domainTree.Classes[0].ChildHookMethods[0].Name); Assert.AreEqual("PinnedPost", domainTree.Classes[0].ChildHookMethods[0].OriginFieldName); Assert.AreEqual("User", domainTree.Classes[0].ChildHookMethods[0].ContainingClassName); Assert.AreEqual("UpdateTitle", domainTree.Classes[0].ChildHookMethods[0].MethodName); Assert.AreEqual("ValidationResult", domainTree.Classes[0].ChildHookMethods[0].ReturnType); Assert.AreEqual(0, domainTree.Classes[0].ChildHookMethods[0].Parameters.Count); }
public void SynchronousHook_EventListenetNotFoundException() { var tokens = new Collection <DslToken> { new DslToken(TokenType.SynchronouslyToken, "SynchronouslyToken", 1), new DslToken(TokenType.Value, "SendPasswordMail", 1), new DslToken(TokenType.DomainHookOn, "on", 1), new DslToken(TokenType.DomainHookOn, "on", 1), }; var parser = new MicrowaveLanguageParser(); try { parser.Parse(tokens); } catch (NoTransitionException e) { Assert.IsTrue(e.Message.Contains("Unexpected Token")); return; } Assert.Fail(); }
public EventPropertyTypeDefSeparatorFoundState(MicrowaveLanguageParser microwaveLanguageParser) : base(microwaveLanguageParser) { }
public CreateMethodFoundState(MicrowaveLanguageParser microwaveLanguageParser) : base(microwaveLanguageParser) { }