Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/bootstrap.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'js/tests/unit/scrollspy.js')
-rw-r--r--js/tests/unit/scrollspy.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/js/tests/unit/scrollspy.js b/js/tests/unit/scrollspy.js
index 41d82e0e53..bf5fa0bff5 100644
--- a/js/tests/unit/scrollspy.js
+++ b/js/tests/unit/scrollspy.js
@@ -4,6 +4,7 @@ $(function () {
QUnit.module('scrollspy plugin')
QUnit.test('should be defined on jquery object', function (assert) {
+ assert.expect(1)
assert.ok($(document.body).scrollspy, 'scrollspy method is defined')
})
@@ -19,10 +20,12 @@ $(function () {
})
QUnit.test('should provide no conflict', function (assert) {
+ assert.expect(1)
assert.strictEqual($.fn.scrollspy, undefined, 'scrollspy was set back to undefined (org value)')
})
QUnit.test('should return jquery collection containing the element', function (assert) {
+ assert.expect(2)
var $el = $('<div/>')
var $scrollspy = $el.bootstrapScrollspy()
assert.ok($scrollspy instanceof $, 'returns jquery collection')
@@ -30,6 +33,7 @@ $(function () {
})
QUnit.test('should only switch "active" class on current target', function (assert) {
+ assert.expect(1)
var done = assert.async()
var sectionHTML = '<div id="root" class="active">'
@@ -74,6 +78,7 @@ $(function () {
})
QUnit.test('should correctly select middle navigation option when large offset is used', function (assert) {
+ assert.expect(3)
var done = assert.async()
var sectionHTML = '<div id="header" style="height: 500px;"></div>'
@@ -107,6 +112,7 @@ $(function () {
})
QUnit.test('should add the active class to the correct element', function (assert) {
+ assert.expect(2)
var navbarHtml =
'<nav class="navbar">'
+ '<ul class="nav">'
@@ -142,7 +148,47 @@ $(function () {
.then(function () { return testElementIsActiveAfterScroll('#li-2', '#div-2') })
})
+ QUnit.test('should add the active class correctly when there are nested elements at 0 scroll offset', function (assert) {
+ assert.expect(6)
+ var times = 0
+ var done = assert.async()
+ var navbarHtml = '<nav id="navigation" class="navbar">'
+ + '<ul class="nav">'
+ + '<li id="li-1"><a href="#div-1">div 1</a>'
+ + '<ul>'
+ + '<li id="li-2"><a href="#div-2">div 2</a></li>'
+ + '</ul>'
+ + '</li>'
+ + '</ul>'
+ + '</nav>'
+
+ var contentHtml = '<div class="content" style="position: absolute; top: 0px; overflow: auto; height: 50px">'
+ + '<div id="div-1" style="padding: 0; margin: 0">'
+ + '<div id="div-2" style="height: 200px; padding: 0; margin: 0">div 2</div>'
+ + '</div>'
+ + '</div>'
+
+ $(navbarHtml).appendTo('#qunit-fixture')
+
+ var $content = $(contentHtml)
+ .appendTo('#qunit-fixture')
+ .bootstrapScrollspy({ offset: 0, target: '#navigation' })
+
+ !function testActiveElements() {
+ if (++times > 3) return done()
+
+ $content.one('scroll', function () {
+ assert.ok($('#li-1').hasClass('active'), 'nav item for outer element has "active" class')
+ assert.ok($('#li-2').hasClass('active'), 'nav item for inner element has "active" class')
+ testActiveElements()
+ })
+
+ $content.scrollTop($content.scrollTop() + 10)
+ }()
+ })
+
QUnit.test('should clear selection if above the first section', function (assert) {
+ assert.expect(3)
var done = assert.async()
var sectionHTML = '<div id="header" style="height: 500px;"></div>'
@@ -183,4 +229,50 @@ $(function () {
.scrollTop(201)
})
+ QUnit.test('should correctly select navigation element on backward scrolling when each target section height is 100%', function (assert) {
+ assert.expect(5)
+ var navbarHtml =
+ '<nav class="navbar">'
+ + '<ul class="nav">'
+ + '<li id="li-100-1"><a href="#div-100-1">div 1</a></li>'
+ + '<li id="li-100-2"><a href="#div-100-2">div 2</a></li>'
+ + '<li id="li-100-3"><a href="#div-100-3">div 3</a></li>'
+ + '<li id="li-100-4"><a href="#div-100-4">div 4</a></li>'
+ + '<li id="li-100-5"><a href="#div-100-5">div 5</a></li>'
+ + '</ul>'
+ + '</nav>'
+ var contentHtml =
+ '<div class="content" style="position: relative; overflow: auto; height: 100px">'
+ + '<div id="div-100-1" style="position: relative; height: 100%; padding: 0; margin: 0">div 1</div>'
+ + '<div id="div-100-2" style="position: relative; height: 100%; padding: 0; margin: 0">div 2</div>'
+ + '<div id="div-100-3" style="position: relative; height: 100%; padding: 0; margin: 0">div 3</div>'
+ + '<div id="div-100-4" style="position: relative; height: 100%; padding: 0; margin: 0">div 4</div>'
+ + '<div id="div-100-5" style="position: relative; height: 100%; padding: 0; margin: 0">div 5</div>'
+ + '</div>'
+
+ $(navbarHtml).appendTo('#qunit-fixture')
+ var $content = $(contentHtml)
+ .appendTo('#qunit-fixture')
+ .bootstrapScrollspy({ offset: 0, target: '.navbar' })
+
+ var testElementIsActiveAfterScroll = function (element, target) {
+ var deferred = $.Deferred()
+ var scrollHeight = Math.ceil($content.scrollTop() + $(target).position().top)
+ var done = assert.async()
+ $content.one('scroll', function () {
+ assert.ok($(element).hasClass('active'), 'target:' + target + ', element: ' + element)
+ done()
+ deferred.resolve()
+ })
+ $content.scrollTop(scrollHeight)
+ return deferred.promise()
+ }
+
+ $.when(testElementIsActiveAfterScroll('#li-100-5', '#div-100-5'))
+ .then(function () { return testElementIsActiveAfterScroll('#li-100-4', '#div-100-4') })
+ .then(function () { return testElementIsActiveAfterScroll('#li-100-3', '#div-100-3') })
+ .then(function () { return testElementIsActiveAfterScroll('#li-100-2', '#div-100-2') })
+ .then(function () { return testElementIsActiveAfterScroll('#li-100-1', '#div-100-1') })
+ })
+
})