UNPKG

vpaid-flash-client

Version:
266 lines (224 loc) 9.52 kB
let VPAIDFLASHClient = require('../../js/VPAIDFLASHClient.js'); let VPAID_FLASH_HANDLER = require('../../js/jsFlashBridge.js').JSFlashBridge.VPAID_FLASH_HANDLER; let VPAIDAdUnit = require('../../js/VPAIDAdUnit.js').VPAIDAdUnit; let addFlashMethodsToEl = require('../testHelper.js').addFlashMethodsToEl; describe('VPAIDFLASHClient <-> FlashVPAID.swf <-> VPAID_AD.swf', function() { let flashWrapper1, flashWrapper2; const AD_URL = 'TestAd.swf'; beforeEach(function () { flashWrapper1 = document.createElement('div'); flashWrapper2 = document.createElement('div'); document.body.appendChild(flashWrapper1); document.body.appendChild(flashWrapper2); }); afterEach(function () { document.body.removeChild(flashWrapper1); document.body.removeChild(flashWrapper2); }); it('must handle gracefully when createSWF fails', function () { var elNotInDOM = document.createElement('div'); let vpaid = new VPAIDFLASHClient(elNotInDOM, function (err, result) { assert.isNotNull(err); assert.match(err.message, /^swfobject failed to create/); }); }); it('VPAIDFLASHClient must load FlashVPAID', function(done) { let vpaid = new VPAIDFLASHClient(flashWrapper1, function () { assert(true); done(); }); }); it('VPAIDFLASHClient must loadAdUnit', function(done) { let vpaid = new VPAIDFLASHClient(flashWrapper1, function () { vpaid.loadAdUnit(AD_URL, function(err, adUnit) { assert.isDefined(adUnit); done(); }); }); }); it('must allow to load adUnit even if the flash is not loaded', function(done) { let vpaid = new VPAIDFLASHClient(flashWrapper1); let callback = sinon.spy(function (err, result) { assert.isNull(err); assert(callback.calledOnce); assert.instanceOf(result, VPAIDAdUnit, 'callback result must return a adUnit'); done(); }); vpaid.loadAdUnit(AD_URL, callback); }); it('must allow to load adUnit even if the flash is not loaded, but should only call the lastest one', function(done) { let vpaid = new VPAIDFLASHClient(flashWrapper1); let callback1 = sinon.spy(); let callback2 = sinon.spy(function (err, result) { assert.isNull(err); assert.equal(callback1.callCount, 0); assert(callback2.calledOnce); assert.instanceOf(result, VPAIDAdUnit, 'callback result must return a adUnit'); done(); }); vpaid.loadAdUnit(AD_URL, callback1); vpaid.loadAdUnit(AD_URL, callback2); }); describe('adUnit', function () { function createAndLoadVPaid(onLoad) { let vpaid = new VPAIDFLASHClient(flashWrapper1, function () { vpaid.loadAdUnit(AD_URL, onLoad); }); return vpaid; } function createLoadAndStartVPaid(onStart) { let vpaid = createAndLoadVPaid(function (err, adUnit) { adUnit.handshakeVersion('2.0', function(err, result) { adUnit.on('AdLoaded', function (result) { adUnit.startAd(); }); adUnit.on('AdStarted', function () { onStart(adUnit); }); adUnit.initAd(300, 300, 'normal', -1, '', ''); }); }); } it('adUnit handshake must return version', function(done) { let vpaid = createAndLoadVPaid(function (err, adUnit) { adUnit.handshakeVersion('2.0', function (err, result) { assert.isNull(err); assert.isNumber(parseFloat(result)); done(); }); }); }); it('adUnit initAd must fire adLoaded', function(done) { createAndLoadVPaid(function(err, adUnit) { adUnit.handshakeVersion('2.0', function (err, result) { adUnit.on('AdLoaded', function () { done(); }); adUnit.initAd(300, 300, 'normal', -1, '', ''); }); }); }); it('adUnit initAd must fire adStarted', function(done) { createAndLoadVPaid(function(err, adUnit) { adUnit.handshakeVersion('2.0', function (err, result) { adUnit.on('AdLoaded', function (result) { startAd(); }); adUnit.on('AdStarted', function (result) { done(); }); adUnit.initAd(300, 300, 'normal', -1, '', ''); function startAd() { adUnit.startAd(); } }); }); }); describe('adUnit must unload', function (done) { it('unload must work when the ad is still loading', function (done) { let vpaid = new VPAIDFLASHClient(flashWrapper1, function () { let onAd = sinon.spy(); vpaid.loadAdUnit(AD_URL, onAd); vpaid.unloadAdUnit(function (err, adUnit) { assert(!onAd.called); assert.isNull(err); assert.isNotNull(adUnit); done(); }); }); }); it('must unload previous adUnit when the request to load another adUnit', function (done) { let vpaid = new VPAIDFLASHClient(flashWrapper1, function () { let onAd = sinon.spy(); vpaid.loadAdUnit(AD_URL, function(err, firstAdUnit) { assert.isNull(err); vpaid.loadAdUnit(AD_URL, function(err, secondAdUnit) { assert.isNull(err); assert(firstAdUnit.isDestroyed()); assert(!secondAdUnit.isDestroyed()); }); }); vpaid.unloadAdUnit(function (err, result) { assert(!onAd.called); assert.isNull(err); done(); }); }); }); it('unload must work when the ad is already loaded', function (done) { let vpaid = createAndLoadVPaid(function(err, adUnit) { vpaid.unloadAdUnit(function (err, result) { assert.isNull(err); assert(adUnit._destroyed); assert.isNull(adUnit._flash); done(); }); }); }); it('unload must remove pending loading', function() { let vpaid = new VPAIDFLASHClient(flashWrapper1); vpaid.loadAdUnit(AD_URL, sinon.spy()); assert.isObject(vpaid._loadLater); vpaid.unloadAdUnit(); assert.isUndefined(vpaid._loadLater); }); }); describe('destroy', function() { it('must destroy', function (done) { let vpaid = createAndLoadVPaid(function(err, adUnit) { vpaid.destroy(); assert(adUnit._destroyed); assert.isNull(adUnit._flash); done(); }); }); it('must destroy', function () { let vpaid = new VPAIDFLASHClient(flashWrapper1); vpaid.loadAdUnit(AD_URL, sinon.spy()); assert.isObject(vpaid._loadLater); vpaid.destroy(); assert(vpaid.isDestroyed()); assert.isUndefined(vpaid._loadLater); }); }); it('must get/set volume', function(done) { let vpaid = createLoadAndStartVPaid(function (adUnit) { const newVolume = .84; adUnit.setAdVolume(newVolume, function () { adUnit.getAdVolume(function (err, volume) { assert.equal(newVolume, volume); done(); }); }); }); }); it('must resize the ad', function(done) { let vpaid = createLoadAndStartVPaid(function (adUnit) { var callback = sinon.spy(function() { done(); }); adUnit.resizeAd(300, 200, 'normal', callback); }); }); [ 'getAdLinear', 'getAdExpanded', 'getAdSkippableState', 'getAdRemainingTime', 'getAdCompanions', 'getAdIcons', 'getAdWidth', 'getAdHeight' ].forEach(function (getter) { it('must get ' + getter, function (done) { let vpaid = createLoadAndStartVPaid(function (adUnit) { adUnit[getter](function (err, value) { assert.equal(value, false); assert.isNull(err); done(); }); }); }); }); }); });