コード例 #1
0
        public void SkipWhitespaceSetsPositionOnNextNonWhitespace()
        {
            //Arrange
            var keeper = new StringKeeper(" \t\n\r\ftest");

            //Act
            keeper.SkipWhiteSpace();

            //Assert
            keeper.Next.Should().Be('t');
        }
コード例 #2
0
        public void TakeMovesThePositionAlong()
        {
            //Arrange
            var keeper = new StringKeeper("test");

            //Act
            keeper.Take();

            //Assert
            keeper.Next.Should().Be('e');
        }
コード例 #3
0
        public void FinishedShouldBeTrueAfterTakeAll()
        {
            //Arrange
            var keeper = new StringKeeper("test");

            //Act
            keeper.TakeAll();

            //Assert
            keeper.Finished.Should().BeTrue();
        }
コード例 #4
0
        public void TakeAllReturnsFullString()
        {
            //Arrange
            var keeper = new StringKeeper("test");

            //Act
            var result = keeper.TakeAll();

            //Assert
            result.Should().Be("test");
        }
コード例 #5
0
        public void TakeReturnsTheNextCharacter()
        {
            //Arrange
            var keeper = new StringKeeper("test");

            //Act
            var result = keeper.Take();

            //Assert
            result.Should().Be("t");
        }
コード例 #6
0
        public void NextInReturnsFalseIfFirstNotCharInRange()
        {
            //Arrange
            var keeper = new StringKeeper("test");

            //Act
            var first = keeper.NextIn("nope");

            //Assert
            first.Should().BeFalse();
        }
コード例 #7
0
        public void CopiedInstancesDoNotFollowTheOriginal()
        {
            //Arrange
            var keeper  = new StringKeeper("test");
            var keeper2 = new StringKeeper(keeper);

            //Act
            keeper.TakeAll();

            //Assert
            keeper2.Finished.Should().BeFalse();
        }
コード例 #8
0
        public void SkipWhitespaceWorksIfFinished()
        {
            //Arrange
            var keeper = new StringKeeper("test");

            keeper.TakeAll();

            //Act
            keeper.SkipWhiteSpace();

            //Assert
            keeper.Finished.Should().BeTrue(); //well, still true anyway
        }
コード例 #9
0
        public void CopiedInstancesShouldHaveTheSamePositionAsTheOriginal()
        {
            //Arrange
            var keeper = new StringKeeper("test");

            keeper.Take();

            //Act
            var keeper2 = new StringKeeper(keeper);

            //Assert
            keeper2.TakeAll().Should().Be(keeper.TakeAll());
        }
コード例 #10
0
        public void TakeAllReturnsRemainingText()
        {
            //Arrange
            var keeper = new StringKeeper("test");

            keeper.Take();

            //Act
            var result = keeper.TakeAll();

            //Assert
            result.Should().Be("est");
        }
コード例 #11
0
        public void FinishedShouldBeTrueWhenNoDataRemains()
        {
            //Arrange
            var keeper = new StringKeeper("test");

            keeper.Take(); //t
            keeper.Take(); //e
            keeper.Take(); //s
            keeper.Take(); //t

            //Act/Assert
            keeper.Finished.Should().BeTrue();
        }
コード例 #12
0
        public void CopyingAFinishedInstanceShouldProduceAFinishedInstance()
        {
            //Arrange
            var keeper = new StringKeeper("test");

            keeper.TakeAll();

            //Act
            var keeper2 = new StringKeeper(keeper);

            //Assert
            keeper2.Finished.Should().BeTrue();
        }
コード例 #13
0
        public string Difference(StringKeeper old)
        {
            if (old._text != _text)
            {
                return(string.Empty);
            }
            if (old._index > _index)
            {
                return(string.Empty);
            }

            return(_text.Substring(old._index, _index - old._index));
        }
コード例 #14
0
        public void WhitespaceSkippedDoesNotHaveToBeAtTheStart()
        {
            //Arrange
            var keeper = new StringKeeper("X \t\n\r\ftest");

            keeper.Take();

            //Act
            keeper.SkipWhiteSpace();

            //Assert
            keeper.Next.Should().Be('t');
        }
