js-build-tools 1.2.3 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/README.md +573 -250
  2. package/dist/build.js +27 -20
  3. package/dist/build.min.js +1 -1
  4. package/dist/bundle.js +16 -13
  5. package/dist/bundle.min.js +1 -1
  6. package/dist/bundleLint.js +22 -18
  7. package/dist/bundleLint.min.js +1 -1
  8. package/dist/bundleMinify.js +13 -17
  9. package/dist/bundleMinify.min.js +1 -1
  10. package/dist/compileReadme.js +13 -11
  11. package/dist/compileReadme.min.js +1 -1
  12. package/dist/default.js +17 -12
  13. package/dist/default.min.js +1 -1
  14. package/dist/dist.js +11 -7
  15. package/dist/dist.min.js +1 -1
  16. package/dist/distLint.js +20 -17
  17. package/dist/distLint.min.js +1 -1
  18. package/dist/distMinify.js +12 -17
  19. package/dist/distMinify.min.js +1 -1
  20. package/dist/partials/addToReadme.js +25 -0
  21. package/dist/partials/beginWatcher.js +16 -0
  22. package/dist/partials/clean.js +21 -0
  23. package/dist/partials/distFor.js +23 -0
  24. package/dist/partials/distForSrc.js +16 -0
  25. package/dist/partials/distSeries.js +31 -0
  26. package/dist/partials/minifyFor.js +21 -0
  27. package/dist/partials/readmeTemplate.js +18 -0
  28. package/dist/partials/runOnChange.js +63 -0
  29. package/dist/partials/tsFor.js +24 -0
  30. package/dist/partials.js +33 -0
  31. package/dist/partials.min.js +1 -0
  32. package/dist/test-helpers/circularObject.js +50 -0
  33. package/dist/test-helpers/countMatches.js +16 -0
  34. package/dist/test-helpers/deepReferenceObject.js +20 -0
  35. package/dist/test-helpers/domItem.js +33 -0
  36. package/dist/test-helpers/jsonDom.js +20 -0
  37. package/dist/test-helpers/linkedList.js +23 -0
  38. package/dist/test-helpers/logObject.js +24 -0
  39. package/dist/test-helpers/multiReferenceObject.js +20 -0
  40. package/dist/test-helpers/nodeTree.js +28 -0
  41. package/dist/test-helpers/setUp.js +127 -0
  42. package/dist/testFull.js +21 -10
  43. package/dist/testFull.min.js +1 -1
  44. package/dist/testHelpers.js +33 -198
  45. package/dist/testHelpers.min.js +1 -1
  46. package/dist/testQuick.js +23 -12
  47. package/dist/testQuick.min.js +1 -1
  48. package/dist/typeScript.js +14 -0
  49. package/dist/typeScript.min.js +1 -0
  50. package/dist/watchFull.js +14 -21
  51. package/dist/watchFull.min.js +1 -1
  52. package/dist/watchTest.js +16 -14
  53. package/dist/watchTest.min.js +1 -1
  54. package/functions/build.js +8 -5
  55. package/functions/build.test.js +59 -0
  56. package/functions/bundle.js +6 -4
  57. package/functions/bundle.test.js +68 -0
  58. package/functions/bundleLint.js +5 -3
  59. package/functions/bundleLint.test.js +61 -0
  60. package/functions/bundleMinify.js +4 -7
  61. package/functions/bundleMinify.test.js +14 -0
  62. package/functions/compileReadme.js +3 -2
  63. package/functions/compileReadme.test.js +18 -0
  64. package/functions/default.js +5 -2
  65. package/functions/default.test.js +32 -0
  66. package/functions/dist.js +3 -1
  67. package/functions/dist.test.js +43 -0
  68. package/functions/distLint.js +4 -2
  69. package/functions/distLint.test.js +58 -0
  70. package/functions/distMinify.js +4 -7
  71. package/functions/distMinify.test.js +14 -0
  72. package/functions/partials/addToReadme.js +20 -0
  73. package/functions/partials/addToReadme.test.js +28 -0
  74. package/functions/partials/beginWatcher.js +12 -0
  75. package/functions/partials/beginWatcher.test.js +18 -0
  76. package/functions/partials/clean.js +14 -0
  77. package/functions/partials/clean.test.js +20 -0
  78. package/functions/partials/distFor.js +18 -0
  79. package/functions/partials/distFor.test.js +125 -0
  80. package/functions/partials/distForSrc.js +14 -0
  81. package/functions/partials/distForSrc.test.js +17 -0
  82. package/functions/partials/distSeries.js +21 -0
  83. package/functions/partials/distSeries.test.js +33 -0
  84. package/functions/partials/minifyFor.js +16 -0
  85. package/functions/partials/minifyFor.test.js +48 -0
  86. package/functions/partials/readmeTemplate.js +15 -0
  87. package/functions/partials/readmeTemplate.test.js +33 -0
  88. package/functions/partials/runOnChange.js +57 -0
  89. package/functions/partials/runOnChange.test.js +93 -0
  90. package/functions/partials/tsFor.js +21 -0
  91. package/functions/partials/tsFor.test.js +44 -0
  92. package/functions/partials.js +32 -0
  93. package/functions/partials.test.js +7 -0
  94. package/functions/test-helpers/circularObject.js +28 -0
  95. package/functions/test-helpers/circularObject.test.js +14 -0
  96. package/functions/test-helpers/countMatches.js +11 -0
  97. package/functions/test-helpers/countMatches.test.js +9 -0
  98. package/functions/test-helpers/deepReferenceObject.js +25 -0
  99. package/functions/test-helpers/deepReferenceObject.test.js +7 -0
  100. package/functions/test-helpers/domItem.js +31 -0
  101. package/functions/test-helpers/domItem.test.js +12 -0
  102. package/functions/test-helpers/jsonDom.js +16 -0
  103. package/functions/test-helpers/jsonDom.test.js +12 -0
  104. package/functions/test-helpers/linkedList.js +10 -0
  105. package/functions/test-helpers/linkedList.test.js +22 -0
  106. package/functions/test-helpers/logObject.js +18 -0
  107. package/functions/test-helpers/logObject.test.js +20 -0
  108. package/functions/test-helpers/multiReferenceObject.js +25 -0
  109. package/functions/test-helpers/multiReferenceObject.test.js +14 -0
  110. package/functions/test-helpers/nodeTree.js +11 -0
  111. package/functions/test-helpers/nodeTree.test.js +18 -0
  112. package/functions/test-helpers/setUp.js +67 -0
  113. package/functions/test-helpers/setUp.test.js +18 -0
  114. package/functions/testFull.js +13 -3
  115. package/functions/testFull.test.js +16 -0
  116. package/functions/testHelpers.js +27 -137
  117. package/functions/testHelpers.test.js +3 -96
  118. package/functions/testQuick.js +12 -2
  119. package/functions/testQuick.test.js +16 -0
  120. package/functions/typeScript.js +11 -0
  121. package/functions/typeScript.test.js +10 -0
  122. package/functions/watchFull.js +6 -12
  123. package/functions/watchFull.test.js +40 -0
  124. package/functions/watchTest.js +4 -2
  125. package/functions/watchTest.test.js +48 -0
  126. package/gulp.config.js +161 -16
  127. package/gulpfile.base.js +9 -0
  128. package/package.json +2 -1
  129. package/dist/addToReadme.js +0 -22
  130. package/dist/addToReadme.min.js +0 -1
  131. package/dist/clean.js +0 -11
  132. package/dist/clean.min.js +0 -1
  133. package/dist/distFor.js +0 -21
  134. package/dist/distFor.min.js +0 -1
  135. package/dist/readmeTemplate.js +0 -15
  136. package/dist/readmeTemplate.min.js +0 -1
  137. package/functions/addToReadme.js +0 -17
  138. package/functions/clean.js +0 -10
  139. package/functions/distFor.js +0 -15
  140. package/functions/readmeTemplate.js +0 -13
