public void Tokenize_Mixed() { var tokenizer = new MicrowaveLanguageTokenizer(); var tokens = tokenizer.Tokenize(@"DomainClass User{ Id: Guid UpdateName(Name: String): { UserId: Guid Age: Int32 } Posts: [Post] }"); Assert.AreEqual(27, tokens.Count); Assert.AreEqual(TokenType.DomainClass, tokens[0].TokenType); Assert.AreEqual(TokenType.Value, tokens[1].TokenType); Assert.AreEqual(TokenType.ObjectBracketOpen, tokens[2].TokenType); Assert.AreEqual(TokenType.Value, tokens[3].TokenType); Assert.AreEqual(TokenType.ParameterBracketOpen, tokens[7].TokenType); Assert.AreEqual("UpdateName", tokens[6].Value); Assert.AreEqual("Name", tokens[8].Value); Assert.AreEqual("String", tokens[10].Value); }
public void Tokenize_DomainClass_Property() { var tokenizer = new MicrowaveLanguageTokenizer(); var tokens = tokenizer.Tokenize(@"DomainClass User{ Id: Guid }"); Assert.AreEqual(7, tokens.Count); Assert.AreEqual("Id", tokens[3].Value); Assert.AreEqual(TokenType.TypeDefSeparator, tokens[4].TokenType); Assert.AreEqual("Guid", tokens[5].Value); }
public void Tokenize_ListProperty() { var tokenizer = new MicrowaveLanguageTokenizer(); var tokens = tokenizer.Tokenize(@"DomainClass User{ Posts: [Post] }"); Assert.AreEqual(9, tokens.Count); Assert.AreEqual(TokenType.ListBracketOpen, tokens[5].TokenType); Assert.AreEqual(TokenType.Value, tokens[6].TokenType); Assert.AreEqual("Post", tokens[6].Value); Assert.AreEqual(TokenType.ListBracketClose, tokens[7].TokenType); }
public void Tokenize_DomainClass() { var tokenizer = new MicrowaveLanguageTokenizer(); var tokens = tokenizer.Tokenize(@"DomainClass User{ }"); Assert.AreEqual(4, tokens.Count); Assert.AreEqual(TokenType.DomainClass, tokens[0].TokenType); Assert.AreEqual(TokenType.Value, tokens[1].TokenType); Assert.AreEqual("User", tokens[1].Value); Assert.AreEqual(TokenType.ObjectBracketOpen, tokens[2].TokenType); Assert.AreEqual(TokenType.ObjectBracketClose, tokens[3].TokenType); }
public void Tokenize_CreateMethod() { var tokenizer = new MicrowaveLanguageTokenizer(); var tokens = tokenizer.Tokenize(@"DomainClass User{ Create(Name: String) }"); Assert.AreEqual(10, tokens.Count); Assert.AreEqual("Create", tokens[3].Value); Assert.AreEqual(TokenType.CreateMethod, tokens[3].TokenType); Assert.AreEqual(TokenType.ParameterBracketOpen, tokens[4].TokenType); Assert.AreEqual(TokenType.TypeDefSeparator, tokens[6].TokenType); }
public void Tokenize_LoadToken() { var tokenizer = new MicrowaveLanguageTokenizer(); var tokens = tokenizer.Tokenize(@"DomainClass User{ AddPost(NewPost: @Load Post): { PostId: Guid } }"); Assert.AreEqual(17, tokens.Count); Assert.AreEqual("NewPost", tokens[5].Value); Assert.AreEqual(TokenType.LoadToken, tokens[7].TokenType); Assert.AreEqual(TokenType.Value, tokens[8].TokenType); Assert.AreEqual("Post", tokens[8].Value); }
public void Tokenize_AsyncDomainHook_Update() { var tokenizer = new MicrowaveLanguageTokenizer(); var tokens = tokenizer.Tokenize(@"DomainClass User{ Create() } SendBirthdayMail asynchronously on User.UpdateAge"); Assert.AreEqual(11, tokens.Count); Assert.AreEqual(TokenType.Value, tokens[7].TokenType); Assert.AreEqual("SendBirthdayMail", tokens[7].Value); Assert.AreEqual(TokenType.AsynchronouslyToken, tokens[8].TokenType); Assert.AreEqual(TokenType.DomainHookOn, tokens[9].TokenType); Assert.AreEqual("User.UpdateAge", tokens[10].Value); Assert.AreEqual(TokenType.DomainHookEventDefinition, tokens[10].TokenType); }
public void Tokenize_CreateMethod_MultipleParams() { var tokenizer = new MicrowaveLanguageTokenizer(); var tokens = tokenizer.Tokenize(@"DomainClass User{ Create(Name: String, Age: Int32) }"); Assert.AreEqual(14, tokens.Count); Assert.AreEqual("Create", tokens[3].Value); Assert.AreEqual(TokenType.CreateMethod, tokens[3].TokenType); Assert.AreEqual(TokenType.ParameterBracketOpen, tokens[4].TokenType); Assert.AreEqual(TokenType.TypeDefSeparator, tokens[6].TokenType); Assert.AreEqual(TokenType.ParamSeparator, tokens[8].TokenType); Assert.AreEqual("Age", tokens[9].Value); Assert.AreEqual(TokenType.TypeDefSeparator, tokens[10].TokenType); Assert.AreEqual("Int32", tokens[11].Value); }
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 Tokenize_LineCounter() { var tokenizer = new MicrowaveLanguageTokenizer(); var tokens = tokenizer.Tokenize("DomainClass User{\r\nId: Guid\r\nPosts: [Post]\r\n}"); Assert.AreEqual(12, tokens.Count); Assert.AreEqual(1, tokens[0].LineNumber); Assert.AreEqual(1, tokens[1].LineNumber); Assert.AreEqual(1, tokens[2].LineNumber); Assert.AreEqual(2, tokens[3].LineNumber); Assert.AreEqual(2, tokens[4].LineNumber); Assert.AreEqual(2, tokens[5].LineNumber); Assert.AreEqual(3, tokens[6].LineNumber); Assert.AreEqual(3, tokens[7].LineNumber); Assert.AreEqual(3, tokens[8].LineNumber); Assert.AreEqual(3, tokens[9].LineNumber); Assert.AreEqual(3, tokens[10].LineNumber); Assert.AreEqual(4, tokens[11].LineNumber); }
public void Tokenize_DomainClass_Method() { var tokenizer = new MicrowaveLanguageTokenizer(); var tokens = tokenizer.Tokenize(@"DomainClass User{ UpdateName(Name: String): { UserId: Guid Age: Int32 } }"); Assert.AreEqual(19, tokens.Count); Assert.AreEqual("UpdateName", tokens[3].Value); Assert.AreEqual(TokenType.ParameterBracketOpen, tokens[4].TokenType); Assert.AreEqual(TokenType.TypeDefSeparator, tokens[6].TokenType); Assert.AreEqual(TokenType.TypeDefSeparator, tokens[9].TokenType); Assert.AreEqual(TokenType.ObjectBracketOpen, tokens[10].TokenType); Assert.AreEqual("UserId", tokens[11].Value); Assert.AreEqual(TokenType.TypeDefSeparator, tokens[12].TokenType); Assert.AreEqual("Guid", tokens[13].Value); }