dojo
Version:
Dojo core is a powerful, lightweight library that makes common tasks quicker and easier. Animate elements, manipulate the DOM, and query with easy CSS syntax, all without sacrificing performance.
126 lines (114 loc) • 3.52 kB
JavaScript
define([
'require',
'dojo/Deferred',
'intern!object',
'intern/chai!assert',
'intern/dojo/node!leadfoot/helpers/pollUntil',
'./window/iframe_content/scrollDocuments'
], function (
require,
Deferred,
registerSuite,
assert,
pollUntil,
testScenarioDocuments
) {
// There are many permutations of document layouts that need to be tested.
// This function will generate a test for every layout scenario
function generateTestsForScenarios(suite) {
testScenarioDocuments.forEach(function (doc) {
suite[doc.label] = function () {
var visibleBefore;
var visibleAfter;
var hasScrolled;
return this.get('remote').findById(doc.id)
.findByClassName('before')
.getProperty('value').then(function (visible) {
visibleBefore = parseInt(visible, 10);
})
.end()
.findByClassName('scrollBtn')
.click()
.end()
.findByClassName('hasScrolled')
.getProperty('value').then(function (scrolled) {
hasScrolled = parseInt(scrolled, 10);
})
.end()
.findByClassName('after')
.getProperty('value').then(function (visible) {
visibleAfter = parseInt(visible, 10);
})
.then(function () {
if (hasScrolled) {
assert.notOk(visibleBefore, 'scrolled, target should not be visible before');
assert.ok(visibleAfter, 'scrolled, target should be visible after');
}
else {
assert.ok(visibleBefore, 'not scrolled, target should be visible before');
assert.ok(visibleAfter, 'not scrolled, target should be visible after');
}
});
};
});
}
function getPage(suite, url) {
return suite.get('remote')
.get(require.toUrl(url))
.setExecuteAsyncTimeout(5000)
.setFindTimeout(1000)
.then(pollUntil('return ready;'));
}
registerSuite(function () {
var suite = {
name: 'dojo/window'
};
suite['.scrollIntoView()'] = {
setup: function () {
return getPage(this, './window/scroll.html');
}
};
generateTestsForScenarios(suite['.scrollIntoView()']);
suite['.getBox'] = {
setup: function () {
return getPage(this, './window/viewport.html');
},
initial: function () {
var viewportHeight;
var documentHeight;
return this.get('remote').execute('compute()')
.findById('viewportHeight')
.getProperty('value').then(function (height) {
viewportHeight = parseInt(height, 10);
})
.end()
.findById('documentHeight')
.getProperty('value').then(function (height) {
documentHeight = parseInt(height, 10);
}).then(function () {
assert.isTrue(viewportHeight > documentHeight, 'expected viewport to be bigger than document');
});
},
expand: function () {
var viewportHeightBefore;
var viewportHeightAfter;
return this.get('remote')
.execute('compute();')
.findById('viewportHeight')
.getProperty('value').then(function (height) {
viewportHeightBefore = parseInt(height, 10);
})
.end()
.execute('addText(); compute();')
.findById('viewportHeight')
.getProperty('value').then(function (height) {
viewportHeightAfter = parseInt(height, 10);
}).then(function () {
assert.isTrue(viewportHeightAfter <= viewportHeightBefore, 'viewport increased in size before: ' + viewportHeightBefore + ' after: ' + viewportHeightAfter);
assert.isTrue(viewportHeightAfter + 20 >= viewportHeightBefore, 'viewport didn\'t shrink, except for space taken by scrollbars');
});
}
};
return suite;
});
});