public void Adapt_RepMultiple_Ok()
        {
            DifferResultToMspAdapter adapter = new DifferResultToMspAdapter();

            var ops = adapter.Adapt(new diff_match_patch().diff_main("abcde", "XbYdZ"));

            Assert.Equal(3, ops.Count);
            // X
            MspOperation op = ops[0];

            Assert.Equal(MspOperator.Replace, op.Operator);
            Assert.Equal("1", op.RangeA.ToString());
            Assert.Equal("a", op.ValueA);
            Assert.Equal("X", op.ValueB);
            // Y
            op = ops[1];
            Assert.Equal(MspOperator.Replace, op.Operator);
            Assert.Equal("3", op.RangeA.ToString());
            Assert.Equal("c", op.ValueA);
            Assert.Equal("Y", op.ValueB);
            // Z
            op = ops[2];
            Assert.Equal(MspOperator.Replace, op.Operator);
            Assert.Equal("5", op.RangeA.ToString());
            Assert.Equal("e", op.ValueA);
            Assert.Equal("Z", op.ValueB);
        }
示例#2
0
        public void Seed_WithTags_Ok()
        {
            OrthographyLayerFragmentSeeder seeder = new OrthographyLayerFragmentSeeder();

            seeder.SetSeedOptions(_seedOptions);
            seeder.Configure(new OrthographyLayerFragmentSeederOptions
            {
                Tags = new[]
                {
                    "alpha",
                    "beta",
                    "gamma"
                }
            });

            ITextLayerFragment fragment = seeder.GetFragment(_item, "1.1", "alpha");

            Assert.NotNull(fragment);

            OrthographyLayerFragment fr = fragment as OrthographyLayerFragment;

            Assert.NotNull(fr);

            Assert.Equal("1.1", fr.Location);
            Assert.NotNull(fr.Standard);
            Assert.Single(fr.Operations);
            MspOperation op = MspOperation.Parse(fr.Operations[0]);

            Assert.NotNull(op.Tag);
        }
        public void Adapt_InsRepDel_Ok()
        {
            DifferResultToMspAdapter adapter = new DifferResultToMspAdapter();

            var ops = adapter.Adapt(new diff_match_patch().diff_main("bxdf", "AbCd"));

            Assert.Equal(3, ops.Count);
            // ins
            MspOperation op = ops[0];

            Assert.Equal(MspOperator.Insert, op.Operator);
            Assert.Equal("1×0", op.RangeA.ToString());
            Assert.Equal("A", op.ValueB);
            // rep
            op = ops[1];
            Assert.Equal(MspOperator.Replace, op.Operator);
            Assert.Equal("2", op.RangeA.ToString());
            Assert.Equal("x", op.ValueA);
            Assert.Equal("C", op.ValueB);
            // del
            op = ops[2];
            Assert.Equal(MspOperator.Delete, op.Operator);
            Assert.Equal("4", op.RangeA.ToString());
            Assert.Equal("f", op.ValueA);
        }
        /// <summary>
        /// Creates and seeds a new part.
        /// </summary>
        /// <param name="item">The item this part should belong to.</param>
        /// <param name="location">The location.</param>
        /// <param name="baseText">The base text.</param>
        /// <returns>A new fragment.</returns>
        /// <exception cref="ArgumentNullException">item or location or
        /// baseText</exception>
        public override ITextLayerFragment GetFragment(
            IItem item, string location, string baseText)
        {
            if (item == null)
            {
                throw new ArgumentNullException(nameof(item));
            }
            if (location == null)
            {
                throw new ArgumentNullException(nameof(location));
            }
            if (baseText == null)
            {
                throw new ArgumentNullException(nameof(baseText));
            }

            // find 1st letter
            int i = 0;

            while (i < baseText.Length)
            {
                if (char.IsLetter(baseText[i]))
                {
                    break;
                }
                i++;
            }
            if (i == baseText.Length)
            {
                return(null);
            }

            // change it
            string standard = ChangeLetterAt(baseText, i);

            // create operation
            MspOperation op = new MspOperation
            {
                Operator = MspOperator.Replace,
                RangeA   = new TextRange(i, 1),
                ValueA   = new string(baseText[i], 1),
                ValueB   = new string(standard[i], 1),
                Tag      = _options?.Tags?.Length > 0
                    ? SeedHelper.RandomPickOneOf(_options.Tags) : null
            };

            OrthographyLayerFragment fragment = new OrthographyLayerFragment
            {
                Location = location,
                Standard = standard
            };

            fragment.Operations.Add(op.ToString());

            return(fragment);
        }
