-
Notifications
You must be signed in to change notification settings - Fork 34
/
Copy pathindex-test.js
99 lines (74 loc) · 4.11 KB
/
index-test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import { module, test } from 'qunit';
import { setupApplicationTest } from 'ember-qunit';
import { visit, currentURL, triggerEvent as triggerEventTestHelper, settled } from '@ember/test-helpers';
import { click, fillIn, find, triggerEvent } from 'ember-native-dom-helpers';
import { timeout } from 'ember-scrollable/util/timeout';
import { THROTTLE_TIME_LESS_THAN_60_FPS_IN_MS } from 'ember-scrollable/components/ember-scrollable';
module('Acceptance | ember-scrollbar', function(hooks) {
setupApplicationTest(hooks);
function elementHeight(elem) {
return elem.getBoundingClientRect().height;
}
test('vertical scrollbar', async function(assert) {
await visit('/');
assert.equal(currentURL(), '/');
assert.ok(find('.vertical-demo .ember-scrollable'), 'vertical demo rendered');
assert.ok(find('.vertical-demo .ember-scrollable .drag-handle'), 'vertical demo handle rendered');
});
test('resizable scrollbar', async function(assert) {
let elem;
const toggleButtonSelector = '.resize-demo button';
await visit('/');
elem = find('.resize-demo .ember-scrollable');
assert.ok(find('.resize-demo .ember-scrollable'), 'resize demo rendered');
assert.ok(find('.resize-demo .ember-scrollable .drag-handle'), 'resize handle rendered');
assert.equal(elementHeight(elem), 200);
await click(toggleButtonSelector); // make tall
assert.equal(elementHeight(elem), 400);
await click(toggleButtonSelector); // make small
assert.equal(elementHeight(elem), 200);
});
test('scrollTo and onScroll', async function(assert) {
await visit('/');
let offset;
assert.ok(find('.event-and-setter-demo .ember-scrollable'), 'scrolling demo rendered');
assert.ok(find('.event-and-setter-demo .ember-scrollable .drag-handle'), 'scrolling handle rendered');
offset = 123;
await fillIn('#targetScrollOffset input', offset);
await timeout(THROTTLE_TIME_LESS_THAN_60_FPS_IN_MS);
assert.ok(find('#currentScrollOffset').innerText.indexOf(String(offset)) !== -1, 'scrollOffset matches');
});
test('When element resized from no-overflow => overflow => no-overflow, no scrollbar is visible on mouseover', async function(assert) {
let scrollArea;
let toggleButtonSelector = '.no-scrollbar-demo button';
await visit('/');
assert.ok(find('.no-scrollbar-demo .ember-scrollable'), 'resize demo rendered');
assert.ok(find('.no-scrollbar-demo .ember-scrollable .drag-handle:not(.visible)'), 'resize handle rendered, but not visible');
scrollArea = find('.no-scrollbar-demo .ember-scrollable .scrollable-content');
assert.equal(elementHeight(scrollArea), 18, 'there is no overflow as 18 < 200px');
await click(toggleButtonSelector);
assert.equal(elementHeight(scrollArea), 494, 'there is overflow as 494 > 200px');
triggerEvent(scrollArea, 'mousemove');
assert.ok(find('.no-scrollbar-demo .ember-scrollable .drag-handle.visible'), 'handle shows up visible');
await click(toggleButtonSelector);
assert.equal(elementHeight(scrollArea), 18);
assert.ok(find('.no-scrollbar-demo .ember-scrollable .drag-handle:not(.visible)'), 'handle goes away when overflow is gone');
});
test('Scrollbar is resized and correctly positioned during infinite scroll', async function(assert) {
await visit('/');
let dragHandle = await find('.infinite-scroll-demo .drag-handle');
const dragHandleHeightBeforeScroll = parseInt(dragHandle.style.height);
const scrollContent = await find('.infinite-scroll-demo .tse-scroll-content');
// Move scrollbar to bottom
scrollContent.scrollTop =
scrollContent.scrollHeight - scrollContent.offsetHeight;
await triggerEventTestHelper('.tse-scroll-content', 'scroll');
// Wait for scroll event handler adds more scroll content
await settled();
dragHandle = await find('.infinite-scroll-demo .drag-handle');
// Drag handle size should be shorter than before since there is now more scroll content
assert.ok(parseInt(dragHandle.style.height) < dragHandleHeightBeforeScroll);
// Drag handle should not be reset back to the top
assert.ok(parseInt(dragHandle.style.top) !== 0);
});
});