예제 #1
0
        public void ReplaceTextSpans_ArbitraryTextSpans_NoCrash()
        {
            var tree1       = BBCodeTestUtil.GetAnyTree();
            var chosenTexts = new List <string>();
            var tree2       = BBCode.ReplaceTextSpans(tree1, txt =>
            {
                var count   = PexChoose.ValueFromRange("count", 0, 3);
                var indexes = PexChoose.Array <int>("indexes", count);
                PexAssume.TrueForAll(0, count, i => indexes[i] >= 0 && indexes[i] <= txt.Length && (i == 0 || indexes[i - 1] < indexes[i]));
                return
                (Enumerable.Range(0, count)
                 .Select(i =>
                {
                    var maxIndex = i == count - 1 ? txt.Length : indexes[i + 1];
                    var text = PexChoose.ValueNotNull <string>("text");
                    chosenTexts.Add(text);
                    return new TextSpanReplaceInfo(indexes[i], PexChoose.ValueFromRange("count", 0, indexes[i] - maxIndex + 1), new TextNode(text));
                })
                 .ToArray());
            }, null);
            var bbCode = tree2.ToBBCode();

            PexAssert.TrueForAll(chosenTexts, s => bbCode.Contains(s));
        }