示例#5
0
        public void ToString_Delete_Ok(string tag, string note, string expected)
        {
            MspOperation op = new MspOperation
            {
                Operator = MspOperator.Delete,
                RangeA   = TextRange.Parse("2x3"),
                Tag      = tag,
                Note     = note
            };

            Assert.Equal(expected, op.ToString());
        }
示例#6
0
        public void ToString_Insert_Ok(string tag, string note, string expected)
        {
            MspOperation op = new MspOperation
            {
                Operator = MspOperator.Insert,
                RangeA   = TextRange.Parse("2x0"),
                ValueB   = "new",
                Tag      = tag,
                Note     = note
            };

            Assert.Equal(expected, op.ToString());
        }
示例#7
0
        public void ToString_ReplaceWithValueA_Ok(string tag, string note, string expected)
        {
            MspOperation op = new MspOperation
            {
                Operator = MspOperator.Replace,
                RangeA   = TextRange.Parse("2x3"),
                ValueA   = "old",
                ValueB   = "new",
                Tag      = tag,
                Note     = note
            };

            Assert.Equal(expected, op.ToString());
        }
        public void Adapt_InsInitial_Ok()
        {
            DifferResultToMspAdapter adapter = new DifferResultToMspAdapter();

            var ops = adapter.Adapt(new diff_match_patch().diff_main("eros", "heros"));

            Assert.Single(ops);
            // ins
            MspOperation op = ops[0];

            Assert.Equal(MspOperator.Insert, op.Operator);
            Assert.Equal("1×0", op.RangeA.ToString());
            Assert.Equal("h", op.ValueB);
        }
        public void Adapt_DelFinal_Ok()
        {
            DifferResultToMspAdapter adapter = new DifferResultToMspAdapter();

            var ops = adapter.Adapt(new diff_match_patch().diff_main("hocc", "hoc"));

            Assert.Single(ops);
            // del
            MspOperation op = ops[0];

            Assert.Equal(MspOperator.Delete, op.Operator);
            Assert.Equal("4", op.RangeA.ToString());
            Assert.Equal("c", op.ValueA);
        }
        public void Adapt_RepFinal_Ok()
        {
            DifferResultToMspAdapter adapter = new DifferResultToMspAdapter();

            var ops = adapter.Adapt(new diff_match_patch().diff_main("victo", "victu"));

            Assert.Single(ops);
            // rep
            MspOperation op = ops[0];

            Assert.Equal(MspOperator.Replace, op.Operator);
            Assert.Equal("5", op.RangeA.ToString());
            Assert.Equal("o", op.ValueA);
            Assert.Equal("u", op.ValueB);
        }
        public void Adapt_RepWithShorter_Ok()
        {
            DifferResultToMspAdapter adapter = new DifferResultToMspAdapter();

            var ops = adapter.Adapt(new diff_match_patch().diff_main("vicsit", "vixit"));

            Assert.Single(ops);
            // rep
            MspOperation op = ops[0];

            Assert.Equal(MspOperator.Replace, op.Operator);
            Assert.Equal("3×2", op.RangeA.ToString());
            Assert.Equal("cs", op.ValueA);
            Assert.Equal("x", op.ValueB);
        }
        public void Adapt_MovFromEnd_Ok()
        {
            DifferResultToMspAdapter adapter = new DifferResultToMspAdapter();

            var ops = adapter.Adapt(new diff_match_patch().diff_main("abX", "Xab"));

            Assert.Single(ops);
            // mov
            MspOperation op = ops[0];

            Assert.Equal(MspOperator.Move, op.Operator);
            Assert.Equal("3", op.RangeA.ToString());
            Assert.Equal("1×0", op.RangeB.ToString());
            Assert.Equal("X", op.ValueA);
        }
示例#13
0
        public void Parse_SwapWithValuesAB_Ok(string tag, string note)
        {
            string       text = AppendTagAndNote("\"a\"@2x1~\"b\"@4x1", tag, note);
            MspOperation op   = MspOperation.Parse(text);

            // op: swap
            Assert.Equal(MspOperator.Swap, op.Operator);
            // ranges: A
            Assert.Equal("2", op.RangeA.ToString());
            Assert.Equal("4", op.RangeB.ToString());
            // values: A B
            Assert.Equal("a", op.ValueA);
            Assert.Equal("b", op.ValueB);
            // tag and notes
            Assert.Equal(tag, op.Tag);
            Assert.Equal(note, op.Note);
        }
