Ejemplo n.º 1
0
        public void MutationShouldNotContainOriginalNodesPrefixInDescription()
        {
            // Arrange
            var prefix          = new CommentGroupNode("This is a comment.");
            var startOfLineNode = new StartOfLineNode()
            {
                Prefix = prefix
            };
            var childNodes = new List <RegexNode>
            {
                startOfLineNode,
                new CharacterNode('a'),
                new CharacterNode('b'),
                new CharacterNode('c')
            };
            var rootNode = new ConcatenationNode(childNodes);
            var target   = new AnchorRemovalMutator();

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

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

            mutation.OriginalNode.ShouldBe(startOfLineNode);
            mutation.ReplacementNode.ShouldBeNull();
            mutation.ReplacementPattern.ShouldBe("(?#This is a comment.)abc");
            mutation.DisplayName.ShouldBe("Regex anchor removal mutation");
            mutation.Description.ShouldBe("Anchor \"^\" was removed at offset 22.");
        }
Ejemplo n.º 2
0
        public void ReplaceNodeShouldAddOldNodesPrefixAsFirstPrefixIfNewNodeAlreadyHasMultiplePrefixes()
        {
            // Arrange
            var oldNodePrefix = new CommentGroupNode("This is a prefix.");
            var oldNode       = new TestRegexNode()
            {
                Prefix = oldNodePrefix
            };
            var newNodeFirstPrefix  = new CommentGroupNode("This is the first prefix of the new node.");
            var newNodeSecondPrefix = new CommentGroupNode("This is the second prefix of the new node.")
            {
                Prefix = newNodeFirstPrefix
            };
            var newNode = new TestRegexNode()
            {
                Prefix = newNodeSecondPrefix
            };
            var target = new ConcatenationNode(oldNode);

            // Act
            RegexNode result = target.ReplaceNode(oldNode, newNode);

            // Assert
            var childNode = result.ChildNodes.ShouldHaveSingleItem();

            childNode.Prefix.Comment.ShouldBe(newNode.Prefix.Comment);
            childNode.Prefix.Prefix.ShouldNotBeNull();
            childNode.Prefix.Prefix.Comment.ShouldBe(newNode.Prefix.Prefix.Comment);
            childNode.Prefix.Prefix.Prefix.ShouldNotBeNull();
            childNode.Prefix.Prefix.Prefix.Comment.ShouldBe(oldNodePrefix.Comment);
        }
        public void SpanOnCommentGroupShouldStartAfter()
        {
            // Arrange
            var comment = new CommentGroupNode("This is a comment.");
            var a       = new CharacterNode('a');
            var b       = new CharacterNode('b')
            {
                Prefix = comment
            };
            var concat = new ConcatenationNode(new List <RegexNode> {
                a, b
            });

            // Act
            var(commentStart, commentLength) = comment.GetSpan();
            var(aStart, aLength)             = a.GetSpan();
            var(bStart, bLength)             = b.GetSpan();
            var(concatStart, concatLength)   = concat.GetSpan();

            // Assert
            concatStart.ShouldBe(0);
            concatLength.ShouldBe(a.ToString().Length + b.ToString().Length);
            aStart.ShouldBe(0);
            aLength.ShouldBe(1);
            commentStart.ShouldBe(1);
            commentLength.ShouldBe(comment.ToString().Length);
            bStart.ShouldBe(commentStart + commentLength);
            bLength.ShouldBe(1);
        }
Ejemplo n.º 4
0
        public void RemoveNodeShouldAddOldNodesPrefixAsPrefixToNextNodesPrefixIfNextNodeAlreadyHasPrefix()
        {
            // Arrange
            var oldNodePrefix = new CommentGroupNode("This is a prefix.");
            var oldNode       = new TestRegexNode()
            {
                Prefix = oldNodePrefix
            };
            var nextNodePrefix = new CommentGroupNode("This is the prefix of the next node.");
            var nextNode       = new TestRegexNode()
            {
                Prefix = nextNodePrefix
            };
            var target = new ConcatenationNode(new List <RegexNode> {
                oldNode, nextNode
            });

            // Act
            RegexNode result = target.RemoveNode(oldNode);

            // Assert
            var remainingNode = result.ChildNodes.ShouldHaveSingleItem();

            remainingNode.Prefix.Comment.ShouldBe(nextNode.Prefix.Comment);
            remainingNode.Prefix.Prefix.ShouldNotBeNull();
            remainingNode.Prefix.Prefix.Comment.ShouldBe(oldNodePrefix.Comment);
        }
        public void ToStringOnEmptyCommentGroupShouldReturnQuestionMarkHashtagBetweenParentheses()
        {
            // Arrange
            var target = new CommentGroupNode();

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

            // Assert
            result.ShouldBe("(?#)");
        }
        public void ToStringShouldReturnQuestionMarkHashtagCommentBetweenParentheses()
        {
            // Arrange
            var comment = "This is a comment.";
            var target  = new CommentGroupNode(comment);

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

            // Assert
            result.ShouldBe($"(?#{comment})");
        }
        public void GetSpanShouldReturnTupleWithStartEqualToPrefixLengthAndLengthEqualToToStringLength()
        {
            // Arrange
            var target = new CommentGroupNode("This is a comment.");

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

            // Assert
            Start.ShouldBe(0);
            Length.ShouldBe(target.ToString().Length);
        }
