0.1.0 • Published 1 year ago

character.ot v0.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

character.ot

character.ot: The term of a basic OT system is often used to mean an OT system that has the basic capability of consistency maintenance for a pair of primitive character-wise insert and delete operations. The character.ot give the support.

Quick start

Execute Operation

// the init document state
let document = new Cot.Document("abc");
// the operator action
let action = {
  n: OTActionName.CharacterInsert,
  p: 3,
  c: "d",
};
// context which operation is defined is the init document state
// action denotes an operation to do
let operation = Cot.newOperation(document, action);
// execute operation
document.execute(operation);
expect(document.content).toEqual("abcd");

Transform Operation

let document = new Cot.Document("abc");

let a = {
  n: OTActionName.CharacterInsert,
  p: 3,
  c: "d",
};
let A = Cot.newOperation(document, a);
let b = {
  n: OTActionName.CharacterInsert,
  p: 3,
  c: "e",
};
let B = Cot.newOperation(document, b);
document.executeWithTransform(A);
document.executeWithTransform(B);

expect(document.content).toEqual("abcde");

Use Scenario

There is the init document is "abc". The user A insert '_' into the index '0' position in init document, and user B to insert 'd' into the index '3' position in init document. When the document firstly execute user A's operation, and then execute user B'. Finally, the document is "_abcd".

let document = new Cot.Document("abc");

let a = {
  n: OTActionName.CharacterInsert,
  p: 0,
  c: "_",
};
let A = Cot.newOperation(document, a);
let b = {
  n: OTActionName.CharacterInsert,
  p: 3,
  c: "d",
};
let B = Cot.newOperation(document, b);
document.executeWithTransform(A);
document.executeWithTransform(B);

expect(document.content).toEqual("_abcd");

More use scenario under file test\scenario.test.ts.

How To Describe Bug

Please give a test, for example the test\scenario.test.ts:

/**
 * scenario:
 *  given
 *    the init document is "abc".
 *  when
 *    user A insert 'd' into the index '3' position in init document,
 *    and user B also want to insert 'e' into the same position in init document.
 *    the document firstly execute user A's operation, and then execute user B'.
 *  then
 *    the document is "abcde".
 */
test("scenario", () => {
  let document = new Cot.Document("abc");

  let a = {
    n: OTActionName.CharacterInsert,
    p: 3,
    c: "d",
  };
  let A = Cot.newOperation(document, a);
  let b = {
    n: OTActionName.CharacterInsert,
    p: 3,
    c: "e",
  };
  let B = Cot.newOperation(document, b);
  document.executeWithTransform(A);
  document.executeWithTransform(B);

  expect(document.content).toEqual("abcde");
});
0.1.0

1 year ago