]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
v4 improve coverage (#25945)
authorJohann-S <johann.servoire@gmail.com>
Tue, 10 Apr 2018 07:28:29 +0000 (09:28 +0200)
committerGitHub <noreply@github.com>
Tue, 10 Apr 2018 07:28:29 +0000 (09:28 +0200)
* 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

js/src/alert.js
js/tests/karma.conf.js
js/tests/unit/.eslintrc.json
js/tests/unit/alert.js
js/tests/unit/button.js
js/tests/unit/dropdown.js
js/tests/unit/tooltip.js

index cd31c00999b5b49cb900bf743851875b0f3341ec..8772c0de7c33a11c9527bf3646c4cd7dc244c8be 100644 (file)
@@ -58,9 +58,11 @@ const Alert = (($) => {
     // Public
 
     close(element) {
-      element = element || this._element
+      let rootElement = this._element
+      if (element) {
+        rootElement = this._getRootElement(element)
+      }
 
-      const rootElement = this._getRootElement(element)
       const customEvent = this._triggerCloseEvent(rootElement)
 
       if (customEvent.isDefaultPrevented()) {
index a2b0a676bdcd8f96ebaba0dd73daed7a3264cb50..eceaa7ff727518ae97f5e84ec2e4ac223d3330e8 100644 (file)
@@ -60,10 +60,10 @@ module.exports = (config) => {
       thresholds: {
         emitWarning: false,
         global: {
-          statements: 89,
-          lines: 89,
-          branches: 83,
-          functions: 84
+          statements: 90,
+          branches: 84,
+          functions: 87,
+          lines: 90
         }
       }
     }
index 93aaa05f821adbbf5401992e91344602d832b49d..0896f406d0f5ec66bfe798df1b9e5dbc519d496b 100644 (file)
@@ -7,7 +7,9 @@
   "globals": {
     "bootstrap": false,
     "sinon": false,
-    "Util": false
+    "Util": false,
+    "Alert": false,
+    "Button": false
   },
   "parserOptions": {
     "ecmaVersion": 5,
index 165c91f1e14fcd30fd801f0a4df585a9511d3e25..fc7727fb1c05128e5d8fc3482317b83be1897a7d 100644 (file)
@@ -80,4 +80,43 @@ $(function () {
       })
       .bootstrapAlert('close')
   })
+
+  QUnit.test('close should use internal _element if no element provided', function (assert) {
+    assert.expect(1)
+
+    var done = assert.async()
+    var $el = $('<div/>')
+    var $alert = $el.bootstrapAlert()
+    var alertInstance = $alert.data('bs.alert')
+
+    $alert.one('closed.bs.alert', function () {
+      assert.ok('alert closed')
+      done()
+    })
+
+    alertInstance.close()
+  })
+
+  QUnit.test('dispose should remove data and the element', function (assert) {
+    assert.expect(2)
+
+    var $el = $('<div/>')
+    var $alert = $el.bootstrapAlert()
+
+    assert.ok(typeof $alert.data('bs.alert') !== 'undefined')
+
+    $alert.data('bs.alert').dispose()
+
+    assert.ok(typeof $alert.data('bs.button') === 'undefined')
+  })
+
+  QUnit.test('should return alert version', function (assert) {
+    assert.expect(1)
+
+    if (typeof Alert !== 'undefined') {
+      assert.ok(typeof Alert.VERSION === 'string')
+    } else {
+      assert.notOk()
+    }
+  })
 })
index cc2719c3a085a4a25ec0b6b66bd625aa37eed64a..1fdcce95fd7c0178be95c7992c65b23471affbb5 100644 (file)
@@ -172,4 +172,27 @@ $(function () {
     assert.ok($btn.is(':not(.active)'), 'button did not become active')
     assert.ok(!$input.is(':checked'), 'checkbox did not get checked')
   })
+
+  QUnit.test('dispose should remove data and the element', function (assert) {
+    assert.expect(2)
+
+    var $el = $('<div/>')
+    var $button = $el.bootstrapButton()
+
+    assert.ok(typeof $button.data('bs.button') !== 'undefined')
+
+    $button.data('bs.button').dispose()
+
+    assert.ok(typeof $button.data('bs.button') === 'undefined')
+  })
+
+  QUnit.test('should return button version', function (assert) {
+    assert.expect(1)
+
+    if (typeof Button !== 'undefined') {
+      assert.ok(typeof Button.VERSION === 'string')
+    } else {
+      assert.notOk()
+    }
+  })
 })
index 0e3d3704137d7bd559caf55dcca6de9a46debd07..726655e9cccee8b51ef915decc0d38fb9e37c15b 100644 (file)
@@ -940,4 +940,116 @@ $(function () {
 
     $dropdown.trigger('click')
   })
