Skip to content

Commit 0871d69

Browse files
authored
v4 improve coverage (#25945)
* Improve code coverage for our Button plugin * improve coverage for our Alert plugin * test tooltip update method * test update and dispose for dropdown * increase code coverage requirements
1 parent 875ed0b commit 0871d69

File tree

7 files changed

+214
-7
lines changed

7 files changed

+214
-7
lines changed

js/src/alert.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,11 @@ const Alert = (($) => {
5858
// Public
5959

6060
close(element) {
61-
element = element || this._element
61+
let rootElement = this._element
62+
if (element) {
63+
rootElement = this._getRootElement(element)
64+
}
6265

63-
const rootElement = this._getRootElement(element)
6466
const customEvent = this._triggerCloseEvent(rootElement)
6567

6668
if (customEvent.isDefaultPrevented()) {

js/tests/karma.conf.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,10 @@ module.exports = (config) => {
6060
thresholds: {
6161
emitWarning: false,
6262
global: {
63-
statements: 89,
64-
lines: 89,
65-
branches: 83,
66-
functions: 84
63+
statements: 90,
64+
branches: 84,
65+
functions: 87,
66+
lines: 90
6767
}
6868
}
6969
}

js/tests/unit/.eslintrc.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
"globals": {
88
"bootstrap": false,
99
"sinon": false,
10-
"Util": false
10+
"Util": false,
11+
"Alert": false,
12+
"Button": false
1113
},
1214
"parserOptions": {
1315
"ecmaVersion": 5,

js/tests/unit/alert.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,43 @@ $(function () {
8080
})
8181
.bootstrapAlert('close')
8282
})
83+
84+
QUnit.test('close should use internal _element if no element provided', function (assert) {
85+
assert.expect(1)
86+
87+
var done = assert.async()
88+
var $el = $('<div/>')
89+
var $alert = $el.bootstrapAlert()
90+
var alertInstance = $alert.data('bs.alert')
91+
92+
$alert.one('closed.bs.alert', function () {
93+
assert.ok('alert closed')
94+
done()
95+
})
96+
97+
alertInstance.close()
98+
})
99+
100+
QUnit.test('dispose should remove data and the element', function (assert) {
101+
assert.expect(2)
102+
103+
var $el = $('<div/>')
104+
var $alert = $el.bootstrapAlert()
105+
106+
assert.ok(typeof $alert.data('bs.alert') !== 'undefined')
107+
108+
$alert.data('bs.alert').dispose()
109+
110+
assert.ok(typeof $alert.data('bs.button') === 'undefined')
111+
})
112+
113+
QUnit.test('should return alert version', function (assert) {
114+
assert.expect(1)
115+
116+
if (typeof Alert !== 'undefined') {
117+
assert.ok(typeof Alert.VERSION === 'string')
118+
} else {
119+
assert.notOk()
120+
}
121+
})
83122
})

js/tests/unit/button.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,4 +172,27 @@ $(function () {
172172
assert.ok($btn.is(':not(.active)'), 'button did not become active')
173173
assert.ok(!$input.is(':checked'), 'checkbox did not get checked')
174174
})
175+
176+
QUnit.test('dispose should remove data and the element', function (assert) {
177+
assert.expect(2)
178+
179+
var $el = $('<div/>')
180+
var $button = $el.bootstrapButton()
181+
182+
assert.ok(typeof $button.data('bs.button') !== 'undefined')
183+
184+
$button.data('bs.button').dispose()
185+
186+
assert.ok(typeof $button.data('bs.button') === 'undefined')
187+
})
188+
189+
QUnit.test('should return button version', function (assert) {
190+
assert.expect(1)
191+
192+
if (typeof Button !== 'undefined') {
193+
assert.ok(typeof Button.VERSION === 'string')
194+
} else {
195+
assert.notOk()
196+
}
197+
})
175198
})

