public void PipelineTest()
        {
            // test analysing
            CodeFile codeFile = Builder.BuildStructure(GetTestInput());

            Assert.IsTrue(!String.IsNullOrWhiteSpace(codeFile.PreAutomatonCode));
            Assert.IsTrue(!String.IsNullOrWhiteSpace(codeFile.PostAutomatonCode));
            Assert.IsTrue(codeFile.Automaton != null);

            Assert.IsTrue(codeFile.Automaton.States.Count == 3);

            Assert.IsTrue(codeFile.Automaton.States["Init"].IsStart &&
                          !codeFile.Automaton.States["Init"].IsEnd &&
                          codeFile.Automaton.States["Init"].Name == "Init" &&
                          !String.IsNullOrWhiteSpace(codeFile.Automaton.States["Init"].EntryCode) &&
                          !String.IsNullOrWhiteSpace(codeFile.Automaton.States["Init"].ExitCode));

            Assert.IsTrue(!codeFile.Automaton.States["UpperChar"].IsStart &&
                          !codeFile.Automaton.States["UpperChar"].IsEnd &&
                          codeFile.Automaton.States["UpperChar"].Name == "UpperChar" &&
                          !String.IsNullOrWhiteSpace(codeFile.Automaton.States["UpperChar"].EntryCode) &&
                          String.IsNullOrWhiteSpace(codeFile.Automaton.States["UpperChar"].ExitCode));

            Assert.IsTrue(!codeFile.Automaton.States["LowerChar"].IsStart &&
                          codeFile.Automaton.States["LowerChar"].IsEnd &&
                          codeFile.Automaton.States["LowerChar"].Name == "LowerChar" &&
                          !String.IsNullOrWhiteSpace(codeFile.Automaton.States["LowerChar"].EntryCode) &&
                          String.IsNullOrWhiteSpace(codeFile.Automaton.States["LowerChar"].ExitCode));

            Assert.IsTrue(codeFile.Automaton.Transitions.Count == 4);

            Assert.IsTrue(codeFile.Automaton.Transitions.Single(trans => trans.SourceState.Name == "Init" && trans.TargetState.Name == "LowerChar") != null);
            Assert.IsTrue(codeFile.Automaton.Transitions.Single(trans => trans.SourceState.Name == "LowerChar" && trans.TargetState.Name == "LowerChar") != null);
            Assert.IsTrue(codeFile.Automaton.Transitions.Single(trans => trans.SourceState.Name == "LowerChar" && trans.TargetState.Name == "UpperChar" && !String.IsNullOrWhiteSpace(trans.EntryCode)) != null);
            Assert.IsTrue(codeFile.Automaton.Transitions.Single(trans => trans.SourceState.Name == "UpperChar" && trans.TargetState.Name == "LowerChar" && !String.IsNullOrWhiteSpace(trans.EntryCode)) != null);

            // test generation
            string csharpCode = Generator.GenerateCode(codeFile);

            //Assert.AreEqual(RemoveWhitespace(csharpCode), RemoveWhitespace(GetTestOutput()));

            // test syntax
            Assert.IsTrue(CodeVerifier.Verify(csharpCode), "The syntax of the generated code is broken.");
        }