README
plus merge-text
Merge text tool with diffs and snapshots
Thank you John Resig for http://ejohn.org/projects/javascript-diff-algorithm/
Spec
"use strict";
var assert = require('assert');
var mergeText = require('../mergeText');
describe('Snapshot', () => {
it('toString', () => {
let text = 'Hello\nWorld\nOK';
let snapshot = mergeText.snapshot(text);
assert.equal(snapshot.toString(), text);
});
it('apply / simple update', () => {
let text = 'Hello\nWorld';
let snapshot = mergeText.snapshot(text);
let update1 = 'Hello-up\nWorld';
let update2 = 'Hello\nWorld-up';
let snapshot2 = snapshot.apply(update1, update2);
assert.equal(snapshot2.toString(), 'Hello-up\nWorld-up');
});
it('apply / new lines / with empty lines first', () => {
let text = 'Hello\nWorld';
let snapshot = mergeText.snapshot(text);
let update1 = '\n\nHello\nWorld';
let update2 = '\n\nHello\nWorld';
let snapshot2 = snapshot.apply(update1, update2);
assert.equal(snapshot2.toString(), 'Hello\nWorld');
});
it('apply / new lines / with first word', () => {
let text = 'Hello\nWorld';
let snapshot = mergeText.snapshot(text);
let update1 = '\n\nHello\nWorld';
let update2 = 'OK\n\nHello\nWorld';
let snapshot2 = snapshot.apply(update1, update2);
assert.equal(snapshot2.toString(), 'OK\n\nHello\nWorld');
});
it('original test with text', () => {
let a = 'The red brown fox jumped over the rolling log.';
let b = 'The brown spotted fox leaped over the rolling log';
let snapshot = mergeText.snapshot(a);
let snapshot2 = snapshot.apply(b);
var expected = b;
assert.equal(snapshot2.toString(), expected);
});
it('original merge with html', () => {
let a = 'The red brown fox jumped over the rolling log';
let b = 'The brown spotted fox leaped over the rolling log';
let changes = mergeText.snapshot(a).merge(b);
let html = mergeText.toHtml(changes);
var expected = 'The <del>red </del>brown <ins>spotted </ins>fox <del>jumped </del><ins>leaped </ins>over the rolling log';
assert.equal(html, expected);
});
it('original merge with markdown', () => {
let a = 'The red brown fox jumped over the rolling log';
let b = 'The brown spotted fox leaped over the rolling log';
let changes = mergeText.snapshot(a).merge(b);
let md = mergeText.toMarkdown(changes);
var expected = 'The ~~red~~ brown __spotted__ fox ~~jumped~~ __leaped__ over the rolling log';
assert.equal(md, expected);
});
it('merge(a,b,c)', () => {
let origin = 'a';
let update1 = 'a\nb';
let update2 = 'a\nc';
let snapshot = mergeText.merge(origin, update1, update2);
var expected = 'a\nb c';
assert.equal(snapshot.toString(), expected);
});
it('snapshot.toHtml()', () => {
let origin = 'Hello World';
let update1 = 'Hello this World';
let update2 = 'Hello new World';
let snapshot = mergeText.merge(origin, update1, update2);
var expected = '';
assert.equal(snapshot.toString(), 'Hello this new World');
assert.equal(snapshot.toHtml(), 'Hello <ins>this </ins><ins>new </ins>World');
});
it('snapshot.toMarkdown()', () => {
let origin = 'Hello World';
let update1 = 'Hello World OK';
let update2 = 'Hello world';
let snapshot = mergeText.merge(origin, update1, update2);
assert.equal(snapshot.toString(), 'Hello OK world');
assert.equal(snapshot.toMarkdown(), 'Hello ~~World~~ __OK__ __world__');
});
it('case to join origins', () => {
let snapshot = mergeText.snapshot('Hello World').apply('World OK', 'Hello So-So');
assert.equal(snapshot.toString(), 'Hello World OK So-So');
});
it('case to replace origins 1', () => {
let snapshot = mergeText.snapshot('Hello World').apply('Hello World OK', 'Hello New York OK');
assert.equal(snapshot.toString(), 'Hello New York OK OK');
});
it('case to replace origins 2', () => {
let snapshot = mergeText.snapshot('Hello World').apply('Hello Ukraine OK', 'Hello New York OK');
assert.equal(snapshot.toString(), 'Hello New York OK Ukraine OK');
});
it('case to replace origins 3 // merged version', () => {
let snapshot = mergeText.snapshot('Hello World OK').apply('Hello Ukraine OK', 'Hello New York OK');
assert.equal(snapshot.toString(), 'Hello New York Ukraine OK');
});
it('case to replace origins 4 // merged version and first word was removed', () => {
let snapshot = mergeText.snapshot('World Hello OK').apply('Hello Ukraine OK', 'Hello New York OK');
assert.equal(snapshot.toString(), 'Hello New York Ukraine OK');
});
it('merge same text', () => {
let snapshot = mergeText.snapshot('World Hello').apply('World Hello', 'World Hello');
assert.equal(snapshot.toString(), 'World Hello');
});
it('merge same text and replace', () => {
let snapshot = mergeText.snapshot('World Hello').apply('World Hello', 'World OK');
assert.equal(snapshot.toString(), 'World OK');
});
it('merge same text and update', () => {
let snapshot = mergeText.snapshot('World Hello').apply('World Hello', 'World Hello OK');
assert.equal(snapshot.toString(), 'World Hello OK');
});
});