Files
AFFiNE/blocksuite/framework/inline/src/__tests__/inline-range.unit.spec.ts
2024-12-20 15:38:06 +08:00

348 lines
8.8 KiB
TypeScript

import { expect, test } from 'vitest';
import {
intersectInlineRange,
isInlineRangeAfter,
isInlineRangeBefore,
isInlineRangeContain,
isInlineRangeEdge,
isInlineRangeEdgeAfter,
isInlineRangeEdgeBefore,
isInlineRangeEqual,
isInlineRangeIntersect,
isPoint,
mergeInlineRange,
} from '../utils/inline-range.js';
test('isInlineRangeContain', () => {
expect(
isInlineRangeContain({ index: 0, length: 0 }, { index: 0, length: 0 })
).toEqual(true);
expect(
isInlineRangeContain({ index: 0, length: 0 }, { index: 0, length: 2 })
).toEqual(false);
expect(
isInlineRangeContain({ index: 0, length: 2 }, { index: 0, length: 0 })
).toEqual(true);
expect(
isInlineRangeContain({ index: 0, length: 2 }, { index: 0, length: 1 })
).toEqual(true);
expect(
isInlineRangeContain({ index: 0, length: 2 }, { index: 0, length: 2 })
).toEqual(true);
expect(
isInlineRangeContain({ index: 1, length: 3 }, { index: 0, length: 0 })
).toEqual(false);
expect(
isInlineRangeContain({ index: 1, length: 3 }, { index: 0, length: 1 })
).toEqual(false);
expect(
isInlineRangeContain({ index: 1, length: 3 }, { index: 0, length: 2 })
).toEqual(false);
expect(
isInlineRangeContain({ index: 1, length: 4 }, { index: 2, length: 0 })
).toEqual(true);
expect(
isInlineRangeContain({ index: 1, length: 4 }, { index: 2, length: 3 })
).toEqual(true);
expect(
isInlineRangeContain({ index: 1, length: 4 }, { index: 2, length: 4 })
).toEqual(false);
});
test('isInlineRangeEqual', () => {
expect(
isInlineRangeEqual({ index: 0, length: 0 }, { index: 0, length: 0 })
).toEqual(true);
expect(
isInlineRangeEqual({ index: 0, length: 2 }, { index: 0, length: 1 })
).toEqual(false);
expect(
isInlineRangeEqual({ index: 1, length: 3 }, { index: 1, length: 3 })
).toEqual(true);
expect(
isInlineRangeEqual({ index: 0, length: 0 }, { index: 1, length: 0 })
).toEqual(false);
expect(
isInlineRangeEqual({ index: 2, length: 0 }, { index: 2, length: 0 })
).toEqual(true);
});
test('isInlineRangeIntersect', () => {
expect(
isInlineRangeIntersect({ index: 0, length: 2 }, { index: 0, length: 0 })
).toEqual(true);
expect(
isInlineRangeIntersect({ index: 0, length: 2 }, { index: 2, length: 0 })
).toEqual(true);
expect(
isInlineRangeIntersect({ index: 0, length: 0 }, { index: 1, length: 0 })
).toEqual(false);
expect(
isInlineRangeIntersect({ index: 1, length: 0 }, { index: 1, length: 0 })
).toEqual(true);
expect(
isInlineRangeIntersect({ index: 1, length: 0 }, { index: 0, length: 1 })
).toEqual(true);
expect(
isInlineRangeIntersect({ index: 1, length: 0 }, { index: 0, length: 0 })
).toEqual(false);
expect(
isInlineRangeIntersect({ index: 1, length: 0 }, { index: 2, length: 0 })
).toEqual(false);
expect(
isInlineRangeIntersect({ index: 1, length: 0 }, { index: 0, length: 2 })
).toEqual(true);
});
test('isInlineRangeBefore', () => {
expect(
isInlineRangeBefore({ index: 0, length: 1 }, { index: 2, length: 0 })
).toEqual(true);
expect(
isInlineRangeBefore({ index: 2, length: 0 }, { index: 0, length: 1 })
).toEqual(false);
expect(
isInlineRangeBefore({ index: 0, length: 0 }, { index: 1, length: 0 })
).toEqual(true);
expect(
isInlineRangeBefore({ index: 1, length: 0 }, { index: 0, length: 0 })
).toEqual(false);
expect(
isInlineRangeBefore({ index: 0, length: 0 }, { index: 0, length: 0 })
).toEqual(true);
expect(
isInlineRangeBefore({ index: 0, length: 0 }, { index: 0, length: 1 })
).toEqual(true);
expect(
isInlineRangeBefore({ index: 0, length: 1 }, { index: 0, length: 0 })
).toEqual(false);
});
test('isInlineRangeAfter', () => {
expect(
isInlineRangeAfter({ index: 2, length: 0 }, { index: 0, length: 1 })
).toEqual(true);
expect(
isInlineRangeAfter({ index: 0, length: 1 }, { index: 2, length: 0 })
).toEqual(false);
expect(
isInlineRangeAfter({ index: 1, length: 0 }, { index: 0, length: 0 })
).toEqual(true);
expect(
isInlineRangeAfter({ index: 0, length: 0 }, { index: 1, length: 0 })
).toEqual(false);
expect(
isInlineRangeAfter({ index: 0, length: 0 }, { index: 0, length: 0 })
).toEqual(true);
expect(
isInlineRangeAfter({ index: 0, length: 0 }, { index: 0, length: 1 })
).toEqual(false);
expect(
isInlineRangeAfter({ index: 0, length: 1 }, { index: 0, length: 0 })
).toEqual(true);
});
test('isInlineRangeEdge', () => {
expect(isInlineRangeEdge(1, { index: 1, length: 0 })).toEqual(true);
expect(isInlineRangeEdge(1, { index: 0, length: 1 })).toEqual(true);
expect(isInlineRangeEdge(0, { index: 0, length: 0 })).toEqual(true);
expect(isInlineRangeEdge(1, { index: 0, length: 0 })).toEqual(false);
expect(isInlineRangeEdge(0, { index: 1, length: 0 })).toEqual(false);
expect(isInlineRangeEdge(0, { index: 0, length: 1 })).toEqual(true);
});
test('isInlineRangeEdgeBefore', () => {
expect(isInlineRangeEdgeBefore(1, { index: 1, length: 0 })).toEqual(true);
expect(isInlineRangeEdgeBefore(1, { index: 0, length: 1 })).toEqual(false);
expect(isInlineRangeEdgeBefore(0, { index: 0, length: 0 })).toEqual(true);
expect(isInlineRangeEdgeBefore(1, { index: 0, length: 0 })).toEqual(false);
expect(isInlineRangeEdgeBefore(0, { index: 1, length: 0 })).toEqual(false);
expect(isInlineRangeEdgeBefore(0, { index: 0, length: 1 })).toEqual(true);
});
test('isInlineRangeEdgeAfter', () => {
expect(isInlineRangeEdgeAfter(1, { index: 0, length: 1 })).toEqual(true);
expect(isInlineRangeEdgeAfter(1, { index: 1, length: 0 })).toEqual(true);
expect(isInlineRangeEdgeAfter(0, { index: 0, length: 0 })).toEqual(true);
expect(isInlineRangeEdgeAfter(0, { index: 1, length: 0 })).toEqual(false);
expect(isInlineRangeEdgeAfter(1, { index: 0, length: 0 })).toEqual(false);
expect(isInlineRangeEdgeAfter(0, { index: 0, length: 1 })).toEqual(false);
expect(isInlineRangeEdgeAfter(0, { index: 0, length: 0 })).toEqual(true);
});
test('isPoint', () => {
expect(isPoint({ index: 1, length: 0 })).toEqual(true);
expect(isPoint({ index: 0, length: 2 })).toEqual(false);
expect(isPoint({ index: 0, length: 0 })).toEqual(true);
expect(isPoint({ index: 2, length: 0 })).toEqual(true);
expect(isPoint({ index: 2, length: 2 })).toEqual(false);
});
test('mergeInlineRange', () => {
expect(
mergeInlineRange({ index: 0, length: 0 }, { index: 1, length: 0 })
).toEqual({
index: 0,
length: 1,
});
expect(
mergeInlineRange({ index: 0, length: 0 }, { index: 0, length: 0 })
).toEqual({
index: 0,
length: 0,
});
expect(
mergeInlineRange({ index: 1, length: 0 }, { index: 2, length: 0 })
).toEqual({
index: 1,
length: 1,
});
expect(
mergeInlineRange({ index: 2, length: 0 }, { index: 1, length: 0 })
).toEqual({
index: 1,
length: 1,
});
expect(
mergeInlineRange({ index: 1, length: 3 }, { index: 2, length: 2 })
).toEqual({
index: 1,
length: 3,
});
expect(
mergeInlineRange({ index: 2, length: 2 }, { index: 1, length: 1 })
).toEqual({
index: 1,
length: 3,
});
expect(
mergeInlineRange({ index: 3, length: 2 }, { index: 2, length: 1 })
).toEqual({
index: 2,
length: 3,
});
expect(
mergeInlineRange({ index: 0, length: 4 }, { index: 1, length: 1 })
).toEqual({
index: 0,
length: 4,
});
expect(
mergeInlineRange({ index: 1, length: 1 }, { index: 0, length: 4 })
).toEqual({
index: 0,
length: 4,
});
expect(
mergeInlineRange({ index: 0, length: 2 }, { index: 1, length: 3 })
).toEqual({
index: 0,
length: 4,
});
});
test('intersectInlineRange', () => {
expect(
intersectInlineRange({ index: 0, length: 0 }, { index: 1, length: 0 })
).toEqual(null);
expect(
intersectInlineRange({ index: 0, length: 2 }, { index: 1, length: 1 })
).toEqual({ index: 1, length: 1 });
expect(
intersectInlineRange({ index: 0, length: 2 }, { index: 2, length: 0 })
).toEqual({ index: 2, length: 0 });
expect(
intersectInlineRange({ index: 1, length: 0 }, { index: 1, length: 0 })
).toEqual({ index: 1, length: 0 });
expect(
intersectInlineRange({ index: 1, length: 3 }, { index: 2, length: 2 })
).toEqual({ index: 2, length: 2 });
expect(
intersectInlineRange({ index: 1, length: 2 }, { index: 0, length: 3 })
).toEqual({ index: 1, length: 2 });
expect(
intersectInlineRange({ index: 1, length: 1 }, { index: 2, length: 2 })
).toEqual({ index: 2, length: 0 });
expect(
intersectInlineRange({ index: 2, length: 2 }, { index: 1, length: 3 })
).toEqual({ index: 2, length: 2 });
expect(
intersectInlineRange({ index: 2, length: 1 }, { index: 1, length: 1 })
).toEqual({ index: 2, length: 0 });
expect(
intersectInlineRange({ index: 0, length: 4 }, { index: 1, length: 2 })
).toEqual({ index: 1, length: 2 });
});