示例#14
0
        public void Parse_MoveWithValueA_Ok(string tag, string note)
        {
            string       text = AppendTagAndNote("\"a\"@2x1>@4", tag, note);
            MspOperation op   = MspOperation.Parse(text);

            // op: move
            Assert.Equal(MspOperator.Move, op.Operator);
            // ranges: A
            Assert.Equal("2", op.RangeA.ToString());
            Assert.Equal("4×0", op.RangeB.ToString());
            // values: A
            Assert.Equal("a", op.ValueA);
            Assert.Null(op.ValueB);
            // tag and notes
            Assert.Equal(tag, op.Tag);
            Assert.Equal(note, op.Note);
        }
示例#15
0
        public void Parse_ReplaceWithValueA_Ok(string tag, string note)
        {
            string       text = AppendTagAndNote("\"a\"@2x1=\"b\"", tag, note);
            MspOperation op   = MspOperation.Parse(text);

            // op: replace
            Assert.Equal(MspOperator.Replace, op.Operator);
            // ranges: A
            Assert.Equal("2", op.RangeA.ToString());
            Assert.Equal(TextRange.Empty, op.RangeB);
            // values: A B
            Assert.Equal("a", op.ValueA);
            Assert.Equal("b", op.ValueB);
            // tag and notes
            Assert.Equal(tag, op.Tag);
            Assert.Equal(note, op.Note);
        }
示例#16
0
        public void Parse_Insert_Ok(string tag, string note)
        {
            string       text = AppendTagAndNote("@2x0=\"s\"", tag, note);
            MspOperation op   = MspOperation.Parse(text);

            // op: delete
            Assert.Equal(MspOperator.Insert, op.Operator);
            // ranges: A
            Assert.Equal("2×0", op.RangeA.ToString());
            Assert.Equal(TextRange.Empty, op.RangeB);
            // values: B
            Assert.Equal("s", op.ValueB);
            Assert.Null(op.ValueA);
            // tag and notes
            Assert.Equal(tag, op.Tag);
            Assert.Equal(note, op.Note);
        }
示例#17
0
        public void Seed_WithoutTags_Ok()
        {
            OrthographyLayerFragmentSeeder seeder = new OrthographyLayerFragmentSeeder();

            ITextLayerFragment fragment = seeder.GetFragment(_item, "1.1", "alpha");

            Assert.NotNull(fragment);

            OrthographyLayerFragment fr = fragment as OrthographyLayerFragment;

            Assert.NotNull(fr);

            Assert.Equal("1.1", fr.Location);
            Assert.NotNull(fr.Standard);
            Assert.Single(fr.Operations);
            MspOperation op = MspOperation.Parse(fr.Operations[0]);

            Assert.Null(op.Tag);
        }
        public void Adapt_DelMultiple_Ok()
        {
            DifferResultToMspAdapter adapter = new DifferResultToMspAdapter();

            var ops = adapter.Adapt(new diff_match_patch().diff_main("XabYcdZ", "abcd"));

            Assert.Equal(3, ops.Count);
            // X
            MspOperation op = ops[0];

            Assert.Equal(MspOperator.Delete, op.Operator);
            Assert.Equal("1", op.RangeA.ToString());
            Assert.Equal("X", op.ValueA);
            // Y
            op = ops[1];
            Assert.Equal(MspOperator.Delete, op.Operator);
            Assert.Equal("4", op.RangeA.ToString());
            Assert.Equal("Y", op.ValueA);
            // Z
            op = ops[2];
            Assert.Equal(MspOperator.Delete, op.Operator);
            Assert.Equal("7", op.RangeA.ToString());
            Assert.Equal("Z", op.ValueA);
        }
示例#19
0
        public void Parse_Whitespaces_Null()
        {
            MspOperation op = MspOperation.Parse("  \n  ");

            Assert.Null(op);
        }
示例#20
0
        public void Parse_Empty_Null()
        {
            MspOperation op = MspOperation.Parse("");

            Assert.Null(op);
        }
示例#21
0
        public void Parse_Null_Null()
        {
            MspOperation op = MspOperation.Parse(null);

            Assert.Null(op);
        }