Skip to content

Commit 1103e98

Browse files
authored
Merge pull request #688 from OpenGeoscience/mock-vgl-as-util
Move mock VGL functions to util
2 parents c3c4eaf + 3f52df8 commit 1103e98

File tree

16 files changed

+226
-193
lines changed

16 files changed

+226
-193
lines changed

src/util/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ var $ = require('jquery');
55
*/
66
var util = require('./init');
77
$.extend(util, require('./throttle'));
8+
$.extend(util, require('./mockVGL'));
89
util.DistanceGrid = require('./distanceGrid.js');
910
util.ClusterGroup = require('./clustering.js');
1011

src/util/mockVGL.js

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
/* eslint-disable camelcase */
2+
/* eslint-disable underscore/prefer-constant */
3+
4+
var $ = require('jquery');
5+
var vgl = require('vgl');
6+
var vglRenderer = require('../gl/vglRenderer');
7+
8+
var _renderWindow, _supported;
9+
10+
module.exports = {};
11+
12+
/**
13+
* Replace vgl.renderer with a mocked version for testing in a non-webGL state.
14+
* Use restoreVGLRenderer to unmock. Call vgl.mockCounts() to get the number
15+
* of times different webGL functions have been called.
16+
*
17+
* @param {boolean} [supported=true] If false, then the vgl renderer will
18+
* indicate that this is an unsupported browser environment.
19+
*/
20+
module.exports.mockVGLRenderer = function mockVGLRenderer(supported) {
21+
'use strict';
22+
var vgl = require('vgl');
23+
24+
if (supported === undefined) {
25+
supported = true;
26+
}
27+
28+
if (vgl._mocked) {
29+
throw new Error('VGL renderer already mocked');
30+
}
31+
32+
var mockCounts = {};
33+
var count = function (name) {
34+
mockCounts[name] = (mockCounts[name] || 0) + 1;
35+
};
36+
var noop = function (name) {
37+
return function () {
38+
count(name);
39+
};
40+
};
41+
var _id = 0,
42+
incID = function (name) {
43+
return function () {
44+
count(name);
45+
_id += 1;
46+
return _id;
47+
};
48+
};
49+
/* The context largely does nothing. */
50+
var default_context = {
51+
activeTexture: noop('activeTexture'),
52+
attachShader: noop('attachShader'),
53+
bindAttribLocation: noop('bindAttribLocation'),
54+
bindBuffer: noop('bindBuffer'),
55+
bindFramebuffer: noop('bindFramebuffer'),
56+
bindTexture: noop('bindTexture'),
57+
blendFuncSeparate: noop('blendFuncSeparate'),
58+
bufferData: noop('bufferData'),
59+
bufferSubData: noop('bufferSubData'),
60+
checkFramebufferStatus: function (key) {
61+
count('checkFramebufferStatus');
62+
if (key === vgl.GL.FRAMEBUFFER) {
63+
return vgl.GL.FRAMEBUFFER_COMPLETE;
64+
}
65+
},
66+
clear: noop('clear'),
67+
clearColor: noop('clearColor'),
68+
clearDepth: noop('clearDepth'),
69+
compileShader: noop('compileShader'),
70+
createBuffer: incID('createBuffer'),
71+
createFramebuffer: noop('createFramebuffer'),
72+
createProgram: incID('createProgram'),
73+
createShader: incID('createShader'),
74+
createTexture: incID('createTexture'),
75+
deleteBuffer: noop('deleteBuffer'),
76+
deleteProgram: noop('deleteProgram'),
77+
deleteShader: noop('deleteShader'),
78+
deleteTexture: noop('deleteTexture'),
79+
depthFunc: noop('depthFunc'),
80+
disable: noop('disable'),
81+
disableVertexAttribArray: noop('disableVertexAttribArray'),
82+
drawArrays: noop('drawArrays'),
83+
enable: noop('enable'),
84+
enableVertexAttribArray: noop('enableVertexAttribArray'),
85+
finish: noop('finish'),
86+
getExtension: incID('getExtension'),
87+
getParameter: function (key) {
88+
count('getParameter');
89+
if (key === vgl.GL.DEPTH_BITS) {
90+
return 16;
91+
}
92+
},
93+
getProgramParameter: function (id, key) {
94+
count('getProgramParameter');
95+
if (key === vgl.GL.LINK_STATUS) {
96+
return true;
97+
}
98+
},
99+
getShaderInfoLog: function () {
100+
count('getShaderInfoLog');
101+
return 'log';
102+
},
103+
getShaderParameter: function (id, key) {
104+
count('getShaderParameter');
105+
if (key === vgl.GL.COMPILE_STATUS) {
106+
return true;
107+
}
108+
},
109+
getUniformLocation: incID('getUniformLocation'),
110+
isEnabled: function (key) {
111+
count('isEnabled');
112+
if (key === vgl.GL.BLEND) {
113+
return true;
114+
}
115+
},
116+
linkProgram: noop('linkProgram'),
117+
pixelStorei: noop('pixelStorei'),
118+
shaderSource: noop('shaderSource'),
119+
texImage2D: noop('texImage2D'),
120+
texParameteri: noop('texParameteri'),
121+
uniform1iv: noop('uniform1iv'),
122+
uniform1fv: noop('uniform1fv'),
123+
uniform2fv: noop('uniform2fv'),
124+
uniform3fv: noop('uniform3fv'),
125+
uniform4fv: noop('uniform4fv'),
126+
uniformMatrix3fv: noop('uniformMatrix3fv'),
127+
uniformMatrix4fv: noop('uniformMatrix4fv'),
128+
useProgram: noop('useProgram'),
129+
vertexAttribPointer: noop('vertexAttribPointer'),
130+
vertexAttrib3fv: noop('vertexAttrib3fv'),
131+
viewport: noop('viewport')
132+
};
133+
134+
_renderWindow = vgl.renderWindow;
135+
var mockedRenderWindow = function () {
136+
/* Temporarily put back the original definition of renderWindow so that the
137+
* class instance will be instantiated correctly. */
138+
vgl.renderWindow = _renderWindow;
139+
var m_this = new vgl.renderWindow(),
140+
m_context;
141+
vgl.renderWindow = mockedRenderWindow;
142+
143+
m_this._setup = function () {
144+
var i, renderers = m_this.renderers(),
145+
wsize = m_this.windowSize(),
146+
wpos = m_this.windowPosition();
147+
148+
m_context = $.extend({}, default_context);
149+
150+
for (i = 0; i < renderers.length; i += 1) {
151+
if ((renderers[i].width() > wsize[0]) ||
152+
renderers[i].width() === 0 ||
153+
(renderers[i].height() > wsize[1]) ||
154+
renderers[i].height() === 0) {
155+
renderers[i].resize(wpos[0], wpos[1], wsize[0], wsize[1]);
156+
}
157+
}
158+
return true;
159+
};
160+
m_this.context = function () {
161+
return m_context;
162+
};
163+
return m_this;
164+
};
165+
vgl.renderWindow = mockedRenderWindow;
166+
167+
_supported = vglRenderer.supported;
168+
vglRenderer.supported = function () {
169+
return !!supported;
170+
};
171+
172+
vgl._mocked = true;
173+
vgl.mockCounts = function () {
174+
return mockCounts;
175+
};
176+
};
177+
178+
/**
179+
* Unmock the vgl renderer.
180+
*/
181+
module.exports.restoreVGLRenderer = function () {
182+
if (vgl._mocked) {
183+
vgl.renderWindow = _renderWindow;
184+
vglRenderer.supported = _supported;
185+
delete vgl._mocked;
186+
// delete vgl._mockedRenderWindow;
187+
delete vgl.mockCounts;
188+
}
189+
};
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
f2fa25ac074a409ccc072c3444edfb6f
1+
c9987ae6444d8124142e040ae06b7468
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
https://data.kitware.com/api/v1/file/58c934128d777f0aef5d79a7/download
1+
https://data.kitware.com/api/v1/file/590103778d777f16d01e04fb/download