@@ -0,0 +1,18 @@
1
+ import nodeTree from './nodeTree'
2
+
3
+ describe('nodeTree', () => {
4
+ test('has sample nodeTree object', () => {
5
+ expect(nodeTree.name).toBe('one')
6
+ expect(nodeTree.parent).toBeNull()
7
+ expect(nodeTree.children.length).toBe(2)
8
+ expect(nodeTree.children[0].name).toBe('child one')
9
+ expect(nodeTree.children[0].parent).toBe(nodeTree)
10
+ expect(nodeTree.children[0].children.length).toBe(1)
11
+ expect(nodeTree.children[0].children[0].name).toBe('grandchild one')
12
+ expect(nodeTree.children[0].children[0].parent).toBe(nodeTree.children[0])
13
+ expect(nodeTree.children[0].children[0].children.length).toBe(0)
14
+ expect(nodeTree.children[1].name).toBe('child two')
15
+ expect(nodeTree.children[1].parent).toBe(nodeTree)
16
+ expect(nodeTree.children[1].children.length).toBe(0)
17
+ })
18
+ })
@@ -0,0 +1,67 @@
1
+ const fs = require('fs')
2
+ const del = require('del')
3
+ // Import the configurations and override some of them in order to direct to the temp directory.
4
+ const gulpConfig = require('../../gulp.config.js')
5
+
6
+ let tempDir = 'test-temp/'
7
+ let srcPath = `${tempDir}src`
8
+
9
+ /**
10
+ * Update the gulp configurations with the test data. Set the test directory where temp files will be created for testing.
11
+ * @function
12
+ * @memberOf module:testHelpers
13
+ * @param {string} testDir
14
+ */
15
+ const setDefaults = (testDir = 'test-temp') => {
16
+ tempDir = `${testDir}/`
17
+ srcPath = `${tempDir}src`
18
+ gulpConfig.set('browserPath', `${tempDir}browser`)
19
+ gulpConfig.set('distMain', `${tempDir}dist/main`)
20
+ gulpConfig.set('distPath', `${tempDir}dist`)
21
+ gulpConfig.set('distSearch', `${tempDir}dist/**/*.js`)
22
+ gulpConfig.set('readmeTemplate', `${tempDir}MAIN.md`)
23
+ gulpConfig.set('readmePath', tempDir)
24
+ gulpConfig.set('rootPath', tempDir)
25
+ gulpConfig.set('srcPath', srcPath)
26
+ gulpConfig.set('srcSearch', `${tempDir}src/**/!(*.test).js`)
27
+ gulpConfig.set('tsSearch', `${tempDir}src/**/*.ts`)
28
+ gulpConfig.set('watchSearch', `${tempDir}src/**/*.js`)
29
+ }
30
+
31
+ exports.setDefaults = setDefaults
32
+
33
+ exports.gulpConfig = gulpConfig
34
+
35
+ /**
36
+ * Ensure that the del has completed, recursively attempt to delete and recreate
37
+ * @function
38
+ * @memberOf module:testHelpers
39
+ * @param {boolean} [exists=true]
40
+ * @returns {Promise<*|void>}
41
+ */
42
+ const createTempDir = async (exists = true) => {
43
+ if (exists) {
44
+ return del(tempDir)
45
+ .then(() => createTempDir(fs.existsSync(tempDir)))
46
+ }
47
+ await fs.mkdirSync(tempDir)
48
+ return fs.mkdirSync(srcPath)
49
+ }
50
+
51
+ exports.createTempDir = createTempDir
52
+
53
+ /**
54
+ * In the Jest.beforeEach function call this one to set up the temp directory.
55
+ * @function
56
+ * @memberOf module:testHelpers
57
+ * @returns {Promise<*|void>}
58
+ */
59
+ exports.beforeEach = () => createTempDir()
60
+
61
+ /**
62
+ * In the Jest.afterEach function call this one to clean up and remove the temp directory.
63
+ * @function
64
+ * @memberOf module:testHelpers
65
+ * @returns {Promise<*>}
66
+ */
67
+ exports.afterEach = async () => await del(tempDir)
@@ -0,0 +1,18 @@
1
+ import { afterEach, createTempDir, gulpConfig, setDefaults } from './setUp'
2
+ import fs from 'fs'
3
+
4
+ setDefaults()
5
+
6
+ describe('setUp', () => {
7
+ test('able to create the test-temp/src directory', async () => {
8
+ expect(fs.existsSync(gulpConfig.get('srcPath'))).toBeFalsy()
9
+ await createTempDir()
10
+ expect(fs.existsSync(gulpConfig.get('srcPath'))).toBeTruthy()
11
+ })
12
+
13
+ test('able to delete the test-temp/src directory', async () => {
14
+ expect(fs.existsSync(gulpConfig.get('srcPath'))).toBeTruthy()
15
+ await afterEach()
16
+ expect(fs.existsSync(gulpConfig.get('srcPath'))).toBeFalsy()
17
+ })
18
+ })
@@ -1,10 +1,20 @@
1
- const gulpConfig = require('../gulp.config.js');
2
- const { runCLI: jest } = require('jest')
1
+ const gulpConfig = require('../gulp.config.js')
2
+ const { runCLI } = require('jest')
3
3
 
