Example #1
0
        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);
        }
Example #2
0
        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();
        }
Example #3
0
        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();
        }
Example #4
0
        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();
        }
Example #5
0
        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();
        }
Example #6
0
        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);
        }
Example #7
0
        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);
        }
Example #8
0
        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);
            }
        }
Example #9
0
        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();
        }
Example #10
0
        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);
        }
Example #11
0
        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();
        }
Example #12
0
        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);
        }
Example #13
0
        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);
        }
Example #14
0
        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();
        }
Example #15
0
 public EventPropertyTypeDefSeparatorFoundState(MicrowaveLanguageParser microwaveLanguageParser) : base(microwaveLanguageParser)
 {
 }
Example #16
0
 public CreateMethodFoundState(MicrowaveLanguageParser microwaveLanguageParser) : base(microwaveLanguageParser)
 {
 }