public void ScanComplexFile()
        {
            using(Stream resourceStream = 
                Assembly.GetExecutingAssembly().GetManifestResourceStream("octalforty.Wizardby.Tests.Resources.Waffle.mdl"))
            {
                IMdlScanner mdlScanner = new MdlScanner(new SourceReader(new StreamReader(resourceStream, Encoding.UTF8)));
                mdlScanner.RegisterKeyword("migration");
                mdlScanner.RegisterKeyword("default");
                mdlScanner.RegisterKeyword("create");
                mdlScanner.RegisterKeyword("table");

                TokenSequence tokens = mdlScanner.Scan();

                Assert.Greater(tokens.Count, 0);
            } // using
        }
        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);
        }
        public void ScanKeywords()
        {
            IMdlScanner mdlScanner = new MdlScanner(new SourceReader(new StringReader("migration \"Waffle\" revision => 1 default create table")));
            mdlScanner.RegisterKeyword("migration");
            mdlScanner.RegisterKeyword("default");
            mdlScanner.RegisterKeyword("create");
            mdlScanner.RegisterKeyword("table");

            TokenSequence tokens = mdlScanner.Scan();

            Assert.AreEqual(9, tokens.Count);
            Assert.AreEqual(new Token(TokenType.Keyword, "migration", null), tokens.RemoveFirst());
            Assert.AreEqual(new Token(TokenType.StringConstant, "Waffle", null), tokens.RemoveFirst());
            Assert.AreEqual(new Token(TokenType.Symbol, "revision", null), tokens.RemoveFirst());
            Assert.AreEqual(new Token(TokenType.PropertyAssignment, "=>", null), tokens.RemoveFirst());
            Assert.AreEqual(new Token(TokenType.IntegerConstant, "1", null), tokens.RemoveFirst());
            Assert.AreEqual(new Token(TokenType.Keyword, "default", null), tokens.RemoveFirst());
            Assert.AreEqual(new Token(TokenType.Keyword, "create", null), tokens.RemoveFirst());
            Assert.AreEqual(new Token(TokenType.Keyword, "table", null), tokens.RemoveFirst());
            Assert.AreEqual(new Token(TokenType.EndStatement, null), tokens.RemoveFirst());

            Assert.AreEqual(0, tokens.Count);
        }
        public static IMdlScanner CreateScanner(TextReader textReader)
        {
            IMdlScanner mdlScanner = new MdlScanner(new SourceReader(textReader));
            mdlScanner.RegisterKeyword("migration");
            mdlScanner.RegisterKeyword("deployment");
            mdlScanner.RegisterKeyword("type-aliases");
            mdlScanner.RegisterKeyword("type-alias");
            mdlScanner.RegisterKeyword("environment");
            mdlScanner.RegisterKeyword("defaults");
            mdlScanner.RegisterKeyword("default-primary-key");
            mdlScanner.RegisterKeyword("baseline");
            mdlScanner.RegisterKeyword("version");
            mdlScanner.RegisterKeyword("add");
            mdlScanner.RegisterKeyword("remove");
            mdlScanner.RegisterKeyword("table");
            mdlScanner.RegisterKeyword("column");
            mdlScanner.RegisterKeyword("index");
            mdlScanner.RegisterKeyword("reference");
            mdlScanner.RegisterKeyword("alter");
            mdlScanner.RegisterKeyword("templates");
            mdlScanner.RegisterKeyword("template");
            mdlScanner.RegisterKeyword("refactor");
            mdlScanner.RegisterKeyword("constraint");
            mdlScanner.RegisterKeyword("execute");
            mdlScanner.RegisterKeyword("native-sql");
            mdlScanner.RegisterKeyword("schema");
            mdlScanner.RegisterKeyword(MdlSyntax.IncludeTemplate);

            return mdlScanner;
        }
 public void RegisterKeywordThrowsArgumentExceptionOnEmptyKeyword()
 {
     IMdlScanner mdlScanner = new MdlScanner(new SourceReader(new StringReader("migration \"Waffle\" revision => 1 default create table")));
     mdlScanner.RegisterKeyword("");
 }