public void TextNavigator_Move_1()
        {
            const string  text      = "ABC";
            TextNavigator navigator = new TextNavigator(text);

            Assert.AreSame(navigator, navigator.Move(2));
            Assert.AreEqual(2, navigator.Position);
            Assert.AreSame(navigator, navigator.Move(-2));
            Assert.AreEqual(0, navigator.Position);
        }
        public void TextNavigator_ReadWord_1()
        {
            TextNavigator navigator = new TextNavigator("Hello, world!");

            Assert.AreEqual("Hello", navigator.ReadWord());
            Assert.AreEqual(string.Empty, navigator.ReadWord());
            navigator.Move(2);
            Assert.AreEqual("world", navigator.ReadWord());
            Assert.AreEqual(string.Empty, navigator.ReadWord());
            navigator.Move(2);
            Assert.IsNull(navigator.ReadWord());
        }
        public void TextNavigator_ReadWord_2()
        {
            char[]        additional = { '<', '>' };
            TextNavigator navigator  = new TextNavigator("<Hello>, world!");

            Assert.AreEqual("<Hello>", navigator.ReadWord(additional));
            Assert.AreEqual(string.Empty, navigator.ReadWord(additional));
            navigator.Move(2);
            Assert.AreEqual("world", navigator.ReadWord(additional));
            Assert.AreEqual(string.Empty, navigator.ReadWord(additional));
            navigator.Move(2);
            Assert.IsNull(navigator.ReadWord(additional));
        }
        public void TextNavigator_RecentText_1()
        {
            TextNavigator navigator = new TextNavigator("Hello, world!");

            Assert.AreEqual(string.Empty, navigator.RecentText(4));
            navigator.Move(4);
            Assert.AreEqual(string.Empty, navigator.RecentText(-1));
            Assert.AreEqual("Hell", navigator.RecentText(4));
            navigator.Move(9);
            Assert.AreEqual("rld!", navigator.RecentText(4));
            Assert.AreEqual("Hello, world!", navigator.RecentText(20));
            navigator.Move(9);
            Assert.AreEqual(string.Empty, navigator.RecentText(1));
        }
        public void TextNavigator_SkipWhile_1()
        {
            TextNavigator navigator = new TextNavigator("111ABC");

            Assert.IsTrue(navigator.SkipWhile('1'));
            Assert.AreEqual('A', navigator.ReadChar());
            navigator.Move(2);
            Assert.IsFalse(navigator.SkipWhile('1'));
        }
        public void TextNavigator_SkipRange_1()
        {
            TextNavigator navigator = new TextNavigator("123ABC");

            Assert.IsTrue(navigator.SkipRange('0', '9'));
            Assert.AreEqual('A', navigator.ReadChar());
            navigator.Move(2);
            Assert.IsFalse(navigator.SkipRange('0', '9'));
        }
        public void TextNavigator_SkipPunctuation_1()
        {
            TextNavigator navigator = new TextNavigator(".,ABC");

            Assert.IsTrue(navigator.SkipPunctuation());
            Assert.AreEqual('A', navigator.ReadChar());
            navigator.Move(2);
            Assert.IsFalse(navigator.SkipPunctuation());
        }
        public void TextNavigator_SkipControl_1()
        {
            TextNavigator navigator = new TextNavigator("\t\tABC");

            Assert.IsTrue(navigator.SkipControl());
            Assert.AreEqual('A', navigator.ReadChar());
            navigator.Move(2);
            Assert.IsFalse(navigator.SkipControl());
        }
        public void TextNavigator_ReadWhile_1()
        {
            TextNavigator navigator = new TextNavigator("111234");

            Assert.AreEqual("111", navigator.ReadWhile('1'));
            Assert.AreEqual(string.Empty, navigator.ReadWhile('1'));
            navigator.Move(3);
            Assert.IsNull(navigator.ReadWhile('1'));
        }
        public void TextNavigator_SkipWhile_2()
        {
            char[]        digits    = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
            TextNavigator navigator = new TextNavigator("314ABC");

            Assert.IsTrue(navigator.SkipWhile(digits));
            Assert.AreEqual('A', navigator.ReadChar());
            navigator.Move(2);
            Assert.IsFalse(navigator.SkipWhile(digits));
        }
        public void TextNavigator_ReadWhile_2()
        {
            const string text1 = "314abc";

            char[]        good      = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
            TextNavigator navigator = new TextNavigator(text1);

            Assert.AreEqual("314", navigator.ReadWhile(good));
            Assert.AreEqual(string.Empty, navigator.ReadWhile(good));
            navigator.Move(3);
            Assert.IsNull(navigator.ReadWhile(good));
        }
        public void TextNavigator_PeekUntil_1()
        {
            const string  text      = "ABC]DEF";
            TextNavigator navigator = new TextNavigator(text);

            Assert.AreEqual("ABC", navigator.PeekUntil(']'));
            navigator.ReadChar();
            Assert.AreEqual("BC", navigator.PeekUntil(']'));
            navigator.ReadChar();
            navigator.ReadChar();
            Assert.AreEqual(string.Empty, navigator.PeekUntil(']'));
            navigator.ReadChar();
            Assert.AreEqual("DEF", navigator.PeekUntil(']'));
            navigator.Move(3);
            Assert.IsNull(navigator.PeekUntil(']'));
        }
        public void TextNavigator_PeekUntil_2()
        {
            const string text = "ABC]DE+F";

            char[]        stop      = { ']', '+' };
            TextNavigator navigator = new TextNavigator(text);

            Assert.AreEqual("ABC", navigator.PeekUntil(stop));
            navigator.ReadChar();
            Assert.AreEqual("BC", navigator.PeekUntil(stop));
            navigator.ReadChar();
            navigator.ReadChar();
            Assert.AreEqual(string.Empty, navigator.PeekUntil(stop));
            navigator.ReadChar();
            Assert.AreEqual("DE", navigator.PeekUntil(stop));
            navigator.Move(3);
            Assert.AreEqual("F", navigator.PeekUntil(stop));
            navigator.ReadChar();
            Assert.IsNull(navigator.PeekUntil(stop));
        }