Ejemplo n.º 8
0
        public void ToStringOnEscapeCharacterNodeWithPrefixShouldReturnPrefixBeforeEscapeCharacter()
        {
            // Arrange
            var comment = new CommentGroupNode("This is a comment.");
            var target  = EscapeCharacterNode.FromCharacter('a');

            target.Prefix = comment;

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

            // Assert
            result.ShouldBe(@"(?#This is a comment.)\a");
        }
Ejemplo n.º 9
0
        public void ToStringOnWordBoundaryNodeWithPrefixShouldReturnCommentBeforeBackslashLowercaseB()
        {
            // Arrange
            var comment = new CommentGroupNode("This is a comment.");
            var target  = new WordBoundaryNode()
            {
                Prefix = comment
            };

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

            // Assert
            result.ShouldBe(@"(?#This is a comment.)\b");
        }
Ejemplo n.º 10
0
        public void ToStringOnModeModifierGroupNodeWithprefixShouldReturnPrefixBeforeModeModifierGroupNode()
        {
            // Arrange
            var comment = new CommentGroupNode("This is a comment.");
            var target  = new ModeModifierGroupNode("imsnx-imsnx")
            {
                Prefix = comment
            };

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

            // Assert
            result.ShouldBe("(?#This is a comment.)(?imsnx-imsnx)");
        }
Ejemplo n.º 11
0
        public void AddNodeResultShouldNotHaveReferenceToOriginalPrefix()
        {
            // Arrange
            var prefix = new CommentGroupNode("This is a prefix.");
            var target = new TestRegexNode {
                Prefix = prefix
            };
            var newNode = new TestRegexNode();

            // Act
            RegexNode result = target.AddNode(newNode);

            // Assert
            result.Prefix.ShouldNotBe(target.Prefix);
        }
Ejemplo n.º 12
0
        public void AddNodeShouldCopyPrefix()
        {
            // Arrange
            var prefix = new CommentGroupNode("This is a prefix.");
            var target = new TestRegexNode {
                Prefix = prefix
            };
            var newNode = new TestRegexNode();

            // Act
            RegexNode result = target.AddNode(newNode);

            // Assert
            result.Prefix.ToString().ShouldBe(target.Prefix.ToString());
        }
Ejemplo n.º 13
0
        public void ToStringOnEmptyNodeWithPrefixShouldReturnPrefixToString()
        {
            // Arrange
            var comment = new CommentGroupNode("This is a comment.");
            var target  = new EmptyNode()
            {
                Prefix = comment
            };

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

            // Assert
            result.ShouldBe("(?#This is a comment.)");
        }
        public void ToStringOnStartOfStringNodeWithPrefixShouldReturnCommentBeforeBackslashUppercaseA()
        {
            // Arrange
            var comment = new CommentGroupNode("This is a comment.");
            var target  = new StartOfStringNode()
            {
                Prefix = comment
            };

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

            // Assert
            result.ShouldBe(@"(?#This is a comment.)\A");
        }
Ejemplo n.º 15
0
        public void ToStringOnNamedGroupNodeWithprefixShouldReturnPrefixBeforeNamedGroupNode()
        {
            // Arrange
            var comment = new CommentGroupNode("This is a comment.");
            var target  = new NamedGroupNode("name", false)
            {
                Prefix = comment
            };

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

            // Assert
            result.ShouldBe("(?#This is a comment.)(?<name>)");
        }
Ejemplo n.º 16
0
        public void ToStringOnCommentGroupWithprefixShouldReturnPrefixBeforeCommentGroup()
        {
            // Arrange
            var comment = new CommentGroupNode("This is a comment.");
            var target  = new CommentGroupNode("This is the target.")
            {
                Prefix = comment
            };

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

            // Assert
            result.ShouldBe("(?#This is a comment.)(?#This is the target.)");
        }
Ejemplo n.º 17
0
        public void ToStringOnUnicodeCategoryNodeWithPrefixShouldReturnPrefixBeforeUnicodeCategory()
        {
            // Arrange
            var comment = new CommentGroupNode("This is a comment.");
            var target  = new UnicodeCategoryNode("IsBasicLatin", false)
            {
                Prefix = comment
            };

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

            // Assert
            result.ShouldBe(@"(?#This is a comment.)\p{IsBasicLatin}");
        }