4
4
  /**
5
5
  * Run all tests with jest.
6
+ * @function
7
+ * @memberOf module:js-build-tools
8
+ * @param {function} [done=null]
9
+ * @param {Array.<string>|string} [testPath='path/config/test/files']
6
10
  * @returns {Promise<*>}
7
11
  */
8
- const testFull = async () => await jest({}, gulpConfig.testPath)
12
+ const testFull = (done = null, testPath = gulpConfig.get('testPath')) => {
13
+ if (!Array.isArray(testPath)) {
14
+ // The testPath must be an array of strings
15
+ testPath = [testPath]
16
+ }
17
+ return runCLI(gulpConfig.get('testOptions'), testPath)
18
+ }
9
19
 
10
20
  module.exports = testFull
@@ -0,0 +1,16 @@
1
+ const { setUp } = require('./testHelpers')
2
+ const gulpConfig = setUp.gulpConfig
3
+ const { runCLI } = require('jest')
4
+ const testFull = require('./testFull')
5
+
6
+ jest.mock('jest', () => ({
7
+ 'runCLI': jest.fn(() => Promise.resolve(true))
8
+ }))
9
+
10
+ describe('testFull', () => {
11
+ test('runs the Jest CLI with the configured options', () => {
12
+ expect.assertions(1)
13
+ testFull()
14
+ expect(runCLI).toHaveBeenCalledWith(gulpConfig.get('testOptions'), [gulpConfig.get('testPath')])
15
+ })
16
+ })
@@ -1,142 +1,32 @@
1
1
  /**
2
- * Log out an object in a nicely formatted way.
3
- * @param {Object} object
4
- * @param {string} [label='logging']
2
+ * An assortment of objects that can be used in tests and some functions to help debug and write tests.
3
+ * @file
4
+ * @author Joshua Heagle <joshuaheagle@gmail.com>
5
+ * @version 2.0.0
6
+ * @module testHelpers
7
+ * @memberOf module:js-build-tools
5
8
  */
