2024-06-13 06:43:19 +00:00
|
|
|
import { describe, expect, it } from "vitest";
|
2024-10-29 13:46:56 +00:00
|
|
|
import { CounterDiff, LoroDoc } from "../bundler/index";
|
2024-06-13 06:43:19 +00:00
|
|
|
|
|
|
|
function oneMs(): Promise<void> {
|
|
|
|
return new Promise((r) => setTimeout(r));
|
|
|
|
}
|
|
|
|
|
|
|
|
describe("counter", () => {
|
|
|
|
it("increment", () => {
|
2024-09-05 12:27:31 +00:00
|
|
|
const doc = new LoroDoc();
|
2024-06-13 06:43:19 +00:00
|
|
|
const counter = doc.getCounter("counter");
|
|
|
|
counter.increment(1);
|
|
|
|
counter.increment(2);
|
|
|
|
counter.decrement(1);
|
|
|
|
expect(counter.value).toBe(2);
|
|
|
|
});
|
|
|
|
|
2024-10-29 13:46:56 +00:00
|
|
|
it("encode", async () => {
|
2024-09-05 12:27:31 +00:00
|
|
|
const doc = new LoroDoc();
|
2024-06-13 06:43:19 +00:00
|
|
|
const counter = doc.getCounter("counter");
|
|
|
|
counter.increment(1);
|
|
|
|
counter.increment(2);
|
|
|
|
counter.decrement(4);
|
2024-10-29 13:46:56 +00:00
|
|
|
|
2024-06-13 06:43:19 +00:00
|
|
|
const updates = doc.exportFrom();
|
|
|
|
const snapshot = doc.exportSnapshot();
|
|
|
|
const json = doc.exportJsonUpdates();
|
2024-09-05 12:27:31 +00:00
|
|
|
const doc2 = new LoroDoc();
|
2024-06-13 06:43:19 +00:00
|
|
|
doc2.import(updates);
|
|
|
|
expect(doc2.toJSON()).toStrictEqual(doc.toJSON());
|
2024-09-05 12:27:31 +00:00
|
|
|
const doc3 = new LoroDoc();
|
2024-06-13 06:43:19 +00:00
|
|
|
doc3.import(snapshot);
|
|
|
|
expect(doc3.toJSON()).toStrictEqual(doc.toJSON());
|
2024-09-05 12:27:31 +00:00
|
|
|
const doc4 = new LoroDoc();
|
2024-06-13 06:43:19 +00:00
|
|
|
doc4.importJsonUpdates(json);
|
|
|
|
expect(doc4.toJSON()).toStrictEqual(doc.toJSON());
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("counter event", () => {
|
|
|
|
it("event", async () => {
|
2024-09-05 12:27:31 +00:00
|
|
|
const doc = new LoroDoc();
|
2024-06-13 06:43:19 +00:00
|
|
|
let triggered = false;
|
|
|
|
doc.subscribe((e) => {
|
|
|
|
triggered = true;
|
|
|
|
const diff = e.events[0].diff as CounterDiff;
|
|
|
|
expect(diff.type).toBe("counter");
|
|
|
|
expect(diff.increment).toStrictEqual(-1);
|
|
|
|
});
|
|
|
|
const counter = doc.getCounter("counter");
|
|
|
|
|
|
|
|
counter.increment(1);
|
|
|
|
counter.increment(2);
|
|
|
|
counter.decrement(4);
|
|
|
|
doc.commit();
|
|
|
|
await oneMs();
|
|
|
|
expect(triggered).toBe(true);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|