+
+  QUnit.test('should call Popper.js and detect navbar on update', function (assert) {
+    assert.expect(3)
+
+    var dropdownHTML =
+      '<div class="dropdown">' +
+      '  <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
+      '  <div class="dropdown-menu">' +
+      '    <a class="dropdown-item" href="#">Another link</a>' +
+      '  </div>' +
+      '</div>'
+
+    var $dropdown = $(dropdownHTML)
+      .appendTo('#qunit-fixture')
+      .find('[data-toggle="dropdown"]')
+      .bootstrapDropdown()
+
+    var dropdown = $dropdown.data('bs.dropdown')
+    dropdown.toggle()
+    assert.ok(dropdown._popper)
+
+    var spyPopper = sinon.spy(dropdown._popper, 'scheduleUpdate')
+    var spyDetectNavbar = sinon.spy(dropdown, '_detectNavbar')
+    dropdown.update()
+
+    assert.ok(spyPopper.called)
+    assert.ok(spyDetectNavbar.called)
+  })
+
+  QUnit.test('should just detect navbar on update', function (assert) {
+    assert.expect(2)
+
+    var dropdownHTML =
+      '<div class="dropdown">' +
+      '  <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
+      '  <div class="dropdown-menu">' +
+      '    <a class="dropdown-item" href="#">Another link</a>' +
+      '  </div>' +
+      '</div>'
+
+    var $dropdown = $(dropdownHTML)
+      .appendTo('#qunit-fixture')
+      .find('[data-toggle="dropdown"]')
+      .bootstrapDropdown()
+
+    var dropdown = $dropdown.data('bs.dropdown')
+    var spyDetectNavbar = sinon.spy(dropdown, '_detectNavbar')
+
+    dropdown.update()
+
+    assert.notOk(dropdown._popper)
+    assert.ok(spyDetectNavbar.called)
+  })
+
+  QUnit.test('should dispose dropdown with Popper', function (assert) {
+    assert.expect(6)
+
+    var dropdownHTML =
+      '<div class="dropdown">' +
+      '  <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
+      '  <div class="dropdown-menu">' +
+      '    <a class="dropdown-item" href="#">Another link</a>' +
+      '  </div>' +
+      '</div>'
+
+    var $dropdown = $(dropdownHTML)
+      .appendTo('#qunit-fixture')
+      .find('[data-toggle="dropdown"]')
+      .bootstrapDropdown()
+
+    var dropdown = $dropdown.data('bs.dropdown')
+    dropdown.toggle()
+
+    assert.ok(dropdown._popper)
+    assert.ok(dropdown._menu !== null)
+    assert.ok(dropdown._element !== null)
+    var spyDestroy = sinon.spy(dropdown._popper, 'destroy')
+
+    dropdown.dispose()
+
+    assert.ok(spyDestroy.called)
+    assert.ok(dropdown._menu === null)
+    assert.ok(dropdown._element === null)
+  })
+
+  QUnit.test('should dispose dropdown', function (assert) {
+    assert.expect(5)
+
+    var dropdownHTML =
+      '<div class="dropdown">' +
+      '  <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' +
+      '  <div class="dropdown-menu">' +
+      '    <a class="dropdown-item" href="#">Another link</a>' +
+      '  </div>' +
+      '</div>'
+
+    var $dropdown = $(dropdownHTML)
+      .appendTo('#qunit-fixture')
+      .find('[data-toggle="dropdown"]')
+      .bootstrapDropdown()
+
+    var dropdown = $dropdown.data('bs.dropdown')
+
+    assert.notOk(dropdown._popper)
+    assert.ok(dropdown._menu !== null)
+    assert.ok(dropdown._element !== null)
+
+    dropdown.dispose()
+
+    assert.ok(dropdown._menu === null)
+    assert.ok(dropdown._element === null)
+  })
 })
index 20d022c5dcd2e258f65f78c22658d8b078135459..a2a239530967f28a8fb674c30337aab280d0af2e 100644 (file)
@@ -953,4 +953,33 @@ $(function () {
       $trigger.trigger($.Event('click'))
     }, 200)
   })
+
+  QUnit.test('should call Popper.js to update', function (assert) {
+    assert.expect(2)
+
+    var $tooltip = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
+      .appendTo('#qunit-fixture')
+      .bootstrapTooltip()
+
+    var tooltip = $tooltip.data('bs.tooltip')
+    tooltip.show()
+    assert.ok(tooltip._popper)
+
+    var spyPopper = sinon.spy(tooltip._popper, 'scheduleUpdate')
+    tooltip.update()
+    assert.ok(spyPopper.called)
+  })
+
+  QUnit.test('should not call Popper.js to update', function (assert) {
+    assert.expect(1)
+
+    var $tooltip = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
+      .appendTo('#qunit-fixture')
+      .bootstrapTooltip()
+
+    var tooltip = $tooltip.data('bs.tooltip')
+    tooltip.update()
+
+    assert.ok(tooltip._popper === null)
+  })
 })