コード例 #15
0
        public void SetNullAndSaveRemovesEntryFromConfig()
        {
            System.Configuration.Configuration config = CreateConfig();
            config.AppSettings.Settings.Add(ConfigKey, Value);
            config.Save();

            StringKeeper keeper = CreateStringKeeper();

            keeper.Set(Key, null);
            keeper.Save();

            config = CreateConfig();
            Assert.IsFalse(config.AppSettings.Settings.AllKeys.Any());
        }
コード例 #16
0
        public void SwapCopiesTheCorrectPositionIntoAnotherInstance()
        {
            //Arrange
            var keeper  = new StringKeeper("test");
            var keeper2 = new StringKeeper(keeper);

            keeper.TakeAll();

            //Act
            keeper.Swap(keeper2);

            //Assert
            keeper2.Finished.Should().BeTrue();
        }
コード例 #17
0
        public void SwapImportsTheDetailsFromTheOtherInstance()
        {
            //Arrange
            var keeper    = new StringKeeper("test");
            var keeper2   = new StringKeeper(keeper);
            var takenData = keeper.TakeAll(); //keeper is now finished

            //Act
            keeper.Swap(keeper2);

            //Assert
            var result = keeper.TakeAll(); //if swap did not change keeper, this will return string.Empty

            result.Should().Be(takenData);
        }
コード例 #18
0
        public void TakeReturnsNulWhenNoDataRemains()
        {
            //Arrange
            var keeper = new StringKeeper("test");

            keeper.Take(); //t
            keeper.Take(); //e
            keeper.Take(); //s
            keeper.Take(); //t

            //Act
            var result = keeper.Take();

            //Assert
            result.Should().Be("\0");
        }
コード例 #19
0
        private static bool TryTake(StringKeeper stringKeeper, Dictionary <string, ApplyIfToken> tokens, out StringKeeper newStringKeeper, out ApplyIfToken token)
        {
            var thisToken = tokens.FirstOrDefault(x => stringKeeper.IsNext(x.Key, false));

            if (thisToken.Key != null)
            {
                var work = stringKeeper.Take(thisToken.Key.Length);
                newStringKeeper = work;
                token           = thisToken.Value;
                return(true);
            }

            newStringKeeper = stringKeeper;
            token           = null;
            return(false);
        }
コード例 #20
0
        public void SetAndSaveReplacesEntryInConfig()
        {
            const string value        = "Value";
            const string anotherValue = "Another value";

            System.Configuration.Configuration config = CreateConfig();
            config.AppSettings.Settings.Add(ConfigKey, value);
            config.Save();

            StringKeeper keeper = CreateStringKeeper();

            keeper.Set(Key, anotherValue);
            keeper.Save();

            config = CreateConfig();
            Assert.IsTrue(config.AppSettings.Settings.AllKeys.Count() == 1);
            Assert.AreEqual(anotherValue, config.AppSettings.Settings[ConfigKey].Value);
        }
コード例 #21
0
        private static bool TryTakeIdentifier(StringKeeper stringKeeper, out StringKeeper newStringKeeper, out ApplyIfToken token)
        {
            var work  = new StringKeeper(stringKeeper);
            var value = string.Empty;

            while (!IsTerminator(work))
            {
                value += work.Next;
                work   = work.Take();
            }

            if (!string.IsNullOrWhiteSpace(value))
            {
                newStringKeeper = work;
                token           = new ApplyIfToken(ApplyIfTokenType.Identifier, value);
                return(true);
            }

            newStringKeeper = stringKeeper;
            token           = null;
            return(false);
        }
コード例 #22
0
 public ErrorToken(StringKeeper pos, string errorMessage)
 {
     Text         = pos.TakeAll();
     ErrorMessage = errorMessage;
 }
コード例 #23
0
        public void GetReturnsNullWhenConfigEmpty()
        {
            StringKeeper keeper = CreateStringKeeper();

            Assert.IsNull(keeper.Get(Key));
        }
コード例 #24
0
 public StringKeeper(StringKeeper stringKeeper)
 {
     _index = stringKeeper._index;
     _text  = stringKeeper._text;
 }
コード例 #25
0
 private static bool IsTerminator(StringKeeper stringKeeper)
 {
     return(stringKeeper.IsEmpty || stringKeeper.IsWhitespace || _terminators.Contains(stringKeeper.Next.ToString()));
 }