public void ParseNativeSqlNode()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner("execute native-sql upgrade-resource => UpdateWhateverHappensToBe"));
            IExecuteNativeSqlNode executeNativeSqlNode = (IExecuteNativeSqlNode)mdlParser.Parse();

            Assert.AreEqual("UpdateWhateverHappensToBe",
                AstNodePropertyUtil.AsString(executeNativeSqlNode.Properties, "upgrade-resource"));
        }
        public void ParseAddSchema2()
        {
            var parser = new MdlParser(CreateScanner("add schema \"Foo\""));
            var addSchemaNode = (IAddSchemaNode)parser.Parse();

            Assert.IsNotNull(addSchemaNode);

            Assert.AreEqual("Foo", addSchemaNode.Name);
        }
        public void GenerateUpgrade()
        {
            IMdlParser mdlParser = new MdlParser(MdlParserTestFixture.CreateScanner(@"version 1:
    add table User:
        Login type => String, length => 200, nullable => false"));
            IAstNode astNode = mdlParser.Parse();

            IMdlCompilerStage upgradeGenerationStage = new UpgradeGenerationStage();
            astNode.Accept(upgradeGenerationStage);

            Assert.IsInstanceOfType(typeof(IUpgradeNode), astNode.ChildNodes[0]);
            Assert.AreEqual(1, astNode.ChildNodes[0].ChildNodes.Count);
        }
Ejemplo n.º 4
0
        private void ParseMdlFileButton_Click(object sender, EventArgs e)
        {
            MdlParser parser = new MdlParser(MdlFilePathTextBox.Text);
            MDLFile   file   = parser.Parse();
            // Graph graph = new Graph(file);
            // var verticesPaths = graph.VerticesCover();
            VerticesCover verticesCover = new VerticesCover(new Graph(file));

            OutPutTextBox.Text = "满足所有点覆盖情况下的最少路径\r\n" + string.Join("\r\n", verticesCover.VerticesCoverPaths());
            // var edgesPaths = graph.EdgesCover();
            EdgesCover edgesCover = new EdgesCover(new Graph(file));

            OutPutTextBox.Text += "\r\n满足所有边覆盖情况下的所有路径\r\n" + string.Join("\r\n", edgesCover.EdgesCoverPaths());
        }
        public void ParsePropertyBlock()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner(@"environment development 
	platform => sqlserver ,	host => ""(local)\sqlexpress""
	database => Waffle
	integrated-authentication => true"));
            IEnvironmentNode environmentNode = (IEnvironmentNode)mdlParser.Parse();

            Assert.AreEqual(new Location(0, 0), environmentNode.Location);

            Assert.AreEqual("sqlserver", AstNodePropertyUtil.AsString(environmentNode.Properties, "platform"));
            Assert.AreEqual("(local)\\sqlexpress", AstNodePropertyUtil.AsString(environmentNode.Properties, "host"));
            Assert.AreEqual("Waffle", AstNodePropertyUtil.AsString(environmentNode.Properties, "database"));
            Assert.AreEqual("true", AstNodePropertyUtil.AsString(environmentNode.Properties, "integrated-authentication"));
        }
        public IDeploymentInfo ParseDeploymentInfo(StreamReader streamReader)
        {
            MdlScanner scanner = new MdlScanner(new SourceReader(streamReader));
            scanner.RegisterKeyword("deployment");
            scanner.RegisterKeyword("environment");

            IMdlParser mdlParser = new MdlParser(scanner);

            IDeploymentNode deploymentNode = (IDeploymentNode)mdlParser.Parse();
            EnvironmentCollection environments = new EnvironmentCollection();

            foreach(IEnvironmentNode environmentNode in deploymentNode.ChildNodes)
            {
                environments.Add(ParseEnvironment(environmentNode));
            } // foreach

            return new DeploymentInfo(environments);
        }
Ejemplo n.º 7
0
        private void GenerateStateDiagramButton_Click(object sender, EventArgs e)
        {
            MdlParser      parser = new MdlParser(MdlFilePathTextBox.Text);
            MDLFile        file   = parser.Parse();
            Graph          graph  = new Graph(file);
            SaveFileDialog dialog = new SaveFileDialog();

            dialog.Filter = "PlantUML file(*.wsd)|*.wsd";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                File.WriteAllText(dialog.FileName, graph.ToPlantuml());
                Process process = new Process();
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.CreateNoWindow  = true;
                process.StartInfo.FileName        = "cmd.exe";
                process.StartInfo.Arguments       = "/c plantuml " + dialog.FileName;
                process.Start();
                process.WaitForExit();
                PlantUML plantUML = new PlantUML(dialog.FileName.Replace(".wsd", ".png"));
                plantUML.Show();
            }
        }
        public void ParseAddReferenceNode2()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner(
@"add table Foo:
    add reference ""FK_User_Login_Whatever_Else"""));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IAddTableNode), astNode);
            Assert.IsInstanceOfType(typeof(IAddReferenceNode), astNode.ChildNodes[0]);

            IAddReferenceNode addReferenceNode = (IAddReferenceNode)astNode.ChildNodes[0];

            Assert.AreEqual("FK_User_Login_Whatever_Else", addReferenceNode.Name);
        }
        public void ParseAddReferenceNode()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner(
@"add column Login type => String, length => 200:
    add reference ""FK_User_Login_Whatever_Else"""));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IAddColumnNode), astNode);
            Assert.IsInstanceOfType(typeof(IAddReferenceNode), astNode.ChildNodes[0]);

            IAddReferenceNode addReferenceNode = (IAddReferenceNode)astNode.ChildNodes[0];

            Assert.AreEqual("FK_User_Login_Whatever_Else", addReferenceNode.Name);
        }
        public void ParseImplicitAddIndexNode()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner(
@"add column Login type => String, length => 200:
    index ""UQ_Login""unique => true"));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IAddColumnNode), astNode);
            Assert.IsInstanceOfType(typeof(IAddIndexNode), astNode.ChildNodes[0]);

            IAddIndexNode addIndexNode = (IAddIndexNode)astNode.ChildNodes[0];

            Assert.AreEqual("UQ_Login", addIndexNode.Name);
            Assert.AreEqual("true", AstNodePropertyUtil.AsString(addIndexNode.Properties, "unique"));
        }
        public void ParseAnonymousAddReferenceNode()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner(
@"add column Login type => String, length => 200:
    add reference"));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IAddColumnNode), astNode);
            Assert.IsInstanceOfType(typeof(IAddReferenceNode), astNode.ChildNodes[0]);

            IAddReferenceNode addReferenceNode = (IAddReferenceNode)astNode.ChildNodes[0];

            Assert.IsEmpty(addReferenceNode.Name);
        }
        public void ParseMigrationNodeTree()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner(
@"migration ""Waffle"" revision => 1, configuration => Debug:
    baseline
        
    version 1 description => ""Updating database for the first time ever"":  
                     
        add table User:
            Login type => String, length => 200
            add column Password type => Binary, length => 64

    version 2 description => ""Updating the second time"""));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IMigrationNode), astNode);
            Assert.IsNull(astNode.Parent);
            Assert.AreEqual(3, astNode.ChildNodes.Count);

            IMigrationNode migrationNode = (IMigrationNode)astNode;

            Assert.AreEqual("Waffle", migrationNode.Name);
            Assert.AreEqual(1, AstNodePropertyUtil.AsInteger(migrationNode.Properties, "revision"));
            Assert.AreEqual("Debug", AstNodePropertyUtil.AsString(migrationNode.Properties, "configuration"));

            Assert.IsInstanceOfType(typeof(IBaselineNode), astNode.ChildNodes[0]);
            Assert.IsInstanceOfType(typeof(IVersionNode), astNode.ChildNodes[1]);
            Assert.IsInstanceOfType(typeof(IAddTableNode), astNode.ChildNodes[1].ChildNodes[0]);
            Assert.IsInstanceOfType(typeof(IVersionNode), astNode.ChildNodes[2]);
        }
        public void ParseRemoveTableNode()
        {
            MdlParser mdlParser = new MdlParser(CreateScanner(@"remove table User"));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IRemoveTableNode), astNode);

            IRemoveTableNode removeTableNode = (IRemoveTableNode)astNode;
            Assert.AreEqual("User", removeTableNode.Name);
        }
        public void ParseRefactorNode()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner("refactor add-mirror-table table => Foo"));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IRefactorNode), astNode);
            Assert.IsNull(astNode.Parent);
            Assert.AreEqual(1, astNode.Properties.Count);

            IRefactorNode refactorNode = (IRefactorNode)astNode;

            Assert.AreEqual("add-mirror-table", refactorNode.Name);
        }
        public void ParseAlterTableNode()
        {
            MdlParser mdlParser = new MdlParser(CreateScanner(@"alter table User"));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IAlterTableNode), astNode);

            IAlterTableNode alterTableNode = (IAlterTableNode)astNode;
            Assert.AreEqual("User", alterTableNode.Name);
        }
        public void ParseAlterColumnNode()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner(@"alter column Login nullable => false"));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IAlterColumnNode), astNode);

            IAlterColumnNode alterColumnNode = (IAlterColumnNode)astNode;

            Assert.AreEqual("Login", alterColumnNode.Name);
            Assert.AreEqual("false", AstNodePropertyUtil.AsString(alterColumnNode.Properties, "nullable"));
        }
        public void ParseAddIndexNode()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner(@"add index ""UQ_Login"" columns => [Login, ID]"));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IAddIndexNode), astNode);
            Assert.AreEqual("UQ_Login", ((IAddIndexNode)astNode).Name);
            Assert.IsInstanceOfType(typeof(IListAstNodePropertyValue), astNode.Properties["columns"].Value);
        }
        public void ParseAddColumnNodeTree()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner(@"add column Login:
    constraint ""DF_Foo"" default => ""foo"""));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IAddColumnNode), astNode);
            IAddColumnNode addColumnNode = (IAddColumnNode)astNode;
            Assert.AreEqual("Login", addColumnNode.Name);
            
            Assert.IsInstanceOfType(typeof(IAddConstraintNode), astNode.ChildNodes[0]);
            IAddConstraintNode addConstraintNode = (IAddConstraintNode)astNode.ChildNodes[0];
            Assert.AreEqual("DF_Foo", addConstraintNode.Name);
            Assert.AreEqual("foo", AstNodePropertyUtil.AsString(addConstraintNode.Properties, "default"));
        }
        public void ParseAddColumnNode()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner(@"add column Login type => String, length => 200, nullable => false"));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IAddColumnNode), astNode);

            IAddColumnNode addColumnNode = (IAddColumnNode)astNode;

            Assert.AreEqual("Login", addColumnNode.Name);
            Assert.AreEqual("String", AstNodePropertyUtil.AsString(addColumnNode.Properties, "type"));
            Assert.AreEqual(200, AstNodePropertyUtil.AsInteger(addColumnNode.Properties, "length"));
            Assert.AreEqual("false", AstNodePropertyUtil.AsString(addColumnNode.Properties, "nullable"));
        }
        public void ParseImplicitAddColumnNode()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner(@"add table User:
    Login type => String, length => 200, nullable => false"));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IAddTableNode), astNode);

            IAddTableNode addTableNode = (IAddTableNode)astNode;
            Assert.AreEqual("User", addTableNode.Name);

            Assert.IsInstanceOfType(typeof(IAddColumnNode), addTableNode.ChildNodes[0]);

            IAddColumnNode addColumnNode = (IAddColumnNode)addTableNode.ChildNodes[0];

            Assert.AreSame(addTableNode, addColumnNode.Parent);
            Assert.AreEqual("Login", addColumnNode.Name);
            Assert.AreEqual("String", AstNodePropertyUtil.AsString(addColumnNode.Properties, "type"));
            Assert.AreEqual(200, AstNodePropertyUtil.AsInteger(addColumnNode.Properties, "length"));
            Assert.AreEqual("false", AstNodePropertyUtil.AsString(addColumnNode.Properties, "nullable"));
        }
        public void ParseRemoveReferenceNode()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner(@"remove reference ""FK_User_Login_Whatever_Else"" fk-table => User"));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IRemoveReferenceNode), astNode);

            IRemoveReferenceNode removeReferenceNode = (IRemoveReferenceNode)astNode;

            Assert.AreEqual("FK_User_Login_Whatever_Else", removeReferenceNode.Name);
            Assert.AreEqual("User", AstNodePropertyUtil.AsString(removeReferenceNode.Properties, "fk-table"));
        }
 public void ParseComplexFile()
 {
     using(Stream resourceStream = 
         Assembly.GetExecutingAssembly().GetManifestResourceStream("octalforty.Wizardby.Tests.Resources.Waffle.mdl"))
     {
         IMdlParser mdlParser = new MdlParser(CreateScanner(new StreamReader(resourceStream, Encoding.UTF8)));
         IAstNode astNode = mdlParser.Parse();
     } // using
 }
        public void ParseRemoveIndexNode()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner(@"remove index ""IX_User_Login"" table-name => User"));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IRemoveIndexNode), astNode);

            IRemoveIndexNode removeIndexNode = (IRemoveIndexNode)astNode;

            Assert.AreEqual(new Location(0, 0), removeIndexNode.Location);
            Assert.AreEqual("IX_User_Login", removeIndexNode.Name);
            Assert.AreEqual("User", AstNodePropertyUtil.AsString(removeIndexNode.Properties, "table-name"));
        }
        public void ParseAlterTableNodeTree()
        {
            MdlParser mdlParser = new MdlParser(CreateScanner(@"alter table User:
    remove index ID
    remove constraint DFID
    include-template Tpl"));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IAlterTableNode), astNode);

            IAlterTableNode alterTableNode = (IAlterTableNode)astNode;
            Assert.AreEqual("User", alterTableNode.Name);

            Assert.IsInstanceOfType(typeof(IRemoveIndexNode), astNode.ChildNodes[0]);
            Assert.IsInstanceOfType(typeof(IRemoveConstraintNode), astNode.ChildNodes[1]);

             var includeTemplateNode = (IIncludeTemplateNode)astNode.ChildNodes[2];
            Assert.IsNotNull(includeTemplateNode);
            Assert.AreEqual("Tpl", includeTemplateNode.Name);
        }
        public void ParseAddConstraintNode()
        {
            MdlParser mdlParser = new MdlParser(CreateScanner(@"add constraint ""DF_Foo"" default => ""def"""));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IAddConstraintNode), astNode);

            IAddConstraintNode addConstraintNode = (IAddConstraintNode)astNode;
            Assert.AreEqual("def", AstNodePropertyUtil.AsString(addConstraintNode.Properties, "default"));
        }
        public void ParseImplicitAddTableNode()
        {
            MdlParser mdlParser = new MdlParser(CreateScanner(@"version 1:
    User"));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IVersionNode), astNode);
            Assert.IsInstanceOfType(typeof(IAddTableNode), astNode.ChildNodes[0]);

            IAddTableNode addTableNode = (IAddTableNode)astNode.ChildNodes[0];

            Assert.AreEqual("User", addTableNode.Name);
        }
        public void ParseIncorrectBlockLayout()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner(
@"add table Foo:
    ID
        index ""FK_User_Login_Whatever_Else"""));
            IAstNode astNode = mdlParser.Parse();
        }
        public void ParseAddIndexNode3()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner(@"add index ""IX_Login"" table => User, column => Login"));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IAddIndexNode), astNode);
            Assert.AreEqual("IX_Login", ((IAddIndexNode)astNode).Name);
            Assert.AreEqual("User", AstNodePropertyUtil.AsString(astNode.Properties["table"].Value));
            Assert.AreEqual("Login", AstNodePropertyUtil.AsString(astNode.Properties["column"].Value));
        }
        public void ParseRemoveConstraintNode()
        {
            MdlParser mdlParser = new MdlParser(CreateScanner(@"remove constraint DF_Foo"));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IRemoveConstraintNode), astNode);

            IRemoveConstraintNode removeConstraintNode = (IRemoveConstraintNode)astNode;
            Assert.AreEqual("DF_Foo", removeConstraintNode.Name);
        }
        public void ParseAnonymousAddIndexNode()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner(@"add column Foo:
    add index unique => true"));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IAddColumnNode), astNode);
            
            Assert.IsInstanceOfType(typeof(IAddIndexNode), astNode.ChildNodes[0]);
            IAddIndexNode addIndexNode = (IAddIndexNode)astNode.ChildNodes[0];

            Assert.IsEmpty(addIndexNode.Name);
            Assert.AreEqual("true", AstNodePropertyUtil.AsString(addIndexNode.Properties, "unique"));
        }
        private Schema GetSchema()
        {
            Environment environment = new Environment();

            using (Stream resourceStream =
                Assembly.GetExecutingAssembly().GetManifestResourceStream("octalforty.Wizardby.Tests.Resources.Blog.mdl"))
            {
                IMdlParser mdlParser = new MdlParser(MdlParserTestFixture.CreateScanner(
                                                         new StreamReader(resourceStream, Encoding.UTF8)));

                IMdlCompiler mdlCompiler = new MdlCompiler(new NullCodeGenerator(), environment);
                mdlCompiler.Compile(mdlParser.Parse(), MdlCompilationOptions.All);
            } // using
            
            return environment.Schema;
        }
        public void ParseAddIndexNode2()
        {
            IMdlParser mdlParser = new MdlParser(CreateScanner(@"add index ""UQ_Login"" columns => [[Login, desc], ID]"));
            IAstNode astNode = mdlParser.Parse();

            Assert.IsInstanceOfType(typeof(IAddIndexNode), astNode);
            Assert.IsInstanceOfType(typeof(IListAstNodePropertyValue), astNode.Properties["columns"].Value);

            IListAstNodePropertyValue columnsList = (IListAstNodePropertyValue)astNode.Properties["columns"].Value;

            Assert.IsInstanceOfType(typeof(IListAstNodePropertyValue), columnsList);
            Assert.IsInstanceOfType(typeof(IListAstNodePropertyValue), columnsList.Items[0]);

            IListAstNodePropertyValue loginList = (IListAstNodePropertyValue)columnsList.Items[0];

            Assert.AreEqual("Login", ((IStringAstNodePropertyValue)loginList.Items[0]).Value);
            Assert.AreEqual("desc", ((IStringAstNodePropertyValue)loginList.Items[1]).Value);
            Assert.AreEqual("ID", ((IStringAstNodePropertyValue)columnsList.Items[1]).Value);
        }