6
- export const logObject = (object, label = 'logging') => {
7
- if (typeof require === 'undefined') {
8
- console.log(label, object)
9
- return
10
- }
11
- console.log(label, require('util').inspect(object, false, null, true))
12
- }
13
-
14
- /**
15
- * Multilayered node tree-like structure with parent references
16
- * @type {Object.<string, string|Object|Array>}
17
- */
18
- export const circularObject = { name: 'root', parent: {}, body: {}, head: {}, children: [] }
19
- circularObject.children = [
20
- { name: 'body', parent: {}, children: [] },
21
- { name: 'head', parent: {}, children: [] }
22
- ]
23
- circularObject.body = circularObject.children[0]
24
- circularObject.head = circularObject.children[1]
25
- circularObject.body.parent = circularObject
26
- circularObject.head.parent = circularObject
27
- circularObject.body.children = [
28
- { name: 'body child one', parent: {}, children: [] },
29
- { name: 'body child two', parent: {}, children: [] }
30
- ]
31
- circularObject.body.children[0].parent = circularObject.body
32
- circularObject.body.children[1].parent = circularObject.body
33
- circularObject.head.children = [
34
- { name: 'head child one', parent: {}, children: [] },
35
- { name: 'head child two', parent: {}, children: [] }
36
- ]
37
- circularObject.head.children[0].parent = circularObject.head
38
- circularObject.head.children[1].parent = circularObject.head
39
-
40
- /**
41
- * Sample object with deep references.
42
- * @type {Object.<string, string|number|Object>}
43
- */
44
- export const deepReferenceObject = {
45
- object1: {
46
- name: 'someName',
47
- object2: {
48
- age: 12,
49
- array1: [
50
- 'someString',
51
- 'anotherString'
52
- ]
53
- },
54
- array2: [
55
- 89,
56
- 32
57
- ]
58
- },
59
- title: 'Some Title',
60
- item: 45
61
- }
62
-
63
- /**
64
- * Sample LinkedList for testing circular references.
65
- * @type {Object.<string, string|Object>}
66
- */
67
- export const linkedList = { name: 'one', prev: null, next: null }
68
- linkedList.next = { name: 'two', prev: linkedList, next: null }
69
- linkedList.next.next = { name: 'three', prev: linkedList.next, next: null }
70
9
 
