Skip to content

Commit 3d89057

Browse files
committed
Allow multiple contexts to be mocked.
1 parent b5b000f commit 3d89057

File tree

1 file changed

+39
-14
lines changed

1 file changed

+39
-14
lines changed

src/util/mockVGL.js

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
/* eslint-disable camelcase */
22
/* eslint-disable underscore/prefer-constant */
33

4+
var $ = require('jquery');
45
var vgl = require('vgl');
56
var vglRenderer = require('../gl/vglRenderer');
67

7-
var _renderWindow = vgl.renderWindow;
8-
var _supported = vglRenderer.supported;
8+
var _renderWindow, _supported;
99

1010
module.exports = {};
1111

1212
/**
1313
* Replace vgl.renderer with a mocked version for testing in a non-webGL state.
14-
* Use resotreVGLRenderer to unmock.
14+
* Use restoreVGLRenderer to unmock. Call vgl.mockCounts() to get the number
15+
* of times different webGL functions have been called.
1516
*
1617
* @param {boolean} [supported=true] If false, then the vgl renderer will
1718
* indicate that this is an unsupported browser environment.
@@ -46,7 +47,7 @@ module.exports.mockVGLRenderer = function mockVGLRenderer(supported) {
4647
};
4748
};
4849
/* The context largely does nothing. */
49-
var m_context = {
50+
var default_context = {
5051
activeTexture: noop('activeTexture'),
5152
attachShader: noop('attachShader'),
5253
bindAttribLocation: noop('bindAttribLocation'),
@@ -130,17 +131,40 @@ module.exports.mockVGLRenderer = function mockVGLRenderer(supported) {
130131
viewport: noop('viewport')
131132
};
132133

133-
/* Our mock has only a single renderWindow */
134-
var m_renderWindow = vgl.renderWindow();
135-
m_renderWindow._setup = function () {
136-
return true;
137-
};
138-
m_renderWindow.context = function () {
139-
return m_context;
140-
};
141-
vgl.renderWindow = function () {
142-
return m_renderWindow;
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;
143164
};
165+
vgl.renderWindow = mockedRenderWindow;
166+
167+
_supported = vglRenderer.supported;
144168
vglRenderer.supported = function () {
145169
return !!supported;
146170
};
@@ -159,6 +183,7 @@ module.exports.restoreVGLRenderer = function () {
159183
vgl.renderWindow = _renderWindow;
160184
vglRenderer.supported = _supported;
161185
delete vgl._mocked;
186+
// delete vgl._mockedRenderWindow;
162187
delete vgl.mockCounts;
163188
}
164189
};

0 commit comments

Comments
 (0)