tests/cases/annotation.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ describe('geo.annotation', function () {
55

66
var $ = require('jquery');
77
var geo = require('../test-utils').geo;
8-
var mockVGLRenderer = require('../test-utils').mockVGLRenderer;
9-
var restoreVGLRenderer = require('../test-utils').restoreVGLRenderer;
8+
var mockVGLRenderer = geo.util.mockVGLRenderer;
9+
var restoreVGLRenderer = geo.util.restoreVGLRenderer;
1010

1111
beforeEach(function () {
1212
mockVGLRenderer();

tests/cases/annotationLayer.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ describe('geo.annotationLayer', function () {
55

66
var $ = require('jquery');
77
var geo = require('../test-utils').geo;
8-
var mockVGLRenderer = require('../test-utils').mockVGLRenderer;
9-
var restoreVGLRenderer = require('../test-utils').restoreVGLRenderer;
8+
var mockVGLRenderer = geo.util.mockVGLRenderer;
9+
var restoreVGLRenderer = geo.util.restoreVGLRenderer;
1010

1111
beforeEach(function () {
1212
mockVGLRenderer();

tests/cases/choroplethFeature.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
// Test geo.choroplethFeature and geo.gl.choroplethFeature
22

3-
var geo = require('../test-utils').geo;
43
var $ = require('jquery');
5-
var mockVGLRenderer = require('../test-utils').mockVGLRenderer;
6-
var restoreVGLRenderer = require('../test-utils').restoreVGLRenderer;
4+
var geo = require('../test-utils').geo;
5+
var mockVGLRenderer = geo.util.mockVGLRenderer;
6+
var restoreVGLRenderer = geo.util.restoreVGLRenderer;
77

88
describe('geo.choroplethFeature', function () {
99
'use strict';
@@ -130,9 +130,9 @@ describe('geo.choroplethFeature', function () {
130130
.scalarValue(scalarData[0])).toBe(10);
131131
expect(choropleth.choropleth.get('accessors')()
132132
.geoId(mpdata[0])).toBe(0);
133-
expect(Object.keys(choropleth.choropleth.get())).toEqual(
134-
['colorRange', 'scale', 'accessors', 'scalar',
135-
'scalarAggregator', 'name']);
133+
expect(Object.keys(choropleth.choropleth.get())).toEqual([
134+
'colorRange', 'scale', 'accessors', 'scalar',
135+
'scalarAggregator', 'name']);
136136
restoreVGLRenderer();
137137
});
138138
});

tests/cases/contourWrap.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
var geo = require('../test-utils').geo;
21
var $ = require('jquery');
32

43
describe('Contour Feature', function () {
54
'use strict';
65

76
var map, layer;
8-
var mockVGLRenderer = require('../test-utils').mockVGLRenderer;
9-
var restoreVGLRenderer = require('../test-utils').restoreVGLRenderer;
7+
var geo = require('../test-utils').geo;
8+
var mockVGLRenderer = geo.util.mockVGLRenderer;
9+
var restoreVGLRenderer = geo.util.restoreVGLRenderer;
1010

1111
beforeEach(function () {
1212
$('<div id="map-contour-wrap"/>')

tests/cases/lineFeature.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
// Test geo.lineFeature, geo.d3.lineFeature, geo.canvas.lineFeature, and
22
// geo.gl.lineFeature
33

4-
var geo = require('../test-utils').geo;
54
var $ = require('jquery');
65
var mockAnimationFrame = require('../test-utils').mockAnimationFrame;
76
var stepAnimationFrame = require('../test-utils').stepAnimationFrame;
87
var unmockAnimationFrame = require('../test-utils').unmockAnimationFrame;
8+
var geo = require('../test-utils').geo;
9+
var mockVGLRenderer = geo.util.mockVGLRenderer;
10+
var restoreVGLRenderer = geo.util.restoreVGLRenderer;
911
var vgl = require('vgl');
10-
var mockVGLRenderer = require('../test-utils').mockVGLRenderer;
11-
var restoreVGLRenderer = require('../test-utils').restoreVGLRenderer;
1212
var waitForIt = require('../test-utils').waitForIt;
1313
var logCanvas2D = require('../test-utils').logCanvas2D;
1414

tests/cases/osmLayer.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
// Test geo.core.osmLayer
2-
var geo = require('../test-utils').geo;
32
var $ = require('jquery');
4-
var vgl = require('vgl');
53
var mockAnimationFrame = require('../test-utils').mockAnimationFrame;
64
var stepAnimationFrame = require('../test-utils').stepAnimationFrame;
75
var unmockAnimationFrame = require('../test-utils').unmockAnimationFrame;
@@ -13,8 +11,10 @@ describe('geo.core.osmLayer', function () {
1311
var waitForIt = require('../test-utils').waitForIt;
1412
var submitNote = require('../test-utils').submitNote;
1513
// var logCanvas2D = require('../test-utils').logCanvas2D;
16-
var mockVGLRenderer = require('../test-utils').mockVGLRenderer;
17-
var restoreVGLRenderer = require('../test-utils').restoreVGLRenderer;
14+
var geo = require('../test-utils').geo;
15+
var mockVGLRenderer = geo.util.mockVGLRenderer;
16+
var restoreVGLRenderer = geo.util.restoreVGLRenderer;
17+
var vgl = require('vgl');
1818
var closeToEqual = require('../test-utils').closeToEqual;
1919

2020
function create_map(opts) {

0 commit comments

Comments
 (0)