71
- /**
72
- * Sample of jsonDom object containing empty nested array and objects
73
- */
74
- export const jsonDom = {
75
- tagName: 'div',
76
- attributes: { style: {}, className: 'column' },
77
- element: null,
78
- eventListeners: {},
79
- parentItem: {},
80
- children: [],
81
- axis: 'x'
82
- }
83
-
84
- /**
85
- * Sample of domItem child with nested child and optional details
86
- */
87
- export const domItem = [
88
- {
89
- attributes: { className: 'row', style: {} },
90
- axis: 'y',
91
- children: [
92
- {
93
- attributes: { style: {} },
94
- axis: 'x',
95
- children: [],
96
- element: {},
97
- eventListeners: {},
98
- hasShip: false,
99
- isHit: false,
100
- parentItem: {},
101
- point: {},
102
- tagName: 'div'
103
- }
104
- ],
105
- element: null,
106
- eventListeners: {},
107
- parentItem: {},
108
- tagName: 'div'
109
- }
110
- ]
10
+ const circularObject = require('./test-helpers/circularObject')
11
+ const countMatches = require('./test-helpers/countMatches')
12
+ const deepReferenceObject = require('./test-helpers/deepReferenceObject')
13
+ const domItem = require('./test-helpers/domItem')
14
+ const jsonDom = require('./test-helpers/jsonDom')
15
+ const linkedList = require('./test-helpers/linkedList')
16
+ const logObject = require('./test-helpers/logObject')
17
+ const multiReferenceObject = require('./test-helpers/multiReferenceObject')
18
+ const nodeTree = require('./test-helpers/nodeTree')
19
+ const setUp = require('./test-helpers/setUp')
111
20
 