Ejemplo n.º 18
0
        public void ToStringOnStartOfLineNodeWithPrefixShouldReturnCommentBeforeCaret()
        {
            // Arrange
            var comment = new CommentGroupNode("This is a comment.");
            var target  = new StartOfLineNode()
            {
                Prefix = comment
            };

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

            // Assert
            result.ShouldBe("(?#This is a comment.)^");
        }
        public void ToStringOnBackreferenceNodeWithPrefixShouldReturnPrefixBeforeBackreference()
        {
            // Arrange
            var comment = new CommentGroupNode("This is a comment.");
            var target  = new BackreferenceNode(5)
            {
                Prefix = comment
            };

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

            // Assert
            result.ShouldBe(@"(?#This is a comment.)\5");
        }
Ejemplo n.º 20
0
        public void ToStringOnAnyCharacterNodeWithPrefixShouldReturnPrefixBeforeDot()
        {
            // Arrange
            var comment = new CommentGroupNode("This is a comment.");
            var target  = new AnyCharacterNode()
            {
                Prefix = comment
            };

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

            // Assert
            result.ShouldBe("(?#This is a comment.).");
        }
        public void ToStringOnCharacterClassShorthandNodeWithPrefixShouldReturnPrefixBeforeCharacterClassShorthand()
        {
            // Arrange
            var comment = new CommentGroupNode("This is a comment.");
            var target  = new CharacterClassShorthandNode('d')
            {
                Prefix = comment
            };

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

            // Assert
            result.ShouldBe(@"(?#This is a comment.)\d");
        }
        public void SpanLengthOfConcatenationNodeShouldNotIncludeItsOwnPrefix()
        {
            // Arrange
            var prefix = new CommentGroupNode("Comment");
            var target = new ConcatenationNode()
            {
                Prefix = prefix
            };

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

            // Assert
            Length.ShouldBe(target.ToString().Length - prefix.ToString().Length);
        }
        public void ToStringOnLookaroundGroupNodeWithprefixShouldReturnPrefixBeforeLookaroundGroupNode()
        {
            // Arrange
            var comment = new CommentGroupNode("This is a comment.");
            var target  = new LookaroundGroupNode(true, true)
            {
                Prefix = comment
            };

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

            // Assert
            result.ShouldBe("(?#This is a comment.)(?=)");
        }
Ejemplo n.º 24
0
        public void ToStringOnBalancingGroupWithPrefixShouldReturnPrefixBeforeBalancingGroup()
        {
            // Arrange
            var comment = new CommentGroupNode("This is a comment.");
            var target  = new BalancingGroupNode("balancedGroup", "currentGroup", false)
            {
                Prefix = comment
            };

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

            // Assert
            result.ShouldBe("(?#This is a comment.)(?<currentGroup-balancedGroup>)");
        }
Ejemplo n.º 25
0
        public void ToStringOnQuantifierWithPrefixShouldReturnPrefixBeforeOriginalQuantifierAndAfterQuantifiersChildNode()
        {
            // Arrange
            var comment       = new CommentGroupNode("This is a comment.");
            var characterNode = new CharacterNode('a');
            var target        = new QuantifierQuestionMarkNode(characterNode)
            {
                Prefix = comment
            };

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

            // Assert
            result.ShouldBe("a(?#This is a comment.)?");
        }
        public void ToStringOnNonCaptureGroupNodeWithprefixShouldReturnPrefixBeforeNonCaptureGroupNode()
        {
            // Arrange
            var comment   = new CommentGroupNode("This is a comment.");
            var childNode = new CharacterNode('a');
            var target    = new NonCaptureGroupNode(childNode)
            {
                Prefix = comment
            };

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

            // Assert
            result.ShouldBe("(?#This is a comment.)(?:a)");
        }
Ejemplo n.º 27
0
        public void GetSpanShouldReturnTupleWithStartEqualToPrefixLengthAndLength1()
        {
            // Arrange
            var comment = new CommentGroupNode("X");
            var target  = new CharacterNode('a')
            {
                Prefix = comment
            };

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

            // Assert
            Start.ShouldBe(5);
            Length.ShouldBe(1);
        }
Ejemplo n.º 28
0
        public void SpanShouldStartAfterPrefix()
        {
            // Arrange
            var childNode = new CharacterNode('a');
            var prefix    = new CommentGroupNode("X");
            var target    = new QuantifierQuestionMarkNode(childNode)
            {
                Prefix = prefix
            };

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

            // Assert
            Start.ShouldBe(6);
            Length.ShouldBe(1);
        }
Ejemplo n.º 29
0
        public void ToStringOnLazyNodeWithPrefixShouldReturnPrefixBeforeLazyNodeAndAfterQuantifier()
        {
            // Arrange
            var comment        = new CommentGroupNode("This is a comment.");
            var characterNode  = new CharacterNode('a');
            var quantifierNode = new QuantifierStarNode(characterNode);
            var target         = new LazyNode(quantifierNode)
            {
                Prefix = comment
            };

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

            // Assert
            result.ShouldBe("a*(?#This is a comment.)?");
        }
Ejemplo n.º 30
0
        public void ChildNodeShouldStartBeforeQuantifiersPrefix()
        {
            // Arrange
            var target = new CharacterNode('a');
            var prefix = new CommentGroupNode("X");

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

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

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