return to the original file structure to avoid breaking modularity

This commit is contained in:
Johann-S 2019-10-02 11:43:54 +02:00
parent 393ddae09b
commit 3d12b541c4
35 changed files with 172 additions and 186 deletions

View File

@ -32,19 +32,19 @@ const bsPlugins = {
Manipulator: path.resolve(__dirname, '../js/src/dom/manipulator.js'),
Polyfill: path.resolve(__dirname, '../js/src/dom/polyfill.js'),
SelectorEngine: path.resolve(__dirname, '../js/src/dom/selector-engine.js'),
Alert: path.resolve(__dirname, '../js/src/alert/alert.js'),
Button: path.resolve(__dirname, '../js/src/button/button.js'),
Carousel: path.resolve(__dirname, '../js/src/carousel/carousel.js'),
Collapse: path.resolve(__dirname, '../js/src/collapse/collapse.js'),
Dropdown: path.resolve(__dirname, '../js/src/dropdown/dropdown.js'),
Modal: path.resolve(__dirname, '../js/src/modal/modal.js'),
Popover: path.resolve(__dirname, '../js/src/popover/popover.js'),
ScrollSpy: path.resolve(__dirname, '../js/src/scrollspy/scrollspy.js'),
Tab: path.resolve(__dirname, '../js/src/tab/tab.js'),
Toast: path.resolve(__dirname, '../js/src/toast/toast.js'),
Tooltip: path.resolve(__dirname, '../js/src/tooltip/tooltip.js')
Alert: path.resolve(__dirname, '../js/src/alert.js'),
Button: path.resolve(__dirname, '../js/src/button.js'),
Carousel: path.resolve(__dirname, '../js/src/carousel.js'),
Collapse: path.resolve(__dirname, '../js/src/collapse.js'),
Dropdown: path.resolve(__dirname, '../js/src/dropdown.js'),
Modal: path.resolve(__dirname, '../js/src/modal.js'),
Popover: path.resolve(__dirname, '../js/src/popover.js'),
ScrollSpy: path.resolve(__dirname, '../js/src/scrollspy.js'),
Tab: path.resolve(__dirname, '../js/src/tab.js'),
Toast: path.resolve(__dirname, '../js/src/toast.js'),
Tooltip: path.resolve(__dirname, '../js/src/tooltip.js')
}
const rootPath = '../js/dist/'
const rootPath = path.resolve(__dirname, '../js/dist/')
const defaultPluginConfig = {
external: [
@ -172,7 +172,7 @@ function build(plugin) {
name: plugin,
sourcemap: true,
globals,
file: path.resolve(__dirname, `${pluginPath}${pluginFilename}`)
file: path.resolve(__dirname, `${pluginPath}/${pluginFilename}`)
})
.then(() => console.log(`Building ${plugin} plugin... Done!`))
.catch(error => console.error(`${plugin}: ${error}`))

View File

@ -5,17 +5,17 @@
* --------------------------------------------------------------------------
*/
import Alert from './src/alert/alert'
import Button from './src/button/button'
import Carousel from './src/carousel/carousel'
import Collapse from './src/collapse/collapse'
import Dropdown from './src/dropdown/dropdown'
import Modal from './src/modal/modal'
import Popover from './src/popover/popover'
import ScrollSpy from './src/scrollspy/scrollspy'
import Tab from './src/tab/tab'
import Toast from './src/toast/toast'
import Tooltip from './src/tooltip/tooltip'
import Alert from './src/alert'
import Button from './src/button'
import Carousel from './src/carousel'
import Collapse from './src/collapse'
import Dropdown from './src/dropdown'
import Modal from './src/modal'
import Popover from './src/popover'
import ScrollSpy from './src/scrollspy'
import Tab from './src/tab'
import Toast from './src/toast'
import Tooltip from './src/tooltip'
export {
Alert,

View File

@ -5,17 +5,17 @@
* --------------------------------------------------------------------------
*/
import Alert from './src/alert/alert'
import Button from './src/button/button'
import Carousel from './src/carousel/carousel'
import Collapse from './src/collapse/collapse'
import Dropdown from './src/dropdown/dropdown'
import Modal from './src/modal/modal'
import Popover from './src/popover/popover'
import ScrollSpy from './src/scrollspy/scrollspy'
import Tab from './src/tab/tab'
import Toast from './src/toast/toast'
import Tooltip from './src/tooltip/tooltip'
import Alert from './src/alert'
import Button from './src/button'
import Carousel from './src/carousel'
import Collapse from './src/collapse'
import Dropdown from './src/dropdown'
import Modal from './src/modal'
import Popover from './src/popover'
import ScrollSpy from './src/scrollspy'
import Tab from './src/tab'
import Toast from './src/toast'
import Tooltip from './src/tooltip'
export default {
Alert,

View File

@ -11,10 +11,10 @@ import {
emulateTransitionEnd,
getElementFromSelector,
getTransitionDurationFromElement
} from '../util/index'
import Data from '../dom/data'
import EventHandler from '../dom/event-handler'
import SelectorEngine from '../dom/selector-engine'
} from './util/index'
import Data from './dom/data'
import EventHandler from './dom/event-handler'
import SelectorEngine from './dom/selector-engine'
/**
* ------------------------------------------------------------------------

View File

@ -5,10 +5,10 @@
* --------------------------------------------------------------------------
*/
import { getjQuery } from '../util/index'
import Data from '../dom/data'
import EventHandler from '../dom/event-handler'
import SelectorEngine from '../dom/selector-engine'
import { getjQuery } from './util/index'
import Data from './dom/data'
import EventHandler from './dom/event-handler'
import SelectorEngine from './dom/selector-engine'
/**
* ------------------------------------------------------------------------

View File

@ -16,11 +16,11 @@ import {
reflow,
triggerTransitionEnd,
typeCheckConfig
} from '../util/index'
import Data from '../dom/data'
import EventHandler from '../dom/event-handler'
import Manipulator from '../dom/manipulator'
import SelectorEngine from '../dom/selector-engine'
} from './util/index'
import Data from './dom/data'
import EventHandler from './dom/event-handler'
import Manipulator from './dom/manipulator'
import SelectorEngine from './dom/selector-engine'
/**
* ------------------------------------------------------------------------

View File

@ -16,11 +16,11 @@ import {
makeArray,
reflow,
typeCheckConfig
} from '../util/index'
import Data from '../dom/data'
import EventHandler from '../dom/event-handler'
import Manipulator from '../dom/manipulator'
import SelectorEngine from '../dom/selector-engine'
} from './util/index'
import Data from './dom/data'
import EventHandler from './dom/event-handler'
import Manipulator from './dom/manipulator'
import SelectorEngine from './dom/selector-engine'
/**
* ------------------------------------------------------------------------

View File

@ -12,12 +12,12 @@ import {
makeArray,
noop,
typeCheckConfig
} from '../util/index'
import Data from '../dom/data'
import EventHandler from '../dom/event-handler'
import Manipulator from '../dom/manipulator'
} from './util/index'
import Data from './dom/data'
import EventHandler from './dom/event-handler'
import Manipulator from './dom/manipulator'
import Popper from 'popper.js'
import SelectorEngine from '../dom/selector-engine'
import SelectorEngine from './dom/selector-engine'
/**
* ------------------------------------------------------------------------

View File

@ -15,11 +15,11 @@ import {
makeArray,
reflow,
typeCheckConfig
} from '../util/index'
import Data from '../dom/data'
import EventHandler from '../dom/event-handler'
import Manipulator from '../dom/manipulator'
import SelectorEngine from '../dom/selector-engine'
} from './util/index'
import Data from './dom/data'
import EventHandler from './dom/event-handler'
import Manipulator from './dom/manipulator'
import SelectorEngine from './dom/selector-engine'
/**
* ------------------------------------------------------------------------

View File

@ -5,10 +5,10 @@
* --------------------------------------------------------------------------
*/
import { getjQuery } from '../util/index'
import Data from '../dom/data'
import SelectorEngine from '../dom/selector-engine'
import Tooltip from '../tooltip/tooltip'
import { getjQuery } from './util/index'
import Data from './dom/data'
import SelectorEngine from './dom/selector-engine'
import Tooltip from './tooltip'
/**
* ------------------------------------------------------------------------

View File

@ -11,11 +11,11 @@ import {
getUID,
makeArray,
typeCheckConfig
} from '../util/index'
import Data from '../dom/data'
import EventHandler from '../dom/event-handler'
import Manipulator from '../dom/manipulator'
import SelectorEngine from '../dom/selector-engine'
} from './util/index'
import Data from './dom/data'
import EventHandler from './dom/event-handler'
import Manipulator from './dom/manipulator'
import SelectorEngine from './dom/selector-engine'
/**
* ------------------------------------------------------------------------

View File

@ -13,10 +13,10 @@ import {
getTransitionDurationFromElement,
makeArray,
reflow
} from '../util/index'
import Data from '../dom/data'
import EventHandler from '../dom/event-handler'
import SelectorEngine from '../dom/selector-engine'
} from './util/index'
import Data from './dom/data'
import EventHandler from './dom/event-handler'
import SelectorEngine from './dom/selector-engine'
/**
* ------------------------------------------------------------------------

View File

@ -12,10 +12,10 @@ import {
getTransitionDurationFromElement,
reflow,
typeCheckConfig
} from '../util/index'
import Data from '../dom/data'
import EventHandler from '../dom/event-handler'
import Manipulator from '../dom/manipulator'
} from './util/index'
import Data from './dom/data'
import EventHandler from './dom/event-handler'
import Manipulator from './dom/manipulator'
/**
* ------------------------------------------------------------------------

View File

@ -16,16 +16,16 @@ import {
makeArray,
noop,
typeCheckConfig
} from '../util/index'
} from './util/index'
import {
DefaultWhitelist,
sanitizeHtml
} from '../util/sanitizer'
import Data from '../dom/data'
import EventHandler from '../dom/event-handler'
import Manipulator from '../dom/manipulator'
} from './util/sanitizer'
import Data from './dom/data'
import EventHandler from './dom/event-handler'
import Manipulator from './dom/manipulator'
import Popper from 'popper.js'
import SelectorEngine from '../dom/selector-engine'
import SelectorEngine from './dom/selector-engine'
/**
* ------------------------------------------------------------------------

View File

@ -1,6 +1,6 @@
## How does Bootstrap's test suite work?
Bootstrap uses [Jasmine](https://jasmine.github.io/). Each plugin has a file dedicated to its tests in `src/<plugin-name>/<plugin-name>.spec.js`.
Bootstrap uses [Jasmine](https://jasmine.github.io/). Each plugin has a file dedicated to its tests in `tests/units/<plugin-name>.spec.js`.
* `visual/` contains "visual" tests which are run interactively in real browsers and require manual verification by humans.
@ -9,7 +9,7 @@ To run the unit test suite via [Karma](https://karma-runner.github.io/) and debu
## How do I add a new unit test?
1. Locate and open the file dedicated to the plugin which you need to add tests to (`src/<plugin-name>/<plugin-name>.spec.js`).
1. Locate and open the file dedicated to the plugin which you need to add tests to (`tests/units/<plugin-name>.spec.js`).
2. Review the [Jasmine API Documentation](https://jasmine.github.io/pages/docs_home.html) and use the existing tests as references for how to structure your new tests.
3. Write the necessary unit test(s) for the new or revised functionality.
4. Run `npm run js-test` to see the results of your newly-added test(s).
@ -26,7 +26,7 @@ To run the unit test suite via [Karma](https://karma-runner.github.io/) and debu
## Code coverage
Currently we're aiming for at least 90% test coverage for our code. To ensure your changes meet or exceed this limit, run `npm run js-compile && npm run js-test` and open the file in `js/coverage/lcov-report/index.html` to see the code coverage for each plugin. See more details when you select a plugin and ensure your change is fully covered by unit tests.
Currently we're aiming for at least 90% test coverage for our code. To ensure your changes meet or exceed this limit, run `npm run js-test-karma` and open the file in `js/coverage/lcov-report/index.html` to see the code coverage for each plugin. See more details when you select a plugin and ensure your change is fully covered by unit tests.
### Example tests

View File

@ -46,39 +46,6 @@ const customLaunchers = {
}
}
const rollupPreprocessor = {
plugins: [
istanbul({
exclude: ['js/src/**/*.spec.js']
}),
babel({
// Only transpile our source code
exclude: 'node_modules/**',
// Include only required helpers
externalHelpersWhitelist: [
'defineProperties',
'createClass',
'inheritsLoose',
'defineProperty',
'objectSpread2'
],
plugins: [
'@babel/plugin-proposal-object-rest-spread'
]
}),
resolve()
],
output: {
format: 'iife',
name: 'bootstrapTest',
sourcemap: 'inline'
}
}
let files = [
'node_modules/hammer-simulator/index.js'
]
const conf = {
basePath: '../..',
port: 9876,
@ -88,6 +55,41 @@ const conf = {
concurrency: Infinity,
client: {
clearContext: false
},
files: [
'node_modules/hammer-simulator/index.js',
{ pattern: 'js/tests/units/**/*.spec.js', watched: !browserStack }
],
preprocessors: {
'js/tests/units/**/*.spec.js': ['rollup']
},
rollupPreprocessor: {
plugins: [
istanbul({
exclude: ['js/tests/units/**/*.spec.js', 'js/tests/helpers/**/*.js']
}),
babel({
// Only transpile our source code
exclude: 'node_modules/**',
// Include only required helpers
externalHelpersWhitelist: [
'defineProperties',
'createClass',
'inheritsLoose',
'defineProperty',
'objectSpread2'
],
plugins: [
'@babel/plugin-proposal-object-rest-spread'
]
}),
resolve()
],
output: {
format: 'iife',
name: 'bootstrapTest',
sourcemap: 'inline'
}
}
}
@ -104,13 +106,6 @@ if (browserStack) {
conf.customLaunchers = browsers
conf.browsers = browsersKeys
reporters.push('BrowserStack', 'kjhtml')
files = files.concat([
{ pattern: 'js/src/**/*.spec.js', watched: false }
])
conf.preprocessors = {
'js/src/**/*.spec.js': ['rollup']
}
conf.rollupPreprocessor = rollupPreprocessor
} else {
frameworks.push('detectBrowsers')
plugins.push(
@ -119,14 +114,7 @@ if (browserStack) {
'karma-detect-browsers',
'karma-coverage-istanbul-reporter'
)
files = files.concat([
{ pattern: 'js/src/**/*.spec.js', watched: true }
])
reporters.push('coverage-istanbul')
conf.preprocessors = {
'js/src/**/*.spec.js': ['rollup']
}
conf.rollupPreprocessor = rollupPreprocessor
conf.customLaunchers = customLaunchers
conf.detectBrowsers = detectBrowsers
conf.coverageIstanbulReporter = {
@ -165,7 +153,6 @@ if (browserStack) {
conf.frameworks = frameworks
conf.plugins = plugins
conf.reporters = reporters
conf.files = files
module.exports = karmaConfig => {
// possible values: karmaConfig.LOG_DISABLE || karmaConfig.LOG_ERROR || karmaConfig.LOG_WARN || karmaConfig.LOG_INFO || karmaConfig.LOG_DEBUG

View File

@ -1,7 +1,7 @@
{
"root": true,
"extends": [
"../../.eslintrc.json"
"../../../.eslintrc.json"
],
"overrides": [
{

View File

@ -1,8 +1,8 @@
import Alert from './alert'
import { makeArray, getTransitionDurationFromElement } from '../util/index'
import Alert from '../../src/alert'
import { makeArray, getTransitionDurationFromElement } from '../../src/util/index'
/** Test helpers */
import { getFixture, clearFixture, jQueryMock } from '../../tests/helpers/fixture'
import { getFixture, clearFixture, jQueryMock } from '../helpers/fixture'
describe('Alert', () => {
let fixtureEl

View File

@ -1,5 +1,5 @@
import Button from './button'
import EventHandler from '../dom/event-handler'
import Button from '../../src/button'
import EventHandler from '../../src/dom/event-handler'
/** Test helpers */
import {
@ -7,7 +7,7 @@ import {
clearFixture,
createEvent,
jQueryMock
} from '../../tests/helpers/fixture'
} from '../helpers/fixture'
describe('Button', () => {
let fixtureEl

View File

@ -1,8 +1,8 @@
import Carousel from './carousel'
import EventHandler from '../dom/event-handler'
import Carousel from '../../src/carousel'
import EventHandler from '../../src/dom/event-handler'
/** Test helpers */
import { getFixture, clearFixture, createEvent, jQueryMock } from '../../tests/helpers/fixture'
import { getFixture, clearFixture, createEvent, jQueryMock } from '../helpers/fixture'
describe('Carousel', () => {
const { Simulator, PointerEvent, MSPointerEvent } = window

View File

@ -1,9 +1,9 @@
import Collapse from './collapse'
import EventHandler from '../dom/event-handler'
import { makeArray } from '../util/index'
import Collapse from '../../src/collapse'
import EventHandler from '../../src/dom/event-handler'
import { makeArray } from '../../src/util/index'
/** Test helpers */
import { getFixture, clearFixture, jQueryMock } from '../../tests/helpers/fixture'
import { getFixture, clearFixture, jQueryMock } from '../helpers/fixture'
describe('Collapse', () => {
let fixtureEl

View File

@ -1,7 +1,7 @@
import Data from './data'
import Data from '../../../src/dom/data'
/** Test helpers */
import { getFixture, clearFixture } from '../../tests/helpers/fixture'
import { getFixture, clearFixture } from '../../helpers/fixture'
describe('Data', () => {
let fixtureEl

View File

@ -1,7 +1,7 @@
import EventHandler from './event-handler'
import EventHandler from '../../../src/dom/event-handler'
/** Test helpers */
import { getFixture, clearFixture } from '../../tests/helpers/fixture'
import { getFixture, clearFixture } from '../../helpers/fixture'
describe('EventHandler', () => {
let fixtureEl

View File

@ -1,7 +1,7 @@
import Manipulator from './manipulator'
import Manipulator from '../../../src/dom/manipulator'
/** Test helpers */
import { getFixture, clearFixture } from '../../tests/helpers/fixture'
import { getFixture, clearFixture } from '../../helpers/fixture'
describe('Manipulator', () => {
let fixtureEl

View File

@ -1,8 +1,8 @@
import SelectorEngine from './selector-engine'
import { makeArray } from '../util/index'
import SelectorEngine from '../../../src/dom/selector-engine'
import { makeArray } from '../../../src/util/index'
/** Test helpers */
import { getFixture, clearFixture } from '../../tests/helpers/fixture'
import { getFixture, clearFixture } from '../../helpers/fixture'
describe('SelectorEngine', () => {
let fixtureEl

View File

@ -1,10 +1,10 @@
import Popper from 'popper.js'
import Dropdown from './dropdown'
import EventHandler from '../dom/event-handler'
import Dropdown from '../../src/dropdown'
import EventHandler from '../../src/dom/event-handler'
/** Test helpers */
import { getFixture, clearFixture, createEvent, jQueryMock } from '../../tests/helpers/fixture'
import { getFixture, clearFixture, createEvent, jQueryMock } from '../helpers/fixture'
describe('Dropdown', () => {
let fixtureEl

View File

@ -1,9 +1,9 @@
import Modal from './modal'
import EventHandler from '../dom/event-handler'
import { makeArray } from '../util/index'
import Modal from '../../src/modal'
import EventHandler from '../../src/dom/event-handler'
import { makeArray } from '../../src/util/index'
/** Test helpers */
import { getFixture, clearFixture, createEvent, jQueryMock } from '../../tests/helpers/fixture'
import { getFixture, clearFixture, createEvent, jQueryMock } from '../helpers/fixture'
describe('Modal', () => {
let fixtureEl

View File

@ -1,8 +1,8 @@
import Popover from './popover'
import { makeArray } from '../util/index'
import Popover from '../../src/popover'
import { makeArray } from '../../src/util/index'
/** Test helpers */
import { getFixture, clearFixture, jQueryMock } from '../../tests/helpers/fixture'
import { getFixture, clearFixture, jQueryMock } from '../helpers/fixture'
describe('Popover', () => {
let fixtureEl

View File

@ -1,9 +1,9 @@
import ScrollSpy from './scrollspy'
import Manipulator from '../dom/manipulator'
import EventHandler from '../dom/event-handler'
import ScrollSpy from '../../src/scrollspy'
import Manipulator from '../../src/dom/manipulator'
import EventHandler from '../../src/dom/event-handler'
/** Test helpers */
import { getFixture, clearFixture, createEvent, jQueryMock } from '../../tests/helpers/fixture'
import { getFixture, clearFixture, createEvent, jQueryMock } from '../helpers/fixture'
describe('ScrollSpy', () => {
let fixtureEl

View File

@ -1,7 +1,7 @@
import Tab from './tab'
import Tab from '../../src/tab'
/** Test helpers */
import { getFixture, clearFixture, jQueryMock } from '../../tests/helpers/fixture'
import { getFixture, clearFixture, jQueryMock } from '../helpers/fixture'
describe('Tab', () => {
let fixtureEl

View File

@ -1,7 +1,7 @@
import Toast from './toast'
import Toast from '../../src/toast'
/** Test helpers */
import { getFixture, clearFixture, jQueryMock } from '../../tests/helpers/fixture'
import { getFixture, clearFixture, jQueryMock } from '../helpers/fixture'
describe('Toast', () => {
let fixtureEl

View File

@ -1,9 +1,9 @@
import Tooltip from './tooltip'
import EventHandler from '../dom/event-handler'
import { makeArray, noop } from '../util/index'
import Tooltip from '../../src/tooltip'
import EventHandler from '../../src/dom/event-handler'
import { makeArray, noop } from '../../src/util/index'
/** Test helpers */
import { getFixture, clearFixture, jQueryMock, createEvent } from '../../tests/helpers/fixture'
import { getFixture, clearFixture, jQueryMock, createEvent } from '../helpers/fixture'
describe('Tooltip', () => {
let fixtureEl

View File

@ -1,7 +1,7 @@
import * as Util from './index'
import * as Util from '../../../src/util/index'
/** Test helpers */
import { getFixture, clearFixture } from '../../tests/helpers/fixture'
import { getFixture, clearFixture } from '../../helpers/fixture'
describe('Util', () => {
let fixtureEl

View File

@ -1,4 +1,4 @@
import { DefaultWhitelist, sanitizeHtml } from './sanitizer'
import { DefaultWhitelist, sanitizeHtml } from '../../../src/util/sanitizer'
describe('Sanitizer', () => {
describe('sanitizeHtml', () => {

View File

@ -141,7 +141,6 @@
"files": [
"dist/{css,js}/*.{css,js,map}",
"js/{src,dist}/**/*.{js,map}",
"!js/src/**/*.spec.js",
"scss/**/*.scss"
],
"hugo-bin": {