Skip to content

Commit 7764c67

Browse files
committed
buffer cleanup, finalize backward direction spec
1 parent 166a672 commit 7764c67

File tree

1 file changed

+83
-55
lines changed

1 file changed

+83
-55
lines changed

test/BufferCleanupSpec.js

Lines changed: 83 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -46,75 +46,103 @@ describe('uiScroll', function () {
4646
}, applyUpdateOptions);
4747
};
4848

49+
var shouldWorkWhenEOF = function (viewport, scope, options) {
50+
expect(scope.adapter.isBOF()).toBe(false);
51+
expect(scope.adapter.isEOF()).toBe(true);
52+
expect(scope.adapter.bufferFirst).toBe('item0');
53+
expect(scope.adapter.bufferLast).toBe('item6');
54+
55+
// remove items 0..6 items form -5..6 datasource
56+
cleanBuffer(scope, options);
57+
58+
// result [-5..-1]
59+
expect(scope.adapter.isBOF()).toBe(true);
60+
expect(scope.adapter.isEOF()).toBe(true);
61+
expect(Helper.getRow(viewport, 1)).toBe('-5: item-5');
62+
expect(Helper.getRow(viewport, 2)).toBe('-4: item-4');
63+
expect(Helper.getRow(viewport, 3)).toBe('-3: item-3');
64+
expect(Helper.getRow(viewport, 4)).toBe('-2: item-2');
65+
expect(Helper.getRow(viewport, 5)).toBe('-1: item-1');
66+
expect(scope.adapter.bufferLength).toBe(5);
67+
};
68+
4969
it('should be consistent on forward direction when eof with immutabeTop', function () {
50-
runTest(getSettings(),
51-
function (viewport, scope) {
52-
expect(scope.adapter.isBOF()).toBe(false);
53-
expect(scope.adapter.isEOF()).toBe(true);
54-
expect(scope.adapter.bufferFirst).toBe('item0');
55-
expect(scope.adapter.bufferLast).toBe('item6');
56-
57-
// remove items 0..6 items form -5..6 datasource
58-
cleanBuffer(scope, { immutableTop: true });
59-
60-
// result [-5..-1]
61-
expect(scope.adapter.isBOF()).toBe(true);
62-
expect(scope.adapter.isEOF()).toBe(true);
63-
expect(Helper.getFirstRow(viewport)).toBe('-5: item-5');
64-
expect(Helper.getLastRow(viewport)).toBe('-1: item-1');
65-
expect(scope.adapter.bufferLength).toBe(5);
66-
}
67-
);
70+
runTest(getSettings(), function (viewport, scope) {
71+
shouldWorkWhenEOF(viewport, scope, { immutableTop: true });
72+
});
73+
});
74+
75+
it('should be consistent on forward direction when eof without immutabeTop', function () {
76+
runTest(getSettings(), function (viewport, scope) {
77+
shouldWorkWhenEOF(viewport, scope);
78+
});
6879
});
6980

