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."); }
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); }
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); }
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"); }
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"); }
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)"); }
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); }
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()); }
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"); }
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>)"); }
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.)"); }
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}"); }
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"); }
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.)(?=)"); }
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>)"); }
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)"); }
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); }
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); }
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.)?"); }
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); }