112
- /**
113
- * Sample of object containing multiple references.
114
- * @type {Object.<string, string|number|Object>}
115
- */
116
- export const multiReferenceObject = {
117
- object1: {
118
- name: 'someName'
119
- },
120
- object2: {
121
- age: 12
122
- },
123
- array1: [
124
- 'someString',
125
- 'anotherString'
126
- ],
127
- array2: [
128
- 89,
129
- 32
130
- ],
131
- title: 'Some Title',
132
- item: 45
21
+ module.exports = {
22
+ circularObject,
23
+ countMatches,
24
+ deepReferenceObject,
25
+ domItem,
26
+ jsonDom,
27
+ linkedList,
28
+ logObject,
29
+ multiReferenceObject,
30
+ nodeTree,
31
+ setUp,
133
32
  }
134
-
135
- /**
136
- * Sample NodeTree for testing circular references and arrays.
137
- * @type {Object.<string, string|Object|Array>}
138
- */
139
- export const nodeTree = { name: 'one', parent: null, children: [] }
140
- nodeTree.children[0] = { name: 'child one', parent: nodeTree, children: [] }
141
- nodeTree.children[1] = { name: 'child two', parent: nodeTree, children: [] }
142
- nodeTree.children[0].children[0] = { name: 'grandchild one', parent: nodeTree.children[0], children: [] }
@@ -1,100 +1,7 @@
1
- const {
2
- circularObject,
3
- deepReferenceObject,
4
- domItem,
5
- jsonDom,
6
- linkedList,
7
- logObject,
8
- multiReferenceObject,
9
- nodeTree
10
- } = require('./testHelpers.js')
11
- const util = require('util')
1
+ const testHelpers = require('./testHelpers')
12
2
 
13
3
  describe('testHelpers', () => {
14
- test('can nicely output objects with logObject', () => {
15
- const logSpy = jest.spyOn(console, 'log')
16
- const inspectSpy = jest.spyOn(util, 'inspect')
17
- const someObject = { one: 1, two: 2, three: 3 }
18
- logObject(someObject, 'someObject')
19
- expect(inspectSpy).toHaveBeenCalledWith(someObject, false, null, true)
20
- expect(logSpy).toHaveBeenCalledWith('someObject', util.inspect(someObject, false, null, true))
21
- })
22
-
23
- test('has sample circular object', () => {
24
- expect(circularObject.body.parent).toBe(circularObject)
25
- expect(circularObject.body.children[0].parent).toBe(circularObject.body)
26
- expect(circularObject.body.children[1].parent).toBe(circularObject.body)
27
- expect(circularObject.children[0]).toBe(circularObject.body)
28
- expect(circularObject.head.parent).toBe(circularObject)
29
- expect(circularObject.head.children[0].parent).toBe(circularObject.head)
30
- expect(circularObject.head.children[1].parent).toBe(circularObject.head)
31
- expect(circularObject.children[1]).toBe(circularObject.head)
32
- })
33
-
34
- test('has sample deep reference object', () => {
35
- expect(deepReferenceObject).toHaveProperty('object1.object2.array1')
36
- })
37
-
38
- test('has sample domItem object', () => {
39
- expect(domItem[0]).toHaveProperty('attributes')
40
- expect(domItem[0]).toHaveProperty('children')
41
- expect(domItem[0]).toHaveProperty('element')
42
- expect(domItem[0]).toHaveProperty('eventListeners')
43
- expect(domItem[0]).toHaveProperty('parentItem')
44
- expect(domItem[0]).toHaveProperty('tagName')
45
- })
46
-
47
- test('has sample jsonDom object', () => {
48
- expect(jsonDom).toHaveProperty('attributes')
49
- expect(jsonDom).toHaveProperty('children')
50
- expect(jsonDom).toHaveProperty('element')
51
- expect(jsonDom).toHaveProperty('eventListeners')
52
- expect(jsonDom).toHaveProperty('parentItem')
53
- expect(jsonDom).toHaveProperty('tagName')
54
- })
55
-
56
- test('has sample linkedList object', () => {
57
- expect(linkedList.name).toBe('one')
58
- expect(linkedList).toHaveProperty('prev')
59
- expect(linkedList.prev).toBeNull()
60
-
61
- expect(linkedList).toHaveProperty('next')
62
- expect(linkedList.next.name).toBe('two')
63
- expect(linkedList).toHaveProperty('next.prev')
64
- expect(linkedList.next.prev).toBe(linkedList)
65
-
66
- expect(linkedList).toHaveProperty('next.next')
67
- expect(linkedList.next.next.name).toBe('three')
68
- expect(linkedList).toHaveProperty('next.prev')
69
- expect(linkedList.next.next.prev).toBe(linkedList.next)
70
-
71
- expect(linkedList).toHaveProperty('next.next.next')
72
- expect(linkedList.next.next.next).toBeNull()
73
- })
74
-
75
- test('has sample multiReferenceObject object', () => {
76
- expect(multiReferenceObject).toHaveProperty('object1.name')
77
- expect(multiReferenceObject).toHaveProperty('object2.age')
78
- expect(multiReferenceObject).toHaveProperty('array1.0')
79
- expect(multiReferenceObject).toHaveProperty('array1.1')
80
- expect(multiReferenceObject).toHaveProperty('array2.0')
81
- expect(multiReferenceObject).toHaveProperty('array2.1')
82
- expect(multiReferenceObject).toHaveProperty('title')
83
- expect(multiReferenceObject).toHaveProperty('item')
84
- })
85
-
86
- test('has sample nodeTree object', () => {
87
- expect(nodeTree.name).toBe('one')
88
- expect(nodeTree.parent).toBeNull()
89
- expect(nodeTree.children.length).toBe(2)
90
- expect(nodeTree.children[0].name).toBe('child one')
91
- expect(nodeTree.children[0].parent).toBe(nodeTree)
92
- expect(nodeTree.children[0].children.length).toBe(1)
93
- expect(nodeTree.children[0].children[0].name).toBe('grandchild one')
94
- expect(nodeTree.children[0].children[0].parent).toBe(nodeTree.children[0])
95
- expect(nodeTree.children[0].children[0].children.length).toBe(0)
96
- expect(nodeTree.children[1].name).toBe('child two')
97
- expect(nodeTree.children[1].parent).toBe(nodeTree)
98
- expect(nodeTree.children[1].children.length).toBe(0)
4
+ test('is object with all helper exports', () => {
5
+ expect(Object.keys(testHelpers).length).toBe(10)
99
6
  })
100
7
  })
@@ -1,10 +1,20 @@
1
1
  const gulpConfig = require('../gulp.config.js')
2
- const { runCLI: jest } = require('jest')
2
+ const { runCLI } = require('jest')
3
3
 
4
4
  /**
5
5
  * Run the Jest tests for files which have been modified (based on git status).
6
+ * @function
7
+ * @memberOf module:js-build-tools
8
+ * @param {function} [done=null]
9
+ * @param {Array.<string>|string} [testPath='path/config/test/files']
6
10
  * @returns {Promise<*>}
7
11
  */
8
- const testQuick = async () => await jest({ onlyChanged: true }, gulpConfig.testPath)
12
+ const testQuick = (done = null, testPath = gulpConfig.get('testPath')) => {
13
+ if (!Array.isArray(testPath)) {
14
+ // The testPath must be an array of strings
15
+ testPath = [testPath]
16
+ }
17
+ return runCLI({ onlyChanged: true }, testPath)
18
+ }
9
19
 
10
20
  module.exports = testQuick
@@ -0,0 +1,16 @@
1
+ const { setUp } = require('./testHelpers')
2
+ const gulpConfig = setUp.gulpConfig
3
+ const { runCLI } = require('jest')
4
+ const testQuick = require('./testQuick')
5
+
6
+ jest.mock('jest', () => ({
7
+ 'runCLI': jest.fn(() => Promise.resolve(true))
8
+ }))
9
+
10
+ describe('testQuick', () => {
11
+ test('runs the jest CLI with onlyChanged option', () => {
12
+ expect.assertions(1)
13
+ testQuick()
14
+ expect(runCLI).toHaveBeenCalledWith({ onlyChanged: true }, [gulpConfig.get('testPath')])
15
+ })
16
+ })
@@ -0,0 +1,11 @@
1
+ const tsFor = require('./partials/tsFor')
2
+
3
+ /**
4
+ * Simplified typescript task using tsFor.
5
+ * @function
6
+ * @memberOf module:js-build-tools
7
+ * @returns {stream.Stream}
8
+ */
9
+ const typeScript = () => tsFor()
10
+
11
+ module.exports = typeScript
@@ -0,0 +1,10 @@
1
+ const typeScript = require('./typeScript')
2
+ const tsFor = require('./partials/tsFor')
3
+ jest.mock('./partials/tsFor', () => jest.fn())
4
+
5
+ describe('typeScript', () => {
6
+ test('calls tsFor with no parameters', () => {
7
+ typeScript()
8
+ expect(tsFor).toHaveBeenCalled()
9
+ })
10
+ })
@@ -1,18 +1,12 @@
1
- const bundle = require('./bundle')
2
- const distFor = require('./distFor')
3
- const gulpConfig = require('../gulp.config.js')
4
- const { parallel, series, watch } = require('gulp')
5
- const testQuick = require('./testQuick')
1
+ const { beginWatcher, runOnChange } = require('./partials')
6
2
 
7
3
  /**
8
4
  * Watch for changes and run the distribution for the changed files, then bundle and test the changed files.
9
- * @returns {*}
5
+ * @function
6
+ * @memberOf module:js-build-tools
7
+ * @returns {FSWatcher}
10
8
  */
11
- const watchFull = () => watch(gulpConfig.watchSearch)
12
- .on('change', path => {
13
- const pathRegex = new RegExp(`^${gulpConfig.srcPath}(.*\\/).+\\.js$`, 'i')
14
- const distForPath = () => distFor(path, path.replace(pathRegex, `${gulpConfig.distPath}$1`))
15
- return parallel(testQuick, series(distForPath, bundle))()
16
- })
9
+ const watchFull = () => beginWatcher()
10
+ .on('change', runOnChange)
17
11
 
18
12
  module.exports = watchFull
@@ -0,0 +1,40 @@
1
+ const fs = require('fs')
2
+ const setUp = require('./test-helpers/setUp')
3
+ setUp.setDefaults('test-watch-full')
4
+ const gulpConfig = setUp.gulpConfig
5
+ const watchFull = require('./watchFull')
6
+ const beginWatcher = require('./partials/beginWatcher')
7
+ const runOnChange = require('./partials/runOnChange')
8
+
9
+ jest.mock('./partials/beginWatcher', () => jest.fn(() => ({ on: (event, fn) => fn() })))
10
+ jest.mock('./partials/runOnChange', () => jest.fn())
11
+
12
+ const rawContents = 'const { beginWatcher, runOnChange } = require(\'./partials\')\n' +
13
+ '\n' +
14
+ '/**\n' +
15
+ ' * Watch for changes and run the distribution for the changed files, then bundle and test the changed files.\n' +
16
+ ' * @function\n' +
17
+ ' * @memberOf module:js-build-tools\n' +
18
+ ' * @returns {FSWatcher}\n' +
19
+ ' */\n' +
20
+ 'const watchFull = () => beginWatcher()\n' +
21
+ ' .on(\'change\', runOnChange)\n' +
22
+ '\n' +
23
+ 'module.exports = watchFull\n'
24
+
25
+ beforeEach(setUp.beforeEach)
26
+
27
+ afterEach(setUp.afterEach)
28
+
29
+ describe('watchFull', () => {
30
+ test('should call beginWatcher and runOnChange for change event', () => {
31
+ const srcPath = gulpConfig.get('srcPath')
32
+ gulpConfig.set('watchSearch', `${srcPath}/*.js`)
33
+ const srcFile = `${srcPath}/watchFull.js`
34
+ fs.writeFileSync(srcFile, rawContents)
35
+ expect.assertions(2)
36
+ watchFull()
37
+ expect(beginWatcher).toHaveBeenCalled()
38
+ expect(runOnChange).toHaveBeenCalled()
39
+ })
40
+ })
@@ -1,11 +1,13 @@
1
1
  const gulpConfig = require('../gulp.config.js')
2
- const { series, watch } = require('gulp')
2
+ const { watch } = require('gulp')
3
3
  const testQuick = require('./testQuick')
4
4
 
5
5
  /**
6
6
  * Watch for changes and run the tests.
7
+ * @function
8
+ * @memberOf module:js-build-tools
7
9
  * @returns {*}
8
10
  */
9
- const watchTest = () => watch(gulpConfig.watchSearch, { ignoreInitial: false }, series(testQuick))
11
+ const watchTest = () => watch(gulpConfig.get('watchSearch'), { ignoreInitial: false }, testQuick)
10
12
 
11
13
  module.exports = watchTest
@@ -0,0 +1,48 @@
1
+ const setUp = require('./test-helpers/setUp')
2
+ setUp.setDefaults('test-watch-test')
3
+ const gulpConfig = setUp.gulpConfig
4
+ gulpConfig.set('watchSearch', 'test-begin-watcher/*.js')
5
+ const watchTest = require('./watchTest')
6
+ const { EventEmitter } = require('node:events')
7
+ const fs = require('fs')
8
+ const testQuick = require('./testQuick')
9
+
10
+ jest.mock('./testQuick', () => jest.fn(() => Promise.resolve(true)))
11
+
12
+ const rawContents = 'const gulpConfig = require(\'../gulp.config.js\')\n' +
13
+ 'const { watch } = require(\'gulp\')\n' +
14
+ 'const testQuick = require(\'./testQuick\')\n' +
15
+ '\n' +
16
+ '/**\n' +
17
+ ' * Watch for changes and run the tests.\n' +
18
+ ' * @function\n' +
19
+ ' * @memberOf module:js-build-tools\n' +
20
+ ' * @returns {*}\n' +
21
+ ' */\n' +
22
+ 'const watchTest = () => watch(gulpConfig.get(\'watchSearch\'), { ignoreInitial: false }, testQuick)\n' +
23
+ '\n' +
24
+ 'module.exports = watchTest\n'
25
+
26
+ const filePath = gulpConfig.get('srcPath') + '/watchTest.js'
27
+
28
+ beforeEach(() => setUp.beforeEach()
29
+ .then(
30
+ () => fs.writeFileSync(filePath, rawContents)
31
+ )
32
+ )
33
+
34
+ afterEach(setUp.afterEach)
35
+
36
+ describe('watchTest', () => {
37
+ test('returns instance of EventEmitter / FSWatcher and calls testQuick on change', done => {
38
+ expect.assertions(2)
39
+ const fsWatcher = watchTest()
40
+ expect(fsWatcher).toBeInstanceOf(EventEmitter)
41
+ fsWatcher.emit('change')
42
+ setTimeout(() => {
43
+ expect(testQuick).toHaveBeenCalled()
44
+ done()
45
+ }, 500)
46
+ fsWatcher.close()
47
+ })
48
+ })