public void ShouldRemoveQuantifierNOrMore()
        {
            // Arrange
            var quantifierNode = new QuantifierNOrMoreNode(5, 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 \"{5,}\" was removed at offset 4.");
        }
예제 #2
0
        public void ShouldSkipDecrementOnZeroStartValue()
        {
            // Arrange
            var characterNode  = new CharacterNode('a');
            var quantifierNode = new QuantifierNOrMoreNode(0, characterNode);
            var rootNode       = new ConcatenationNode(quantifierNode);
            var target         = new QuantifierUnlimitedQuantityMutator();

            var expectedResults = new List <string>
            {
                "a{1,}",
            };

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

            // Assert
            var index = 0;
            var originalQuantifier = "a{0,}";

            foreach (var mutation in mutations)
            {
                mutation.OriginalNode.ShouldBe(quantifierNode);
                mutation.ReplacementNode.ToString().ShouldBe(expectedResults[index]);
                mutation.ReplacementPattern.ShouldBe(expectedResults[index]);
                mutation.DisplayName.ShouldBe("Regex greedy quantifier quantity mutation");
                mutation.Description.ShouldBe($"Quantifier \"{originalQuantifier}\" was replaced with \"{expectedResults[index]}\" at offset 1.");
                index++;
            }
            mutations.Count.ShouldBe(1);
        }
        public void ToStringShouldReturnQuantifierNOrMoreOfIntegerNIfNoOriginalNIsGiven()
        {
            // Arrange
            var characterNode = new CharacterNode('a');
            var target        = new QuantifierNOrMoreNode(5, characterNode);

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

            // Assert
            result.ShouldBe("a{5,}");
        }
        public void ToStringShouldReturnOriginalQuantifierNOrMoreOnChildNodeToString()
        {
            // Arrange
            var characterNode = new CharacterNode('a');
            var target        = new QuantifierNOrMoreNode("05", characterNode);

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

            // Assert
            result.ShouldBe("a{05,}");
        }
        public void SpanShouldStartAfterChildNodes()
        {
            // Arrange
            var childNode = new CharacterNode('a');
            var target    = new QuantifierNOrMoreNode(5, childNode);

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

            // Assert
            Start.ShouldBe(childNode.ToString().Length);
            Length.ShouldBe(4);
        }
        public void ChildNodeShouldStartBeforeQuantifier()
        {
            // Arrange
            var target = new CharacterNode('a');

            _ = new QuantifierNOrMoreNode(5, target);

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

            // Assert
            Start.ShouldBe(0);
            Length.ShouldBe(1);
        }
        public void ToStringOnQuantifierWithPrefixShouldReturnPrefixBeforeOriginalQuantifierAndAfterQuantifiersChildNode()
        {
            // Arrange
            var comment       = new CommentGroupNode("This is a comment.");
            var characterNode = new CharacterNode('a');
            var target        = new QuantifierNOrMoreNode("05", characterNode)
            {
                Prefix = comment
            };

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

            // Assert
            result.ShouldBe("a(?#This is a comment.){05,}");
        }
        public void CopyingQuantifierNOrMoreNodeShouldCopyOriginalNAndN()
        {
            // Arrange
            var childNode = new CharacterNode('a');
            var target    = new QuantifierNOrMoreNode("5", childNode);

            // Act
            // ReplaceNode returns a copy of the current node.
            var result = target.ReplaceNode(childNode, new CharacterNode('b'));

            // Assert
            QuantifierNOrMoreNode quantifierNorMoreNode = result.ShouldBeOfType <QuantifierNOrMoreNode>();

            quantifierNorMoreNode.OriginalN.ShouldBe(target.OriginalN);
            quantifierNorMoreNode.N.ShouldBe(target.N);
        }
        public void SpanShouldStartAfterPrefix()
        {
            // Arrange
            var childNode = new CharacterNode('a');
            var prefix    = new CommentGroupNode("X");
            var target    = new QuantifierNOrMoreNode(5, childNode)
            {
                Prefix = prefix
            };

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

            // Assert
            Start.ShouldBe(6);
            Length.ShouldBe(4);
        }
        public void ChildNodeShouldStartBeforeQuantifiersPrefix()
        {
            // Arrange
            var target = new CharacterNode('a');
            var prefix = new CommentGroupNode("X");

            _ = new QuantifierNOrMoreNode(5, target)
            {
                Prefix = prefix
            };

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

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