81+
var shouldWorkWhenNotEOF = function (viewport, scope, options) {
82+
expect(scope.adapter.isBOF()).toBe(false);
83+
expect(scope.adapter.isEOF()).toBe(false);
84+
expect(scope.adapter.bufferFirst).toBe('item-4');
85+
expect(scope.adapter.bufferLast).toBe('item1');
86+
87+
// remove items -4..1 items form -5..6 datasource
88+
cleanBuffer(scope, options);
89+
90+
// result [-5, 2, 3, 4]
91+
expect(scope.adapter.isBOF()).toBe(true);
92+
expect(scope.adapter.isEOF()).toBe(false);
93+
expect(Helper.getRow(viewport, 1)).toBe('-5: item-5');
94+
expect(Helper.getRow(viewport, 2)).toBe('-4: item2');
95+
expect(Helper.getRow(viewport, 3)).toBe('-3: item3');
96+
expect(Helper.getRow(viewport, 4)).toBe('-2: item4');
97+
expect(scope.adapter.bufferLength).toBe(4);
98+
};
99+
70100
it('should be consistent on forward direction when not eof with immutabeTop', function () {
71101
var scrollSettings = getSettings();
72102
scrollSettings.startIndex = -1;
73103
scrollSettings.viewportHeight = 40;
74-
runTest(scrollSettings,
75-
function (viewport, scope) {
76-
expect(scope.adapter.isBOF()).toBe(false);
77-
expect(scope.adapter.isEOF()).toBe(false);
78-
expect(scope.adapter.bufferFirst).toBe('item-4');
79-
expect(scope.adapter.bufferLast).toBe('item1');
80-
81-
// remove items -4..1 items form -5..6 datasource
82-
cleanBuffer(scope, { immutableTop: true });
83-
84-
// result [-5, 2, 3, 4]
85-
expect(scope.adapter.isBOF()).toBe(true);
86-
expect(scope.adapter.isEOF()).toBe(false);
87-
expect(Helper.getFirstRow(viewport)).toBe('-5: item-5');
88-
expect(Helper.getLastRow(viewport)).toBe('-2: item4');
89-
expect(scope.adapter.bufferLength).toBe(4);
90-
}
91-
);
104+
runTest(scrollSettings, function (viewport, scope) {
105+
shouldWorkWhenNotEOF(viewport, scope, { immutableTop: true });
106+
});
92107
});
93108

109+
it('should be consistent on forward direction when not eof without immutabeTop', function () {
110+
var scrollSettings = getSettings();
111+
scrollSettings.startIndex = -1;
112+
scrollSettings.viewportHeight = 40;
113+
runTest(scrollSettings, function (viewport, scope) {
114+
shouldWorkWhenNotEOF(viewport, scope);
115+
});
116+
});
117+
118+
var shouldWorkWhenBOF = function (viewport, scope, options) {
119+
expect(scope.adapter.isBOF()).toBe(true);
120+
expect(scope.adapter.isEOF()).toBe(false);
121+
expect(scope.adapter.bufferFirst).toBe('item-5');
122+
expect(scope.adapter.bufferLast).toBe('item1');
123+
124+
// remove items -5..1 items form -5..6 datasource
125+
cleanBuffer(scope, options);
126+
127+
// result [2..6]
128+
expect(scope.adapter.isBOF()).toBe(true);
129+
expect(scope.adapter.isEOF()).toBe(true);
130+
expect(Helper.getRow(viewport, 1)).toBe('2: item2');
131+
expect(Helper.getRow(viewport, 2)).toBe('3: item3');
132+
expect(Helper.getRow(viewport, 3)).toBe('4: item4');
133+
expect(Helper.getRow(viewport, 4)).toBe('5: item5');
134+
expect(Helper.getRow(viewport, 5)).toBe('6: item6');
135+
expect(scope.adapter.bufferLength).toBe(5);
136+
};
137+
94138
it('should be consistent on backward direction when bof without immutableTop', function () {
95139
var scrollSettings = getSettings();
96140
scrollSettings.startIndex = -3;
97141
scrollSettings.padding = 0.5;
98-
runTest(scrollSettings,
99-
function (viewport, scope) {
100-
expect(scope.adapter.isBOF()).toBe(true);
101-
expect(scope.adapter.isEOF()).toBe(false);
102-
expect(scope.adapter.bufferFirst).toBe('item-5');
103-
expect(scope.adapter.bufferLast).toBe('item1');
104-
105-
// remove items -5..1 items form -5..6 datasource
106-
cleanBuffer(scope);
107-
108-
// result [2..6]
109-
expect(scope.adapter.isBOF()).toBe(true);
110-
expect(scope.adapter.isEOF()).toBe(true);
111-
expect(Helper.getFirstRow(viewport)).toBe('2: item2');
112-
expect(Helper.getLastRow(viewport)).toBe('6: item6');
113-
expect(scope.adapter.bufferLength).toBe(5);
114-
}
115-
);
142+
runTest(scrollSettings, function (viewport, scope) {
143+
shouldWorkWhenBOF(viewport, scope);
144+
});
116145
});
117-
118146
});
119147

120148
});

0 commit comments

Comments
 (0)