js/tests/unit/dropdown.js

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -940,4 +940,116 @@ $(function () {
940940

941941
$dropdown.trigger('click')
942942
})
943+
944+
QUnit.test('should call Popper.js and detect navbar on update', function (assert) {
945+
assert.expect(3)
946+
947+
var dropdownHTML =
948+
'<div class="dropdown">' +
949+
' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
950+
' <div class="dropdown-menu">' +
951+
' <a class="dropdown-item" href="#">Another link</a>' +
952+
' </div>' +
953+
'</div>'
954+
955+
var $dropdown = $(dropdownHTML)
956+
.appendTo('#qunit-fixture')
957+
.find('[data-toggle="dropdown"]')
958+
.bootstrapDropdown()
959+
960+
var dropdown = $dropdown.data('bs.dropdown')
961+
dropdown.toggle()
962+
assert.ok(dropdown._popper)
963+
964+
var spyPopper = sinon.spy(dropdown._popper, 'scheduleUpdate')
965+
var spyDetectNavbar = sinon.spy(dropdown, '_detectNavbar')
966+
dropdown.update()
967+
968+
assert.ok(spyPopper.called)
969+
assert.ok(spyDetectNavbar.called)
970+
})
971+
972+
QUnit.test('should just detect navbar on update', function (assert) {
973+
assert.expect(2)
974+
975+
var dropdownHTML =
976+
'<div class="dropdown">' +
977+
' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
978+
' <div class="dropdown-menu">' +
979+
' <a class="dropdown-item" href="#">Another link</a>' +
980+
' </div>' +
981+
'</div>'
982+
983+
var $dropdown = $(dropdownHTML)
984+
.appendTo('#qunit-fixture')
985+
.find('[data-toggle="dropdown"]')
986+
.bootstrapDropdown()
987+
988+
var dropdown = $dropdown.data('bs.dropdown')
989+
var spyDetectNavbar = sinon.spy(dropdown, '_detectNavbar')
990+
991+
dropdown.update()
992+
993+
assert.notOk(dropdown._popper)
994+
assert.ok(spyDetectNavbar.called)
995+
})
996+
997+
QUnit.test('should dispose dropdown with Popper', function (assert) {
998+
assert.expect(6)
999+
1000+
var dropdownHTML =
1001+
'<div class="dropdown">' +
1002+
' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
1003+
' <div class="dropdown-menu">' +
1004+
' <a class="dropdown-item" href="#">Another link</a>' +
1005+
' </div>' +
1006+
'</div>'
1007+
1008+
var $dropdown = $(dropdownHTML)
1009+
.appendTo('#qunit-fixture')
1010+
.find('[data-toggle="dropdown"]')
1011+
.bootstrapDropdown()
1012+
1013+
var dropdown = $dropdown.data('bs.dropdown')
1014+
dropdown.toggle()
1015+
1016+
assert.ok(dropdown._popper)
1017+
assert.ok(dropdown._menu !== null)
1018+
assert.ok(dropdown._element !== null)
1019+
var spyDestroy = sinon.spy(dropdown._popper, 'destroy')
1020+
1021+
dropdown.dispose()
1022+
1023+
assert.ok(spyDestroy.called)
1024+
assert.ok(dropdown._menu === null)
1025+
assert.ok(dropdown._element === null)
1026+
})
1027+
1028+
QUnit.test('should dispose dropdown', function (assert) {
1029+
assert.expect(5)
1030+
1031+
var dropdownHTML =
1032+
'<div class="dropdown">' +
1033+
' <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
1034+
' <div class="dropdown-menu">' +
1035+
' <a class="dropdown-item" href="#">Another link</a>' +
1036+
' </div>' +
1037+
'</div>'
1038+
1039+
var $dropdown = $(dropdownHTML)
1040+
.appendTo('#qunit-fixture')
1041+
.find('[data-toggle="dropdown"]')
1042+
.bootstrapDropdown()
1043+
1044+
var dropdown = $dropdown.data('bs.dropdown')
1045+
1046+
assert.notOk(dropdown._popper)
1047+
assert.ok(dropdown._menu !== null)
1048+
assert.ok(dropdown._element !== null)
1049+
1050+
dropdown.dispose()
1051+
1052+
assert.ok(dropdown._menu === null)
1053+
assert.ok(dropdown._element === null)
1054+
})
9431055
})

js/tests/unit/tooltip.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -953,4 +953,33 @@ $(function () {
953953
$trigger.trigger($.Event('click'))
954954
}, 200)
955955
})
956+
957+
QUnit.test('should call Popper.js to update', function (assert) {
958+
assert.expect(2)
959+
960+
var $tooltip = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
961+
.appendTo('#qunit-fixture')
962+
.bootstrapTooltip()
963+
964+
var tooltip = $tooltip.data('bs.tooltip')
965+
tooltip.show()
966+
assert.ok(tooltip._popper)
967+
968+
var spyPopper = sinon.spy(tooltip._popper, 'scheduleUpdate')
969+
tooltip.update()
970+
assert.ok(spyPopper.called)
971+
})
972+
973+
QUnit.test('should not call Popper.js to update', function (assert) {
974+
assert.expect(1)
975+
976+
var $tooltip = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
977+
.appendTo('#qunit-fixture')
978+
.bootstrapTooltip()
979+
980+
var tooltip = $tooltip.data('bs.tooltip')
981+
tooltip.update()
982+
983+
assert.ok(tooltip._popper === null)
984+
})
956985
})

0 commit comments

Comments
 (0)