public void SingleCharTokenTest()
 {
     ParsingContextTestImpl context = new ParsingContextTestImpl();
     MatchTokenParsingState target = new MatchTokenParsingState(",");
     Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, 'a'), ParsingResult.Miss);
     Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, 'c'), ParsingResult.Miss);
     Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, ','), ParsingResult.Done);
     Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, 'x'), ParsingResult.Miss);
     Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, ','), ParsingResult.Done);
 }
        public void MultiCharTokenWithNextAndErrorTest()
        {
            ParsingContextTestImpl context = new ParsingContextTestImpl();
            ParsingStateTestImpl nextState = new ParsingStateTestImpl(ParsingResult.Match);
            ParsingStateTestImpl errorState = new ParsingStateTestImpl(ParsingResult.Match);

            MatchTokenParsingState target = new MatchTokenParsingState(":=>");
            target.AddNextState(nextState);
            target.SetErrorState(errorState);

            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, 'f'), ParsingResult.Miss);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, 't'), ParsingResult.Miss);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, ':'), ParsingResult.Match);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, 'x'), ParsingResult.Miss);
            Assert.AreEqual<IParsingState>(errorState, context.CurrentState);
            Assert.AreEqual<string>(":", context.CurrentText);
            context.ResetText();
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, ':'), ParsingResult.Match);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, '='), ParsingResult.Match);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, '>'), ParsingResult.Match);
            Assert.AreEqual<IParsingState>(nextState, context.CurrentState);
            Assert.AreEqual<string>(string.Empty, context.CurrentText);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, 'y'), ParsingResult.Miss);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, 'm'), ParsingResult.Miss);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, ':'), ParsingResult.Match);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, '='), ParsingResult.Match);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, '>'), ParsingResult.Match);
            Assert.AreEqual<IParsingState>(nextState, context.CurrentState);
            Assert.AreEqual<string>(string.Empty, context.CurrentText);
        }
 public void NullParsingContextTest()
 {
     MatchTokenParsingState target = new MatchTokenParsingState(",");
     target.ProcessCharacter(null, 'a');
 }
        public void MultiCharTokenWithNextTest()
        {
            ParsingContextTestImpl context = new ParsingContextTestImpl();
            ParsingStateTestImpl nextState = new ParsingStateTestImpl(ParsingResult.Match);
            MatchTokenParsingState target = new MatchTokenParsingState(",;:!");
            target.AddNextState(nextState);

            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, 'a'), ParsingResult.Miss);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, 'c'), ParsingResult.Miss);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, ','), ParsingResult.Match);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, 'x'), ParsingResult.Miss);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, ','), ParsingResult.Match);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, ';'), ParsingResult.Match);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, ':'), ParsingResult.Match);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, '!'), ParsingResult.Match);
            Assert.AreEqual<IParsingState>(nextState, context.CurrentState);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, 'y'), ParsingResult.Miss);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, ','), ParsingResult.Match);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, ';'), ParsingResult.Match);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, ':'), ParsingResult.Match);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, 'z'), ParsingResult.Miss);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, ','), ParsingResult.Match);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, ';'), ParsingResult.Match);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, ':'), ParsingResult.Match);
            Assert.AreEqual<ParsingResult>(target.ProcessCharacter(context, '!'), ParsingResult.Match);
            Assert.AreEqual<IParsingState>(nextState, context.CurrentState);
        }