test('.build() checks if already built, and returns early if true', () => { const mockContext = { built: true, initExtensions: sinon.spy(), }; WebGLKernel.prototype.build.apply(mockContext); assert.equal(mockContext.initExtensions.callCount, 0); });
afterEach(done => { mockContext.reset(); mockTemplate.reset(); mockChildTemplate.reset(); cacheTemplate.reset(); server.close(done); });
it('emits `error(request, error)` event on template error', done => { const onTemplateError = sinon.spy(); mockTemplate.returns(false); tailor.on('error', onTemplateError); http.get('http://localhost:8080/template', response => { const request = onTemplateError.args[0][0]; const error = onTemplateError.args[0][1]; assert.equal(request.url, '/template'); assert.equal(error, 'Error fetching template'); response.resume(); response.on('end', done); }); });
test('setOutput() when needs to trigger recompile', () => { const mockInstance = { program: {}, texSize: [1, 1], toKernelOutput: GLKernel.prototype.toKernelOutput, dynamicOutput: true, getVariablePrecisionString: (textureSize) => { if (textureSize[0] === 1) return 'lowp'; return 'highp'; }, switchKernels: sinon.spy() }; GLKernel.prototype.setOutput.call(mockInstance, [100, 100]); assert.ok(mockInstance.switchKernels.callCount, 1); });
it('emits `error(request, error)` event on primary error/timeout', done => { const onPrimaryError = sinon.spy(); nock('https://fragment') .get('/') .reply(500); mockTemplate.returns('<fragment primary src="https://fragment">'); tailor.on('error', onPrimaryError); http.get('http://localhost:8080/template', response => { const request = onPrimaryError.args[0][0]; const error = onPrimaryError.args[0][1]; assert.equal(request.url, '/template'); assert.equal(error.message, 'Internal Server Error'); response.resume(); response.on('end', done); }); });
describe('TasmotaHandler - connect', () => { const tasmotaHandler = new TasmotaHandler(gladys, 'service-uuid-random'); sinon.spy(tasmotaHandler, 'handleMqttMessage'); beforeEach(() => { sinon.reset(); }); it('connect with subscription', () => { tasmotaHandler.connect(); assert.calledWith(gladys.service.getService, 'mqtt'); assert.callCount(mqttService.device.subscribe, 2); mqttService.device.subscribe.firstCall.calledWith( 'stat/+/+', tasmotaHandler.handleMqttMessage.bind(tasmotaHandler), ); mqttService.device.subscribe.secondCall.calledWith( 'tele/+/+', tasmotaHandler.handleMqttMessage.bind(tasmotaHandler), ); }); });
function testMutableLeak(mode) { const gpu = new GPU({ mode }); const kernel = gpu.createKernel(function() { return 1; }, { output: [1], pipeline: true }); kernel.build(); const cloneTextureSpy = sinon.spy(kernel.texture.constructor.prototype, 'beforeMutate'); const texture1 = kernel(); const texture2 = kernel(); assert.equal(cloneTextureSpy.callCount, 0); assert.equal(texture1.texture._refs, 1); assert.ok(texture1 === texture2); cloneTextureSpy.restore(); gpu.destroy(); }
it('should not trigger `response` and `end` if there was an `error`', done => { const onResponse = sinon.spy(); const onEnd = sinon.spy(); const onError = sinon.spy(); nock('https://fragment') .get('/') .reply(500); const fragment = new Fragment(getOptions(TAG)); fragment.on('response', onResponse); fragment.on('end', onEnd); fragment.on('error', onError); fragment.fetch(REQUEST); fragment.stream.on('end', () => { assert.equal(onResponse.callCount, 0); assert.equal(onEnd.callCount, 0); assert.equal(onError.callCount, 1); done(); }); fragment.stream.resume(); });
function testWithoutDestroyContext(done, mode) { const gpu = new GPU({ mode }); const destroyKernel = sinon.spy(); gpu.kernels.push({ kernel: { constructor: { destroyContext: null } }, destroy: destroyKernel }); gpu.destroy(); gpu.destroy() .then(() => { assert.equal(destroyKernel.callCount, 2); assert.ok(true); done(); }); }
it('emits `context:error(request, error)` event', done => { const onContextError = sinon.spy(); const rejectPrm = Promise.reject('Error fetching context'); rejectPrm.catch(() => {}); mockContext.returns(rejectPrm); tailor.on('context:error', onContextError); http.get('http://localhost:8080/template', response => { const request = onContextError.args[0][0]; const error = onContextError.args[0][1]; assert.equal(request.url, '/template'); assert.equal(error, 'Error fetching context'); response.resume(); response.on('end', done); }); });
it('emits `start(request)` event', done => { const onStart = sinon.spy(); nock('https://fragment') .get('/') .reply(200, 'hello'); mockTemplate.returns('<fragment src="https://fragment">'); tailor.on('start', onStart); http.get('http://localhost:8080/template', response => { response.resume(); response.on('end', () => { const request = onStart.args[0][0]; assert.equal(request.url, '/template'); assert.equal(onStart.callCount, 1); done(); }); }); });
test('works with MemberExpression', () => { const mockBody = {}; const mockProperty = {}; const mockPushState = sinon.spy(); const mockPopState = sinon.spy(); const mockScan = sinon.spy(); const mockInstance = { scan: mockScan, pushState: mockPushState, popState: mockPopState, }; FunctionTracer.prototype.scan.call(mockInstance, { type: 'MemberExpression', object: mockBody, property: mockProperty }); assert.ok(mockScan.called); assert.equal(mockScan.args[0][0], mockBody); assert.equal(mockScan.args[1][0], mockProperty); assert.equal(mockPushState.args[0][0], 'memberExpression'); assert.equal(mockPopState.args[0][0], 'memberExpression'); });
it('emits `end(request, contentSize)` event', done => { const onEnd = sinon.spy(); mockTemplate.returns( '<html><head></head><body><h2></h2></body></html>' ); tailor.on('end', onEnd); http.get('http://localhost:8080/template', response => { response.resume(); response.on('end', () => { const request = onEnd.args[0][0]; const contentSize = onEnd.args[0][1]; assert.equal(request.url, '/template'); assert.equal(contentSize, 48); assert.equal(onEnd.callCount, 1); done(); }); }); });
test('.build() checks if already built, and returns early if true', () => { const mockContext = { built: true, setupConstants: sinon.spy(), }; CPUKernel.prototype.build.apply(mockContext); assert.equal(mockContext.setupConstants.callCount, 0); });
it('forwards `fragment:start(request, fragment)` event from a fragment', done => { const onFragmentStart = sinon.spy(); nock('https://fragment') .get('/') .reply(200, 'hello'); mockTemplate.returns('<fragment src="https://fragment">'); tailor.on('fragment:start', onFragmentStart); http.get('http://localhost:8080/template', response => { const request = onFragmentStart.args[0][0]; const fragment = onFragmentStart.args[0][1]; assert.equal(request.url, '/template'); assert.equal(fragment.url, 'https://fragment'); response.resume(); response.on('end', done); }); });