コード例 #1
0
        public void ShouldRemoveQuantifierPlus()
        {
            // Arrange
            var quantifierNode = new QuantifierPlusNode(new CharacterNode('X'));
            var childNodes     = new List <RegexNode>
            {
                new CharacterNode('a'),
                new CharacterNode('b'),
                new CharacterNode('c'),
                quantifierNode
            };
            var rootNode = new ConcatenationNode(childNodes);
            var target   = new QuantifierRemovalMutator();

            // Act
            var result = target.ApplyMutations(quantifierNode, rootNode);

            // Assert
            var mutation = result.ShouldHaveSingleItem();

            mutation.OriginalNode.ShouldBe(quantifierNode);
            mutation.ReplacementNode.ToString().ShouldBe("X");
            mutation.ReplacementPattern.ShouldBe("abcX");
            mutation.DisplayName.ShouldBe("Regex quantifier removal mutation");
            mutation.Description.ShouldBe("Quantifier \"+\" was removed at offset 4.");
        }
コード例 #2
0
        public void GetDescendantsShouldReturnAllDescendants()
        {
            // Arrange
            // a+bc*
            var charNodeA      = new CharacterNode('a');
            var charNodeB      = new CharacterNode('b');
            var charNodeC      = new CharacterNode('c');
            var quantifierPlus = new QuantifierPlusNode(charNodeA);
            var quantifierStar = new QuantifierStarNode(charNodeC);
            var grandchildren  = new List <RegexNode> {
                quantifierPlus, charNodeB, quantifierStar
            };
            var concatenationNode = new ConcatenationNode(grandchildren);
            var target            = new TestRegexNode(concatenationNode);

            // Act
            IEnumerable <RegexNode> result = target.GetDescendantNodes();

            // Assert
            result.Count().ShouldBe(6);
            result.First().ShouldBe(charNodeA);
            result.ElementAt(1).ShouldBe(quantifierPlus);
            result.ElementAt(2).ShouldBe(charNodeB);
            result.ElementAt(3).ShouldBe(charNodeC);
            result.ElementAt(4).ShouldBe(quantifierStar);
            result.Last().ShouldBe(concatenationNode);
        }
コード例 #3
0
        public void ToStringShouldReturnQuantifierPlusOnChildNodeToString()
        {
            // Arrange
            var characterNode = new CharacterNode('a');
            var target        = new QuantifierPlusNode(characterNode);

            // Act
            var result = target.ToString();

            // Assert
            result.ShouldBe("a+");
        }
コード例 #4
0
        public void SpanShouldStartAfterChildNodes()
        {
            // Arrange
            var childNode = new CharacterNode('a');
            var target    = new QuantifierPlusNode(childNode);

            // Act
            var(Start, Length) = target.GetSpan();

            // Assert
            Start.ShouldBe(childNode.ToString().Length);
            Length.ShouldBe(1);
        }
コード例 #5
0
        public void ChildNodeShouldStartBeforeQuantifier()
        {
            // Arrange
            var target = new CharacterNode('a');

            _ = new QuantifierPlusNode(target);

            // Act
            var(Start, Length) = target.GetSpan();

            // Assert
            Start.ShouldBe(0);
            Length.ShouldBe(1);
        }
コード例 #6
0
        public void ToStringOnQuantifierWithPrefixShouldReturnPrefixBeforeOriginalQuantifierAndAfterQuantifiersChildNode()
        {
            // Arrange
            var comment       = new CommentGroupNode("This is a comment.");
            var characterNode = new CharacterNode('a');
            var target        = new QuantifierPlusNode(characterNode)
            {
                Prefix = comment
            };

            // Act
            var result = target.ToString();

            // Assert
            result.ShouldBe("a(?#This is a comment.)+");
        }
コード例 #7
0
        public void SpanShouldStartAfterPrefix()
        {
            // Arrange
            var childNode = new CharacterNode('a');
            var prefix    = new CommentGroupNode("X");
            var target    = new QuantifierPlusNode(childNode)
            {
                Prefix = prefix
            };

            // Act
            var(Start, Length) = target.GetSpan();

            // Assert
            Start.ShouldBe(6);
            Length.ShouldBe(1);
        }
コード例 #8
0
        public void ChildNodeShouldStartBeforeQuantifiersPrefix()
        {
            // Arrange
            var target = new CharacterNode('a');
            var prefix = new CommentGroupNode("X");

            _ = new QuantifierPlusNode(target)
            {
                Prefix = prefix
            };

            // Act
            var(Start, Length) = target.GetSpan();

            // Assert
            Start.ShouldBe(0);
            Length.ShouldBe(1);
        }