public void ShouldSkipDecrementOnZeroEndValue() { // Arrange var characterNode = new CharacterNode('a'); var quantifierNode = new QuantifierNMNode(0, 0, characterNode); var rootNode = new ConcatenationNode(quantifierNode); var target = new QuantifierQuantityMutator(); var expectedResults = new List <string> { "a{0,1}", }; // Act var mutations = target.ApplyMutations(quantifierNode, rootNode).ToList(); // Assert var index = 0; var originalQuantifier = "a{0,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 ShouldRemoveQuantifierNM() { // Arrange var quantifierNode = new QuantifierNMNode(5, 10, 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,10}\" was removed at offset 4."); }
public void ToStringShouldReturnQuantifierNMOfIntegersNAndMIfNoOriginalNAndMIsGiven() { // Arrange var characterNode = new CharacterNode('a'); var target = new QuantifierNMNode(5, 6, characterNode); // Act var result = target.ToString(); // Assert result.ShouldBe("a{5,6}"); }
public void ToStringShouldReturnOriginalQuantifierNMOnChildNodeToString() { // Arrange var characterNode = new CharacterNode('a'); var target = new QuantifierNMNode("05", "006", characterNode); // Act var result = target.ToString(); // Assert result.ShouldBe("a{05,006}"); }
public void SpanShouldStartAfterChildNodes() { // Arrange var childNode = new CharacterNode('a'); var target = new QuantifierNMNode(5, 10, childNode); // Act var(Start, Length) = target.GetSpan(); // Assert Start.ShouldBe(childNode.ToString().Length); Length.ShouldBe(6); }
public void ChildNodeShouldStartBeforeQuantifier() { // Arrange var target = new CharacterNode('a'); _ = new QuantifierNMNode(5, 10, 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 QuantifierNMNode("05", "006", characterNode) { Prefix = comment }; // Act var result = target.ToString(); // Assert result.ShouldBe("a(?#This is a comment.){05,006}"); }
public void SpanShouldStartAfterPrefix() { // Arrange var childNode = new CharacterNode('a'); var prefix = new CommentGroupNode("X"); var target = new QuantifierNMNode(5, 10, childNode) { Prefix = prefix }; // Act var(Start, Length) = target.GetSpan(); // Assert Start.ShouldBe(6); Length.ShouldBe(6); }
public void CopyingQuantifierNMNodeShouldCopyOriginalNOringalMAndNAndM() { // Arrange var childNode = new CharacterNode('a'); var target = new QuantifierNMNode("5", "10", childNode); // Act // ReplaceNode returns a copy of the current node. var result = target.ReplaceNode(childNode, new CharacterNode('b')); // Assert QuantifierNMNode quantifierNMNode = result.ShouldBeOfType <QuantifierNMNode>(); quantifierNMNode.OriginalN.ShouldBe(target.OriginalN); quantifierNMNode.N.ShouldBe(target.N); quantifierNMNode.OriginalM.ShouldBe(target.OriginalM); quantifierNMNode.M.ShouldBe(target.M); }
public void ChildNodeShouldStartBeforeQuantifiersPrefix() { // Arrange var target = new CharacterNode('a'); var prefix = new CommentGroupNode("X"); _ = new QuantifierNMNode(5, 10, target) { Prefix = prefix }; // Act var(Start, Length) = target.GetSpan(); // Assert Start.ShouldBe(0); Length.ShouldBe(1); }