q5 2.9.22 → 2.9.23
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.
- package/.vscode/launch.json +26 -0
- package/bun.lockb +0 -0
- package/p5-tests/js/chai_helpers.js +20 -0
- package/p5-tests/js/mocha_setup.js +2 -0
- package/p5-tests/js/modernizr.js +5 -0
- package/p5-tests/js/p5_helpers.js +135 -0
- package/p5-tests/js/sinon.js +5949 -0
- package/p5-tests/mocha.css +289 -0
- package/p5-tests/test.html +71 -0
- package/p5-tests/unit/color/color_conversion.js +68 -0
- package/p5-tests/unit/color/creating_reading.js +217 -0
- package/p5-tests/unit/color/p5.Color.js +1000 -0
- package/p5-tests/unit/color/setting.js +289 -0
- package/p5-tests/unit/core/2d_primitives.js +490 -0
- package/p5-tests/unit/core/attributes.js +115 -0
- package/p5-tests/unit/core/curves.js +139 -0
- package/p5-tests/unit/core/environment.js +248 -0
- package/p5-tests/unit/core/error_helpers.js +1158 -0
- package/p5-tests/unit/core/main.js +340 -0
- package/p5-tests/unit/core/p5.Element.js +773 -0
- package/p5-tests/unit/core/p5.Graphics.js +179 -0
- package/p5-tests/unit/core/preload.js +285 -0
- package/p5-tests/unit/core/rendering.js +116 -0
- package/p5-tests/unit/core/structure.js +293 -0
- package/p5-tests/unit/core/transform.js +144 -0
- package/p5-tests/unit/core/version.js +28 -0
- package/p5-tests/unit/core/vertex.js +137 -0
- package/p5-tests/unit/dom/dom.js +2146 -0
- package/p5-tests/unit/events/acceleration.js +213 -0
- package/p5-tests/unit/events/keyboard.js +179 -0
- package/p5-tests/unit/events/mouse.js +487 -0
- package/p5-tests/unit/events/touch.js +180 -0
- package/p5-tests/unit/image/downloading.js +379 -0
- package/p5-tests/unit/image/filters.js +92 -0
- package/p5-tests/unit/image/loading.js +413 -0
- package/p5-tests/unit/image/p5.Image.js +201 -0
- package/p5-tests/unit/image/pixels.js +234 -0
- package/p5-tests/unit/io/files.js +378 -0
- package/p5-tests/unit/io/loadBytes.js +149 -0
- package/p5-tests/unit/io/loadImage.js +123 -0
- package/p5-tests/unit/io/loadJSON.js +185 -0
- package/p5-tests/unit/io/loadModel.js +215 -0
- package/p5-tests/unit/io/loadShader.js +176 -0
- package/p5-tests/unit/io/loadStrings.js +140 -0
- package/p5-tests/unit/io/loadTable.js +183 -0
- package/p5-tests/unit/io/loadXML.js +127 -0
- package/p5-tests/unit/io/saveModel.js +113 -0
- package/p5-tests/unit/io/saveTable.js +142 -0
- package/p5-tests/unit/math/calculation.js +452 -0
- package/p5-tests/unit/math/noise.js +66 -0
- package/p5-tests/unit/math/p5.Vector.js +1886 -0
- package/p5-tests/unit/math/random.js +177 -0
- package/p5-tests/unit/math/trigonometry.js +144 -0
- package/p5-tests/unit/spec.js +50 -0
- package/p5-tests/unit/typography/attributes.js +120 -0
- package/p5-tests/unit/typography/loadFont.js +162 -0
- package/p5-tests/unit/typography/p5.Font.js +63 -0
- package/p5-tests/unit/utilities/conversion.js +329 -0
- package/p5-tests/unit/utilities/time_date.js +133 -0
- package/package.json +1 -1
- package/q5.js +48 -37
- package/q5.min.js +1 -1
- package/src/q5-2d-image.js +3 -1
- package/src/q5-core.js +3 -1
- package/src/q5-math.js +1 -0
- package/src/q5-webgpu-canvas.js +8 -7
- package/src/q5-webgpu-drawing.js +15 -12
- package/src/q5-webgpu-image.js +1 -1
- package/src/q5-webgpu-text.js +17 -15
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
suite('loadShader', function() {
|
|
2
|
+
var invalidFile = '404file';
|
|
3
|
+
var vertFile = 'unit/assets/vert.glsl';
|
|
4
|
+
var fragFile = 'unit/assets/frag.glsl';
|
|
5
|
+
|
|
6
|
+
test('_friendlyFileLoadError is called', async function() {
|
|
7
|
+
const _friendlyFileLoadErrorStub = sinon.stub(p5, '_friendlyFileLoadError');
|
|
8
|
+
try {
|
|
9
|
+
await promisedSketch(function(sketch, resolve, reject) {
|
|
10
|
+
sketch.preload = function() {
|
|
11
|
+
sketch.loadShader(invalidFile, invalidFile, reject, resolve);
|
|
12
|
+
};
|
|
13
|
+
});
|
|
14
|
+
expect(
|
|
15
|
+
_friendlyFileLoadErrorStub.calledOnce,
|
|
16
|
+
'p5._friendlyFileLoadError was not called'
|
|
17
|
+
).to.be.true;
|
|
18
|
+
} finally {
|
|
19
|
+
_friendlyFileLoadErrorStub.restore();
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
testSketchWithPromise('error with vert prevents sketch continuing', function(
|
|
24
|
+
sketch,
|
|
25
|
+
resolve,
|
|
26
|
+
reject
|
|
27
|
+
) {
|
|
28
|
+
sketch.preload = function() {
|
|
29
|
+
sketch.loadShader(invalidFile, fragFile);
|
|
30
|
+
setTimeout(resolve, 50);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
sketch.setup = function() {
|
|
34
|
+
reject(new Error('Setup called'));
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
sketch.draw = function() {
|
|
38
|
+
reject(new Error('Draw called'));
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
testSketchWithPromise('error with frag prevents sketch continuing', function(
|
|
43
|
+
sketch,
|
|
44
|
+
resolve,
|
|
45
|
+
reject
|
|
46
|
+
) {
|
|
47
|
+
sketch.preload = function() {
|
|
48
|
+
sketch.loadShader(vertFile, invalidFile);
|
|
49
|
+
setTimeout(resolve, 50);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
sketch.setup = function() {
|
|
53
|
+
reject(new Error('Setup called'));
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
sketch.draw = function() {
|
|
57
|
+
reject(new Error('Draw called'));
|
|
58
|
+
};
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
testSketchWithPromise('error callback is called for vert', function(
|
|
62
|
+
sketch,
|
|
63
|
+
resolve,
|
|
64
|
+
reject
|
|
65
|
+
) {
|
|
66
|
+
sketch.preload = function() {
|
|
67
|
+
sketch.loadShader(
|
|
68
|
+
invalidFile,
|
|
69
|
+
fragFile,
|
|
70
|
+
function() {
|
|
71
|
+
reject(new Error('Success callback executed.'));
|
|
72
|
+
},
|
|
73
|
+
function() {
|
|
74
|
+
// Wait a bit so that if both callbacks are executed we will get an error.
|
|
75
|
+
setTimeout(resolve, 50);
|
|
76
|
+
}
|
|
77
|
+
);
|
|
78
|
+
};
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
testSketchWithPromise('error callback is called for frag', function(
|
|
82
|
+
sketch,
|
|
83
|
+
resolve,
|
|
84
|
+
reject
|
|
85
|
+
) {
|
|
86
|
+
sketch.preload = function() {
|
|
87
|
+
sketch.loadShader(
|
|
88
|
+
vertFile,
|
|
89
|
+
invalidFile,
|
|
90
|
+
function() {
|
|
91
|
+
reject(new Error('Success callback executed.'));
|
|
92
|
+
},
|
|
93
|
+
function() {
|
|
94
|
+
// Wait a bit so that if both callbacks are executed we will get an error.
|
|
95
|
+
setTimeout(resolve, 50);
|
|
96
|
+
}
|
|
97
|
+
);
|
|
98
|
+
};
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
testSketchWithPromise('loading correctly triggers setup', function(
|
|
102
|
+
sketch,
|
|
103
|
+
resolve,
|
|
104
|
+
reject
|
|
105
|
+
) {
|
|
106
|
+
sketch.preload = function() {
|
|
107
|
+
sketch.loadShader(vertFile, fragFile);
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
sketch.setup = function() {
|
|
111
|
+
resolve();
|
|
112
|
+
};
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
testSketchWithPromise('success callback is called', function(
|
|
116
|
+
sketch,
|
|
117
|
+
resolve,
|
|
118
|
+
reject
|
|
119
|
+
) {
|
|
120
|
+
var hasBeenCalled = false;
|
|
121
|
+
sketch.preload = function() {
|
|
122
|
+
sketch.loadShader(
|
|
123
|
+
vertFile,
|
|
124
|
+
fragFile,
|
|
125
|
+
function() {
|
|
126
|
+
hasBeenCalled = true;
|
|
127
|
+
},
|
|
128
|
+
function(err) {
|
|
129
|
+
reject(new Error('Error callback was entered: ' + err));
|
|
130
|
+
}
|
|
131
|
+
);
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
sketch.setup = function() {
|
|
135
|
+
if (!hasBeenCalled) {
|
|
136
|
+
reject(new Error('Setup called prior to success callback'));
|
|
137
|
+
} else {
|
|
138
|
+
setTimeout(resolve, 50);
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
test('returns an object with correct data', async function() {
|
|
144
|
+
const shader = await promisedSketch(function(sketch, resolve, reject) {
|
|
145
|
+
var _shader;
|
|
146
|
+
sketch.preload = function() {
|
|
147
|
+
_shader = sketch.loadShader(vertFile, fragFile, function() {}, reject);
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
sketch.setup = function() {
|
|
151
|
+
resolve(_shader);
|
|
152
|
+
};
|
|
153
|
+
});
|
|
154
|
+
assert.instanceOf(shader, p5.Shader);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
test('passes an object with correct data to callback', async function() {
|
|
158
|
+
const model = await promisedSketch(function(sketch, resolve, reject) {
|
|
159
|
+
sketch.preload = function() {
|
|
160
|
+
sketch.loadShader(vertFile, fragFile, resolve, reject);
|
|
161
|
+
};
|
|
162
|
+
});
|
|
163
|
+
assert.instanceOf(model, p5.Shader);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
test('does not run setup after complete when called outside of preload', async function() {
|
|
167
|
+
let setupCallCount = 0;
|
|
168
|
+
await promisedSketch(function(sketch, resolve, reject) {
|
|
169
|
+
sketch.setup = function() {
|
|
170
|
+
setupCallCount++;
|
|
171
|
+
sketch.loadShader(vertFile, fragFile, resolve, reject);
|
|
172
|
+
};
|
|
173
|
+
});
|
|
174
|
+
assert.equal(setupCallCount, 1);
|
|
175
|
+
});
|
|
176
|
+
});
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
suite('loadStrings', function() {
|
|
2
|
+
const invalidFile = '404file';
|
|
3
|
+
const validFile = 'unit/assets/sentences.txt';
|
|
4
|
+
const fileWithEmptyLines = 'unit/assets/empty_lines.txt';
|
|
5
|
+
const fileWithManyLines = 'unit/assets/many_lines.txt';
|
|
6
|
+
|
|
7
|
+
test('_friendlyFileLoadError is called', async function() {
|
|
8
|
+
const _friendlyFileLoadErrorStub = sinon.stub(p5, '_friendlyFileLoadError');
|
|
9
|
+
try {
|
|
10
|
+
await promisedSketch(function(sketch, resolve, reject) {
|
|
11
|
+
sketch.preload = function() {
|
|
12
|
+
sketch.loadStrings(invalidFile, reject, resolve);
|
|
13
|
+
};
|
|
14
|
+
});
|
|
15
|
+
expect(
|
|
16
|
+
_friendlyFileLoadErrorStub.calledOnce,
|
|
17
|
+
'p5._friendlyFileLoadError was not called'
|
|
18
|
+
).to.be.true;
|
|
19
|
+
} finally {
|
|
20
|
+
_friendlyFileLoadErrorStub.restore();
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
testSketchWithPromise('error prevents sketch continuing', function(
|
|
25
|
+
sketch,
|
|
26
|
+
resolve,
|
|
27
|
+
reject
|
|
28
|
+
) {
|
|
29
|
+
sketch.preload = function() {
|
|
30
|
+
sketch.loadStrings(invalidFile, reject, function() {
|
|
31
|
+
setTimeout(resolve, 50);
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
sketch.setup = function() {
|
|
36
|
+
reject(new Error('Entered setup'));
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
sketch.draw = function() {
|
|
40
|
+
reject(new Error('Entered draw'));
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
testSketchWithPromise('error callback is called', function(
|
|
45
|
+
sketch,
|
|
46
|
+
resolve,
|
|
47
|
+
reject
|
|
48
|
+
) {
|
|
49
|
+
sketch.preload = function() {
|
|
50
|
+
sketch.loadStrings(
|
|
51
|
+
invalidFile,
|
|
52
|
+
function() {
|
|
53
|
+
reject(new Error('Success callback executed.'));
|
|
54
|
+
},
|
|
55
|
+
function() {
|
|
56
|
+
// Wait a bit so that if both callbacks are executed we will get an error.
|
|
57
|
+
setTimeout(resolve, 50);
|
|
58
|
+
}
|
|
59
|
+
);
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
testSketchWithPromise('loading correctly triggers setup', function(
|
|
64
|
+
sketch,
|
|
65
|
+
resolve,
|
|
66
|
+
reject
|
|
67
|
+
) {
|
|
68
|
+
sketch.preload = function() {
|
|
69
|
+
sketch.loadStrings(validFile);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
sketch.setup = resolve();
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
testSketchWithPromise('success callback is called', function(
|
|
76
|
+
sketch,
|
|
77
|
+
resolve,
|
|
78
|
+
reject
|
|
79
|
+
) {
|
|
80
|
+
sketch.preload = function() {
|
|
81
|
+
sketch.loadStrings(validFile, resolve, function(err) {
|
|
82
|
+
reject(new Error('Error callback was entered: ' + err));
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
sketch.setup = function() {
|
|
87
|
+
reject(new Error('Setup called prior to success callback'));
|
|
88
|
+
};
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
test('returns an array of strings', async function() {
|
|
92
|
+
const strings = await promisedSketch(function(sketch, resolve, reject) {
|
|
93
|
+
let strings;
|
|
94
|
+
sketch.preload = function() {
|
|
95
|
+
strings = sketch.loadStrings(validFile, function() {}, reject);
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
sketch.setup = function() {
|
|
99
|
+
resolve(strings);
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
assert.isArray(strings);
|
|
104
|
+
for (let i = 0; i < strings.length; i++) {
|
|
105
|
+
assert.isString(strings[i]);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
test('passes an array to success callback', async function() {
|
|
110
|
+
const strings = await promisedSketch(function(sketch, resolve, reject) {
|
|
111
|
+
sketch.preload = function() {
|
|
112
|
+
sketch.loadStrings(validFile, resolve, reject);
|
|
113
|
+
};
|
|
114
|
+
});
|
|
115
|
+
assert.isArray(strings);
|
|
116
|
+
for (let i = 0; i < strings.length; i++) {
|
|
117
|
+
assert.isString(strings[i]);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
test('should include empty strings', async function() {
|
|
122
|
+
const strings = await promisedSketch(function(sketch, resolve, reject) {
|
|
123
|
+
sketch.preload = function() {
|
|
124
|
+
sketch.loadStrings(fileWithEmptyLines, resolve, reject);
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
assert.isArray(strings, 'Array passed to callback function');
|
|
128
|
+
assert.lengthOf(strings, 6, 'length of data is 6');
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
test('can load file with many lines', async function() {
|
|
132
|
+
const strings = await promisedSketch(function(sketch, resolve, reject) {
|
|
133
|
+
sketch.preload = function() {
|
|
134
|
+
sketch.loadStrings(fileWithManyLines, resolve, reject);
|
|
135
|
+
};
|
|
136
|
+
});
|
|
137
|
+
assert.isArray(strings, 'Array passed to callback function');
|
|
138
|
+
assert.lengthOf(strings, 131073, 'length of data is 131073');
|
|
139
|
+
});
|
|
140
|
+
});
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
suite('loadTable', function() {
|
|
2
|
+
var invalidFile = '404file';
|
|
3
|
+
var validFile = 'unit/assets/csv.csv';
|
|
4
|
+
|
|
5
|
+
test('_friendlyFileLoadError is called', async function() {
|
|
6
|
+
const _friendlyFileLoadErrorStub = sinon.stub(p5, '_friendlyFileLoadError');
|
|
7
|
+
try {
|
|
8
|
+
await promisedSketch(function(sketch, resolve, reject) {
|
|
9
|
+
sketch.preload = function() {
|
|
10
|
+
sketch.loadTable(invalidFile, reject, resolve);
|
|
11
|
+
};
|
|
12
|
+
});
|
|
13
|
+
expect(
|
|
14
|
+
_friendlyFileLoadErrorStub.calledOnce,
|
|
15
|
+
'p5._friendlyFileLoadError was not called'
|
|
16
|
+
).to.be.true;
|
|
17
|
+
} finally {
|
|
18
|
+
_friendlyFileLoadErrorStub.restore();
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
testSketchWithPromise('error prevents sketch continuing', function(
|
|
23
|
+
sketch,
|
|
24
|
+
resolve,
|
|
25
|
+
reject
|
|
26
|
+
) {
|
|
27
|
+
sketch.preload = function() {
|
|
28
|
+
sketch.loadTable(invalidFile);
|
|
29
|
+
setTimeout(resolve, 50);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
sketch.setup = function() {
|
|
33
|
+
reject(new Error('Setup called'));
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
sketch.draw = function() {
|
|
37
|
+
reject(new Error('Draw called'));
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
testSketchWithPromise('error callback is called', function(
|
|
42
|
+
sketch,
|
|
43
|
+
resolve,
|
|
44
|
+
reject
|
|
45
|
+
) {
|
|
46
|
+
sketch.preload = function() {
|
|
47
|
+
sketch.loadTable(
|
|
48
|
+
invalidFile,
|
|
49
|
+
function() {
|
|
50
|
+
reject(new Error('Success callback executed.'));
|
|
51
|
+
},
|
|
52
|
+
function() {
|
|
53
|
+
// Wait a bit so that if both callbacks are executed we will get an error.
|
|
54
|
+
setTimeout(resolve, 50);
|
|
55
|
+
}
|
|
56
|
+
);
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
testSketchWithPromise('loading correctly triggers setup', function(
|
|
61
|
+
sketch,
|
|
62
|
+
resolve,
|
|
63
|
+
reject
|
|
64
|
+
) {
|
|
65
|
+
sketch.preload = function() {
|
|
66
|
+
sketch.loadTable(validFile);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
sketch.setup = function() {
|
|
70
|
+
resolve();
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
testSketchWithPromise('success callback is called', function(
|
|
75
|
+
sketch,
|
|
76
|
+
resolve,
|
|
77
|
+
reject
|
|
78
|
+
) {
|
|
79
|
+
var hasBeenCalled = false;
|
|
80
|
+
sketch.preload = function() {
|
|
81
|
+
sketch.loadTable(
|
|
82
|
+
validFile,
|
|
83
|
+
function() {
|
|
84
|
+
hasBeenCalled = true;
|
|
85
|
+
},
|
|
86
|
+
function(err) {
|
|
87
|
+
reject(new Error('Error callback was entered: ' + err));
|
|
88
|
+
}
|
|
89
|
+
);
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
sketch.setup = function() {
|
|
93
|
+
if (!hasBeenCalled) {
|
|
94
|
+
reject(new Error('Setup called prior to success callback'));
|
|
95
|
+
} else {
|
|
96
|
+
setTimeout(resolve, 50);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
test('returns an object with correct data', async function() {
|
|
102
|
+
const table = await promisedSketch(function(sketch, resolve, reject) {
|
|
103
|
+
let _table;
|
|
104
|
+
sketch.preload = function() {
|
|
105
|
+
_table = sketch.loadTable(validFile, function() {}, reject);
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
sketch.setup = function() {
|
|
109
|
+
resolve(_table);
|
|
110
|
+
};
|
|
111
|
+
});
|
|
112
|
+
assert.equal(table.getRowCount(), 4);
|
|
113
|
+
assert.strictEqual(table.getRow(1).getString(0), 'David');
|
|
114
|
+
assert.strictEqual(table.getRow(1).getNum(1), 31);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
test('passes an object to success callback for object JSON', async function() {
|
|
118
|
+
const table = await promisedSketch(function(sketch, resolve, reject) {
|
|
119
|
+
sketch.preload = function() {
|
|
120
|
+
sketch.loadTable(validFile, resolve, reject);
|
|
121
|
+
};
|
|
122
|
+
});
|
|
123
|
+
assert.equal(table.getRowCount(), 4);
|
|
124
|
+
assert.strictEqual(table.getRow(1).getString(0), 'David');
|
|
125
|
+
assert.strictEqual(table.getRow(1).getNum(1), 31);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
test('csv option returns the correct data', async function() {
|
|
129
|
+
const table = await promisedSketch(function(sketch, resolve, reject) {
|
|
130
|
+
sketch.preload = function() {
|
|
131
|
+
sketch.loadTable(validFile, 'csv', resolve, reject);
|
|
132
|
+
};
|
|
133
|
+
});
|
|
134
|
+
assert.equal(table.getRowCount(), 4);
|
|
135
|
+
assert.strictEqual(table.getRow(1).getString(0), 'David');
|
|
136
|
+
assert.strictEqual(table.getRow(1).getNum(1), 31);
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
test('using the header option works', async function() {
|
|
140
|
+
const table = await promisedSketch(function(sketch, resolve, reject) {
|
|
141
|
+
sketch.preload = function() {
|
|
142
|
+
sketch.loadTable(validFile, 'header', resolve, reject);
|
|
143
|
+
};
|
|
144
|
+
});
|
|
145
|
+
assert.equal(table.getRowCount(), 3);
|
|
146
|
+
assert.strictEqual(table.getRow(0).getString('name'), 'David');
|
|
147
|
+
assert.strictEqual(table.getRow(0).getNum('age'), 31);
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
test('allows the csv and header options together', async function() {
|
|
151
|
+
const table = await promisedSketch(function(sketch, resolve, reject) {
|
|
152
|
+
sketch.preload = function() {
|
|
153
|
+
sketch.loadTable(validFile, 'csv', 'header', resolve, reject);
|
|
154
|
+
};
|
|
155
|
+
});
|
|
156
|
+
assert.equal(table.getRowCount(), 3);
|
|
157
|
+
assert.strictEqual(table.getRow(0).getString('name'), 'David');
|
|
158
|
+
assert.strictEqual(table.getRow(0).getNum('age'), 31);
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
test('CSV files should handle commas within quoted fields', async function() {
|
|
162
|
+
const table = await promisedSketch(function(sketch, resolve, reject) {
|
|
163
|
+
sketch.preload = function() {
|
|
164
|
+
sketch.loadTable(validFile, resolve, reject);
|
|
165
|
+
};
|
|
166
|
+
});
|
|
167
|
+
assert.equal(table.getRowCount(), 4);
|
|
168
|
+
assert.equal(table.getRow(2).get(0), 'David, Jr.');
|
|
169
|
+
assert.equal(table.getRow(2).getString(0), 'David, Jr.');
|
|
170
|
+
assert.equal(table.getRow(2).get(1), '11');
|
|
171
|
+
assert.equal(table.getRow(2).getString(1), 11);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
test('CSV files should handle escaped quotes and returns within quoted fields', async function() {
|
|
175
|
+
const table = await promisedSketch(function(sketch, resolve, reject) {
|
|
176
|
+
sketch.preload = function() {
|
|
177
|
+
sketch.loadTable(validFile, resolve, reject);
|
|
178
|
+
};
|
|
179
|
+
});
|
|
180
|
+
assert.equal(table.getRowCount(), 4);
|
|
181
|
+
assert.equal(table.getRow(3).get(0), 'David,\nSr. "the boss"');
|
|
182
|
+
});
|
|
183
|
+
});
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
suite('loadXML', function() {
|
|
2
|
+
var invalidFile = '404file';
|
|
3
|
+
var validFile = 'unit/assets/books.xml';
|
|
4
|
+
|
|
5
|
+
test('_friendlyFileLoadError is called', async function() {
|
|
6
|
+
const _friendlyFileLoadErrorStub = sinon.stub(p5, '_friendlyFileLoadError');
|
|
7
|
+
try {
|
|
8
|
+
await promisedSketch(function(sketch, resolve, reject) {
|
|
9
|
+
sketch.preload = function() {
|
|
10
|
+
sketch.loadXML(invalidFile, reject, resolve);
|
|
11
|
+
};
|
|
12
|
+
});
|
|
13
|
+
expect(
|
|
14
|
+
_friendlyFileLoadErrorStub.calledOnce,
|
|
15
|
+
'p5._friendlyFileLoadError was not called'
|
|
16
|
+
).to.be.true;
|
|
17
|
+
} finally {
|
|
18
|
+
_friendlyFileLoadErrorStub.restore();
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
testSketchWithPromise('error prevents sketch continuing', function(
|
|
23
|
+
sketch,
|
|
24
|
+
resolve,
|
|
25
|
+
reject
|
|
26
|
+
) {
|
|
27
|
+
sketch.preload = function() {
|
|
28
|
+
sketch.loadXML(invalidFile);
|
|
29
|
+
setTimeout(resolve, 50);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
sketch.setup = function() {
|
|
33
|
+
reject(new Error('Setup called'));
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
sketch.draw = function() {
|
|
37
|
+
reject(new Error('Draw called'));
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
testSketchWithPromise('error callback is called', function(
|
|
42
|
+
sketch,
|
|
43
|
+
resolve,
|
|
44
|
+
reject
|
|
45
|
+
) {
|
|
46
|
+
sketch.preload = function() {
|
|
47
|
+
sketch.loadXML(
|
|
48
|
+
invalidFile,
|
|
49
|
+
function() {
|
|
50
|
+
reject(new Error('Success callback executed.'));
|
|
51
|
+
},
|
|
52
|
+
function() {
|
|
53
|
+
// Wait a bit so that if both callbacks are executed we will get an error.
|
|
54
|
+
setTimeout(resolve, 50);
|
|
55
|
+
}
|
|
56
|
+
);
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
testSketchWithPromise('loading correctly triggers setup', function(
|
|
61
|
+
sketch,
|
|
62
|
+
resolve,
|
|
63
|
+
reject
|
|
64
|
+
) {
|
|
65
|
+
sketch.preload = function() {
|
|
66
|
+
sketch.loadXML(validFile);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
sketch.setup = function() {
|
|
70
|
+
resolve();
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
testSketchWithPromise('success callback is called', function(
|
|
75
|
+
sketch,
|
|
76
|
+
resolve,
|
|
77
|
+
reject
|
|
78
|
+
) {
|
|
79
|
+
var hasBeenCalled = false;
|
|
80
|
+
sketch.preload = function() {
|
|
81
|
+
sketch.loadXML(
|
|
82
|
+
validFile,
|
|
83
|
+
function() {
|
|
84
|
+
hasBeenCalled = true;
|
|
85
|
+
},
|
|
86
|
+
function(err) {
|
|
87
|
+
reject(new Error('Error callback was entered: ' + err));
|
|
88
|
+
}
|
|
89
|
+
);
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
sketch.setup = function() {
|
|
93
|
+
if (!hasBeenCalled) {
|
|
94
|
+
reject(new Error('Setup called prior to success callback'));
|
|
95
|
+
} else {
|
|
96
|
+
setTimeout(resolve, 50);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
test('returns an object with correct data', async function() {
|
|
102
|
+
const xml = await promisedSketch(function(sketch, resolve, reject) {
|
|
103
|
+
let _xml;
|
|
104
|
+
sketch.preload = function() {
|
|
105
|
+
_xml = sketch.loadXML(validFile, function() {}, reject);
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
sketch.setup = function() {
|
|
109
|
+
resolve(_xml);
|
|
110
|
+
};
|
|
111
|
+
});
|
|
112
|
+
assert.isObject(xml);
|
|
113
|
+
var children = xml.getChildren('book');
|
|
114
|
+
assert.lengthOf(children, 12);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
test('passes an object with correct data', async function() {
|
|
118
|
+
const xml = await promisedSketch(function(sketch, resolve, reject) {
|
|
119
|
+
sketch.preload = function() {
|
|
120
|
+
sketch.loadXML(validFile, resolve, reject);
|
|
121
|
+
};
|
|
122
|
+
});
|
|
123
|
+
assert.isObject(xml);
|
|
124
|
+
var children = xml.getChildren('book');
|
|
125
|
+
assert.lengthOf(children, 12);
|
|
126
|
+
});
|
|
127
|
+
});
|