|
|
@@ -39,10 +39,20 @@ describe('getPageBodyForContext', () => {
|
|
|
|
|
|
const result = getPageBodyForContext(mockEditor, 100, 200);
|
|
|
|
|
|
- // Should default cursor position to 0 and take 200 chars after
|
|
|
- const expectedContent = longContent.slice(0, 200);
|
|
|
- expect(result).toBe(expectedContent);
|
|
|
- expect(result).toHaveLength(200);
|
|
|
+ // Should default cursor position to 0
|
|
|
+ // Available before cursor: 0 (cursor at start)
|
|
|
+ // Shortfall before: 100 - 0 = 100
|
|
|
+ // Chars after: 200 + 100 = 300
|
|
|
+ // Expected: start=0, end=0+300=300
|
|
|
+ const expectedContent = longContent.slice(0, 300);
|
|
|
+ expect(result).toEqual({
|
|
|
+ content: expectedContent,
|
|
|
+ isPartial: true,
|
|
|
+ startIndex: 0,
|
|
|
+ endIndex: 300,
|
|
|
+ totalLength: 1000,
|
|
|
+ });
|
|
|
+ expect(result?.content).toHaveLength(300);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
@@ -57,7 +67,11 @@ describe('getPageBodyForContext', () => {
|
|
|
|
|
|
const result = getPageBodyForContext(mockEditor, 10, 10);
|
|
|
|
|
|
- expect(result).toBe(shortText);
|
|
|
+ expect(result).toEqual({
|
|
|
+ content: shortText,
|
|
|
+ isPartial: false,
|
|
|
+ totalLength: 5,
|
|
|
+ });
|
|
|
expect(mockEditor.getDocString).toHaveBeenCalled();
|
|
|
});
|
|
|
|
|
|
@@ -70,7 +84,11 @@ describe('getPageBodyForContext', () => {
|
|
|
|
|
|
const result = getPageBodyForContext(mockEditor, 50, 100); // total: 150
|
|
|
|
|
|
- expect(result).toBe(exactLengthText);
|
|
|
+ expect(result).toEqual({
|
|
|
+ content: exactLengthText,
|
|
|
+ isPartial: false,
|
|
|
+ totalLength: 150,
|
|
|
+ });
|
|
|
expect(mockEditor.getDocString).toHaveBeenCalled();
|
|
|
});
|
|
|
|
|
|
@@ -83,7 +101,11 @@ describe('getPageBodyForContext', () => {
|
|
|
|
|
|
const result = getPageBodyForContext(mockEditor, 50, 100); // total: 150
|
|
|
|
|
|
- expect(result).toBe(shortText);
|
|
|
+ expect(result).toEqual({
|
|
|
+ content: shortText,
|
|
|
+ isPartial: false,
|
|
|
+ totalLength: 14,
|
|
|
+ });
|
|
|
});
|
|
|
});
|
|
|
|
|
|
@@ -104,8 +126,14 @@ describe('getPageBodyForContext', () => {
|
|
|
|
|
|
// Expected: start=800, end=1300 (no shortfall needed)
|
|
|
const expectedContent = longContent.slice(800, 1300);
|
|
|
- expect(result).toBe(expectedContent);
|
|
|
- expect(result).toHaveLength(500); // 1300 - 800 = 500
|
|
|
+ expect(result).toEqual({
|
|
|
+ content: expectedContent,
|
|
|
+ isPartial: true,
|
|
|
+ startIndex: 800,
|
|
|
+ endIndex: 1300,
|
|
|
+ totalLength: 2000,
|
|
|
+ });
|
|
|
+ expect(result?.content).toHaveLength(500); // 1300 - 800 = 500
|
|
|
});
|
|
|
|
|
|
it('should compensate shortfall when cursor is near document end', () => {
|
|
|
@@ -127,8 +155,14 @@ describe('getPageBodyForContext', () => {
|
|
|
// Chars before: 100 + 150 = 250
|
|
|
// Expected: start=max(0, 950-250)=700, end=950+50=1000
|
|
|
const expectedContent = longContent.slice(700, 1000);
|
|
|
- expect(result).toBe(expectedContent);
|
|
|
- expect(result).toHaveLength(300); // 1000 - 700 = 300
|
|
|
+ expect(result).toEqual({
|
|
|
+ content: expectedContent,
|
|
|
+ isPartial: true,
|
|
|
+ startIndex: 700,
|
|
|
+ endIndex: 1000,
|
|
|
+ totalLength: 1000,
|
|
|
+ });
|
|
|
+ expect(result?.content).toHaveLength(300); // 1000 - 700 = 300
|
|
|
});
|
|
|
|
|
|
it('should handle extreme case: cursor at document end', () => {
|
|
|
@@ -150,8 +184,14 @@ describe('getPageBodyForContext', () => {
|
|
|
// Chars before: 100 + 200 = 300
|
|
|
// Expected: start=max(0, 1000-300)=700, end=1000+0=1000
|
|
|
const expectedContent = longContent.slice(700, 1000);
|
|
|
- expect(result).toBe(expectedContent);
|
|
|
- expect(result).toHaveLength(300); // 1000 - 700 = 300
|
|
|
+ expect(result).toEqual({
|
|
|
+ content: expectedContent,
|
|
|
+ isPartial: true,
|
|
|
+ startIndex: 700,
|
|
|
+ endIndex: 1000,
|
|
|
+ totalLength: 1000,
|
|
|
+ });
|
|
|
+ expect(result?.content).toHaveLength(300); // 1000 - 700 = 300
|
|
|
});
|
|
|
|
|
|
it('should handle cursor at document start with startPos boundary', () => {
|
|
|
@@ -168,14 +208,19 @@ describe('getPageBodyForContext', () => {
|
|
|
|
|
|
const result = getPageBodyForContext(mockEditor, 100, 200);
|
|
|
|
|
|
- // Available after cursor: 1000
|
|
|
- // Chars after: min(200, 1000) = 200
|
|
|
- // Shortfall: 200 - 200 = 0
|
|
|
- // Chars before: 100 + 0 = 100
|
|
|
- // Expected: start=max(0, 0-100)=0, end=0+200=200
|
|
|
- const expectedContent = longContent.slice(0, 200);
|
|
|
- expect(result).toBe(expectedContent);
|
|
|
- expect(result).toHaveLength(200);
|
|
|
+ // Available before cursor: 0 (cursor at start)
|
|
|
+ // Shortfall before: 100 - 0 = 100
|
|
|
+ // Chars after: 200 + 100 = 300
|
|
|
+ // Expected: start=0, end=0+300=300
|
|
|
+ const expectedContent = longContent.slice(0, 300);
|
|
|
+ expect(result).toEqual({
|
|
|
+ content: expectedContent,
|
|
|
+ isPartial: true,
|
|
|
+ startIndex: 0,
|
|
|
+ endIndex: 300,
|
|
|
+ totalLength: 1000,
|
|
|
+ });
|
|
|
+ expect(result?.content).toHaveLength(300);
|
|
|
});
|
|
|
|
|
|
it('should handle truly extreme shortfall with cursor very near end', () => {
|
|
|
@@ -197,8 +242,14 @@ describe('getPageBodyForContext', () => {
|
|
|
// Chars before: 50 + 495 = 545
|
|
|
// Expected: start=max(0, 995-545)=450, end=995+5=1000
|
|
|
const expectedContent = longContent.slice(450, 1000);
|
|
|
- expect(result).toBe(expectedContent);
|
|
|
- expect(result).toHaveLength(550); // 1000 - 450 = 550
|
|
|
+ expect(result).toEqual({
|
|
|
+ content: expectedContent,
|
|
|
+ isPartial: true,
|
|
|
+ startIndex: 450,
|
|
|
+ endIndex: 1000,
|
|
|
+ totalLength: 1000,
|
|
|
+ });
|
|
|
+ expect(result?.content).toHaveLength(550); // 1000 - 450 = 550
|
|
|
});
|
|
|
|
|
|
});
|