1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132 |
- /*global ZeroClipboard, _currentElement:true, _flashState:true, _extend, _clipData, _clipDataFormatMap */
- (function(module, test) {
- "use strict";
- var originalFlashState, originalConfig, originalFlashDetect;
- module("client/api.js unit tests - constructor and bridge", {
- setup: function() {
- // Store
- originalFlashDetect = ZeroClipboard.isFlashUnusable;
- originalConfig = ZeroClipboard.config();
- // Modify
- ZeroClipboard.isFlashUnusable = function() {
- return false;
- };
- ZeroClipboard.config({ swfPath: originalConfig.swfPath.replace(/\/(?:src|test)\/.*$/i, "/dist/ZeroClipboard.swf") });
- },
- teardown: function() {
- // Restore
- ZeroClipboard.destroy();
- ZeroClipboard.isFlashUnusable = originalFlashDetect;
- ZeroClipboard.config(originalConfig);
- }
- });
- test("Client is created properly by `ZeroClipboard`", function(assert) {
- assert.expect(3);
- // Arrange & Act
- var client = new ZeroClipboard();
- // Assert
- assert.ok(client);
- assert.ok(client.id);
- assert.strictEqual(client instanceof ZeroClipboard, true);
- });
- test("New client is not the same client (no singleton) but does share the same bridge", function(assert) {
- assert.expect(6);
- // Arrange
- var containerClass = "." + ZeroClipboard.config("containerClass");
- // Assert, arrange, assert, act, assert
- assert.strictEqual($(containerClass).length, 0);
- var client1 = new ZeroClipboard();
- assert.ok(client1.id);
- assert.strictEqual($(containerClass).length, 1);
- var client2 = new ZeroClipboard();
- assert.strictEqual($(containerClass).length, 1);
- assert.notEqual(client2.id, client1.id);
- assert.notEqual(client2, client1);
- });
- test("No more client singleton!", function(assert) {
- assert.expect(7);
- // Arrange
- ZeroClipboard.isFlashUnusable = function() {
- return false;
- };
- // Assert, arrange, assert, act, assert
- assert.ok(!ZeroClipboard.prototype._singleton, "The client singleton does not exist on the prototype before creating a client");
- var client1 = new ZeroClipboard();
- assert.ok(!ZeroClipboard.prototype._singleton, "The client singleton does not exist on the prototype after creating a client");
- assert.ok(!client1._singleton, "The client singleton does not exist on the client instance after creating a client");
- var client2 = new ZeroClipboard();
- assert.ok(!ZeroClipboard.prototype._singleton, "The client singleton does not exist on the prototype after creating a second client");
- assert.ok(!client1._singleton, "The client singleton does not exist on the first client instance after creating a second client");
- assert.ok(!client2._singleton, "The client singleton does not exist on the second client instance after creating a second client");
- ZeroClipboard.destroy();
- assert.ok(!ZeroClipboard.prototype._singleton, "The client singleton does not exist on the prototype after calling `destroy`");
- });
- test("`destroy` clears up the client", function(assert) {
- assert.expect(6);
- // Arrange
- var containerId = "#" + ZeroClipboard.config("containerId");
- ZeroClipboard.isFlashUnusable = function() {
- return false;
- };
- // Assert, arrange, assert, act, assert
- assert.ok(!ZeroClipboard.prototype._singleton, "The client singleton does not exist before creating a client");
- assert.equal($(containerId)[0], null, "The HTML bridge does not exist before creating a client");
- /*jshint nonew:false */
- new ZeroClipboard();
- assert.ok(!ZeroClipboard.prototype._singleton, "The client singleton does exist after creating a client");
- assert.notEqual($(containerId)[0], null, "The HTML bridge does exist after creating a client");
- ZeroClipboard.destroy();
- assert.ok(!ZeroClipboard.prototype._singleton, "The client singleton does not exist after calling `destroy`");
- assert.equal($(containerId)[0], null, "The HTML bridge does not exist after calling `destroy`");
- });
- module("client/api.js unit tests - clipboard", {
- setup: function() {
- // Store
- originalConfig = ZeroClipboard.config();
- // Modify
- ZeroClipboard.config({ swfPath: originalConfig.swfPath.replace(/\/(?:src|test)\/.*$/i, "/dist/ZeroClipboard.swf") });
- },
- teardown: function() {
- ZeroClipboard.destroy();
- ZeroClipboard.config(originalConfig);
- }
- });
- test("`setText` works", function(assert) {
- assert.expect(4);
- // Arrange
- var client = new ZeroClipboard();
- // Assert, Act, repeat ad nauseam
- assert.deepEqual(_clipData, {}, "`_clipData` is empty");
- client.setText("zc4evar");
- assert.deepEqual(_clipData, { "text/plain": "zc4evar" }, "`_clipData` contains expected text");
- client.setText("ZeroClipboard");
- assert.deepEqual(_clipData, { "text/plain": "ZeroClipboard" }, "`_clipData` contains expected updated text");
- _clipData["text/html"] = "<b>Win</b>";
- client.setText("goodbye");
- assert.deepEqual(_clipData, { "text/plain": "goodbye", "text/html": "<b>Win</b>" }, "`_clipData` contains expected updated text AND the other data");
- });
- test("`setHtml` works", function(assert) {
- assert.expect(4);
- // Arrange
- var client = new ZeroClipboard();
- // Assert, Act, repeat ad nauseam
- assert.deepEqual(_clipData, {}, "`_clipData` is empty");
- client.setHtml("zc4evar");
- assert.deepEqual(_clipData, { "text/html": "zc4evar" }, "`_clipData` contains expected HTML");
- client.setHtml("<b>ZeroClipboard</b>");
- assert.deepEqual(_clipData, { "text/html": "<b>ZeroClipboard</b>" }, "`_clipData` contains expected updated HTML");
- _clipData["text/plain"] = "blah";
- client.setHtml("<i>goodbye</i>");
- assert.deepEqual(_clipData, { "text/html": "<i>goodbye</i>", "text/plain": "blah" }, "`_clipData` contains expected updated HTML AND the other data");
- });
- test("`setRichText` works", function(assert) {
- assert.expect(4);
- // Arrange
- var client = new ZeroClipboard();
- // Assert, Act, repeat ad nauseam
- assert.deepEqual(_clipData, {}, "`_clipData` is empty");
- client.setRichText("zc4evar");
- assert.deepEqual(_clipData, { "application/rtf": "zc4evar" }, "`_clipData` contains expected RTF");
- client.setRichText("{\\rtf1\\ansi\n{\\b ZeroClipboard}}");
- assert.deepEqual(_clipData, { "application/rtf": "{\\rtf1\\ansi\n{\\b ZeroClipboard}}" }, "`_clipData` contains expected updated RTF");
- _clipData["text/plain"] = "blah";
- client.setRichText("{\\rtf1\\ansi\n{\\i Foo}}");
- assert.deepEqual(_clipData, { "application/rtf": "{\\rtf1\\ansi\n{\\i Foo}}", "text/plain": "blah" }, "`_clipData` contains expected updated RTF AND the other data");
- });
- test("`setData` works", function(assert) {
- assert.expect(4);
- // Arrange
- var client = new ZeroClipboard();
- // Assert, Act, repeat ad nauseam
- assert.deepEqual(_clipData, {}, "`_clipData` is empty");
- client.setData("text/plain", "zc4evar");
- assert.deepEqual(_clipData, { "text/plain": "zc4evar" }, "`_clipData` contains expected text");
- client.setData("text/html", "<i>ZeroClipboard</i>");
- assert.deepEqual(_clipData, { "text/plain": "zc4evar", "text/html": "<i>ZeroClipboard</i>" }, "`_clipData` contains expected text and custom format");
- client.setData({ "text/html": "<b>Win</b>" });
- assert.deepEqual(_clipData, { "text/html": "<b>Win</b>" }, "`_clipData` contains expected HTML and cleared out old data because an object was passed in");
- });
- test("`clearData` works", function(assert) {
- assert.expect(4);
- // Arrange
- var client = new ZeroClipboard();
- // Assert
- assert.deepEqual(_clipData, {}, "`_clipData` is empty");
- // Arrange & Assert
- _clipData["text/plain"] = "zc4evar";
- _clipData["application/rtf"] = "{\\rtf1\\ansi\n{\\i Foo}}";
- _clipData["text/html"] = "<b>Win</b>";
- assert.deepEqual(_clipData, {
- "text/plain": "zc4evar",
- "application/rtf": "{\\rtf1\\ansi\n{\\i Foo}}",
- "text/html": "<b>Win</b>"
- }, "`_clipData` contains all expected data");
- // Act & Assert
- client.clearData("application/rtf");
- assert.deepEqual(_clipData, {
- "text/plain": "zc4evar",
- "text/html": "<b>Win</b>"
- }, "`_clipData` had 'application/rtf' successfully removed");
- // Act & Assert
- client.clearData();
- assert.deepEqual(_clipData, {}, "`_clipData` had all data successfully removed");
- });
- test("`setText` overrides the data-clipboard-text attribute", function(assert) {
- assert.expect(3);
- // Arrange
- var client = new ZeroClipboard();
- var currentEl = document.getElementById("d_clip_button");
- // Act
- client.clip(currentEl);
- client.setText("This is the new text");
- ZeroClipboard.activate(currentEl);
- var pendingText = ZeroClipboard.emit("copy");
- // Assert
- assert.deepEqual(_clipData, { "text/plain": "This is the new text" });
- assert.deepEqual(pendingText, { "text": "This is the new text" });
- assert.deepEqual(_clipDataFormatMap, { "text": "text/plain" });
- });
- test("`setText` overrides data-clipboard-target pre", function(assert) {
- assert.expect(3);
- // Arrange
- var client = new ZeroClipboard();
- var currentEl = document.getElementById("d_clip_button_pre_text");
- // Act
- client.clip(currentEl);
- client.setText("This is the new text");
- ZeroClipboard.activate(currentEl);
- var pendingText = ZeroClipboard.emit("copy");
- // Assert
- assert.deepEqual(_clipData, { "text/plain": "This is the new text" });
- assert.deepEqual(pendingText, { "text": "This is the new text" });
- assert.deepEqual(_clipDataFormatMap, { "text": "text/plain" });
- });
- test("`setHtml` overrides data-clipboard-target pre", function(assert) {
- assert.expect(3);
- // Arrange
- var client = new ZeroClipboard();
- var currentEl = document.getElementById("d_clip_button_pre_text");
- // Act
- client.clip(currentEl);
- client.setHtml("This is the new HTML");
- ZeroClipboard.activate(currentEl);
- var pendingText = ZeroClipboard.emit("copy");
- // Assert
- assert.deepEqual(_clipData, { "text/html": "This is the new HTML" });
- assert.deepEqual(pendingText, { "html": "This is the new HTML" });
- assert.deepEqual(_clipDataFormatMap, { "html": "text/html" });
- });
- test("`setText` AND `setHtml` override data-clipboard-target pre", function(assert) {
- assert.expect(3);
- // Arrange
- var client = new ZeroClipboard();
- var currentEl = document.getElementById("d_clip_button_pre_text");
- // Act
- client.clip(currentEl);
- client.setText("This is the new text");
- client.setHtml("This is the new HTML");
- ZeroClipboard.activate(currentEl);
- var pendingText = ZeroClipboard.emit("copy");
- // Assert
- assert.deepEqual(_clipData, {
- "text/plain": "This is the new text",
- "text/html": "This is the new HTML"
- });
- assert.deepEqual(pendingText, {
- "text": "This is the new text",
- "html": "This is the new HTML"
- });
- assert.deepEqual(_clipDataFormatMap, { "text": "text/plain", "html": "text/html" });
- });
- module("client/api.js unit tests - event", {
- setup: function() {
- // Store
- originalFlashState = _extend({}, _flashState);
- originalConfig = ZeroClipboard.config();
- originalFlashDetect = ZeroClipboard.isFlashUnusable;
- // Modify
- _currentElement = null;
- _flashState = {
- bridge: null,
- version: "0.0.0",
- disabled: null,
- outdated: null,
- unavailable: null,
- deactivated: null,
- ready: null
- };
- //ZeroClipboard.config({ swfPath: originalConfig.swfPath.replace(/\/(?:src|test)\/.*$/i, "/dist/ZeroClipboard.swf") });
- },
- teardown: function() {
- ZeroClipboard.destroy();
- _currentElement = null;
- _flashState = originalFlashState;
- ZeroClipboard.config(originalConfig);
- ZeroClipboard.isFlashUnusable = originalFlashDetect;
- }
- });
- test("Clip element after new client", function(assert) {
- assert.expect(4);
- // Arrange
- var client = new ZeroClipboard();
- var target = document.getElementById("d_clip_button");
- // Assert, Act, Assert
- assert.strictEqual("zcClippingId" in target, false);
- assert.deepEqual(client.elements(), []);
- client.clip(target);
- assert.strictEqual("zcClippingId" in target, true);
- assert.deepEqual(client.elements(), [target]);
- });
- test("unclip element removes items", function(assert) {
- assert.expect(12);
- // Arrange
- var client = new ZeroClipboard();
- var targets = [
- document.getElementById("d_clip_button"),
- document.getElementById("d_clip_button2"),
- document.getElementById("d_clip_button3")
- ];
- // Assert pre-conditions
- assert.strictEqual("zcClippingId" in targets[0], false);
- assert.strictEqual("zcClippingId" in targets[1], false);
- assert.strictEqual("zcClippingId" in targets[2], false);
- assert.deepEqual(client.elements(), []);
- // Act
- client.clip(targets);
- // Assert initial state
- assert.strictEqual("zcClippingId" in targets[0], true);
- assert.strictEqual("zcClippingId" in targets[1], true);
- assert.strictEqual("zcClippingId" in targets[2], true);
- assert.deepEqual(client.elements(), targets);
- // Act more
- client.unclip([
- document.getElementById("d_clip_button3"),
- document.getElementById("d_clip_button2")
- ]);
- // Assert end state
- assert.strictEqual("zcClippingId" in targets[0], true);
- assert.strictEqual("zcClippingId" in targets[1], false);
- assert.strictEqual("zcClippingId" in targets[2], false);
- assert.deepEqual(client.elements(), [targets[0]]);
- });
- test("Element won't be clipped twice", function(assert) {
- assert.expect(3);
- // Arrange
- var client = new ZeroClipboard();
- var currentEl = document.getElementById("d_clip_button");
- // Assert, act, assert
- assert.deepEqual(client.elements(), []);
- client.clip(currentEl);
- assert.deepEqual(client.elements(), [currentEl]);
- client.clip(currentEl);
- assert.deepEqual(client.elements(), [currentEl]);
- });
- test("Registering Events", function(assert) {
- assert.expect(6);
- // Arrange
- var client = new ZeroClipboard();
- // Act
- client.on("ready", function(){});
- client.on("onError", function(){});
- client.on("onCustomEvent", function(){});
- // Assert
- assert.ok(client.handlers().ready);
- assert.ok(client.handlers().error);
- assert.ok(client.handlers().customevent);
- assert.strictEqual(client.handlers().ready.length, 1);
- assert.strictEqual(client.handlers().error.length, 1);
- assert.strictEqual(client.handlers().customevent.length, 1);
- });
- test("Registering Events with Maps", function(assert) {
- assert.expect(6);
- // Arrange
- var client = new ZeroClipboard();
- // Act
- client.on({
- "ready": function(){},
- "onError": function(){},
- "onCustomEvent": function(){}
- });
- // Assert
- assert.ok(client.handlers().ready);
- assert.ok(client.handlers().error);
- assert.ok(client.handlers().customevent);
- assert.strictEqual(client.handlers().ready.length, 1);
- assert.strictEqual(client.handlers().error.length, 1);
- assert.strictEqual(client.handlers().customevent.length, 1);
- });
- test("Unregistering Events", function(assert) {
- assert.expect(6);
- // Arrange
- var client = new ZeroClipboard();
- var ready = function(){};
- var onError = function(){};
- var onCustomEvent = function(){};
- // Act
- client.on("ready", ready);
- client.on("onError", onError);
- client.on("onCustomEvent", onCustomEvent);
- // Assert
- assert.deepEqual(client.handlers().ready, [ready]);
- assert.deepEqual(client.handlers().error, [onError]);
- assert.deepEqual(client.handlers().customevent, [onCustomEvent]);
- // Act & Assert
- client.off("ready", ready);
- assert.deepEqual(client.handlers().ready, []);
- // Act & Assert
- client.off("onError", onError);
- assert.deepEqual(client.handlers().error, []);
- // Act & Assert
- client.off("onCustomEvent", onCustomEvent);
- assert.deepEqual(client.handlers().customevent, []);
- });
- test("Unregistering Events with Maps", function(assert) {
- assert.expect(6);
- // Arrange
- var client = new ZeroClipboard();
- var ready = function(){};
- var onError = function(){};
- var onCustomEvent = function(){};
- // Act
- client.on("ready", ready);
- client.on("onError", onError);
- client.on("onCustomEvent", onCustomEvent);
- // Assert
- assert.deepEqual(client.handlers().ready, [ready]);
- assert.deepEqual(client.handlers().error, [onError]);
- assert.deepEqual(client.handlers().customevent, [onCustomEvent]);
- // Act & Assert
- client.off({ "ready": ready });
- assert.deepEqual(client.handlers().ready, []);
- // Act & Assert
- client.off({ "onError": onError });
- assert.deepEqual(client.handlers().error, []);
- // Act & Assert
- client.off({ "onCustomEvent": onCustomEvent });
- assert.deepEqual(client.handlers().customevent, []);
- });
- test("Registering two events works", function(assert) {
- assert.expect(6);
- // Arrange
- var client = new ZeroClipboard();
- // Assert
- assert.ok(!client.handlers().ready);
- assert.ok(!client.handlers().aftercopy);
- // Act
- client.on("ready onaftercopy", function(){});
- // Assert more
- assert.ok(client.handlers().ready);
- assert.ok(client.handlers().aftercopy);
- assert.strictEqual(client.handlers().ready.length, 1);
- assert.strictEqual(client.handlers().aftercopy.length, 1);
- });
- test("Registering two events with a map works", function(assert) {
- assert.expect(6);
- // Arrange
- var client = new ZeroClipboard();
- // Assert
- assert.ok(!client.handlers().ready);
- assert.ok(!client.handlers().aftercopy);
- // Act
- client.on({
- "ready onaftercopy": function(){}
- });
- // Assert more
- assert.ok(client.handlers().ready);
- assert.ok(client.handlers().aftercopy);
- assert.strictEqual(client.handlers().ready.length, 1);
- assert.strictEqual(client.handlers().aftercopy.length, 1);
- });
- test("Unregistering two events works", function(assert) {
- assert.expect(6);
- // Arrange
- var client = new ZeroClipboard();
- var func = function() {};
- // Assert
- assert.ok(!client.handlers().ready);
- assert.ok(!client.handlers().aftercopy);
- // Act
- client.on("ready onaftercopy", func);
- // Assert more
- assert.deepEqual(client.handlers().ready, [func]);
- assert.deepEqual(client.handlers().aftercopy, [func]);
- // Act more
- client.off("ready onaftercopy", func);
- // Assert even more
- assert.deepEqual(client.handlers().ready, []);
- assert.deepEqual(client.handlers().aftercopy, []);
- });
- test("Unregistering two events with a map works", function(assert) {
- assert.expect(6);
- // Arrange
- var client = new ZeroClipboard();
- var func = function() {};
- // Assert
- assert.ok(!client.handlers().ready);
- assert.ok(!client.handlers().aftercopy);
- // Act
- client.on("ready onaftercopy", func);
- // Assert more
- assert.deepEqual(client.handlers().ready, [func]);
- assert.deepEqual(client.handlers().aftercopy, [func]);
- // Act more
- client.off({
- "ready onaftercopy": func
- });
- // Assert even more
- assert.deepEqual(client.handlers().ready, []);
- assert.deepEqual(client.handlers().aftercopy, []);
- });
- test("`on` can add multiple handlers for the same event", function(assert) {
- assert.expect(3);
- // Arrange
- var client = new ZeroClipboard();
- var func1 = function() {};
- var func2 = function() {};
- // Assert
- assert.ok(!client.handlers().ready);
- // Act
- client.on("ready", func1);
- // Assert more
- assert.deepEqual(client.handlers().ready, [func1]);
- // Act more
- client.on("ready", func2);
- // Assert even more
- assert.deepEqual(client.handlers().ready, [func1, func2]);
- });
- test("`off` can remove multiple handlers for the same event", function(assert) {
- assert.expect(5);
- // Arrange
- var client = new ZeroClipboard();
- var func1 = function() {};
- var func2 = function() {};
- var func3 = function() {};
- // Assert
- assert.ok(!client.handlers().ready);
- // Act
- client.on("ready", func1);
- client.on("ready", func2);
- client.on("ready", func3);
- // Assert more
- assert.deepEqual(client.handlers().ready, [func1, func2, func3]);
- // Act and assert even more
- client.off("ready", func3); // Remove from the end
- assert.deepEqual(client.handlers().ready, [func1, func2]);
- client.off("ready", func1); // Remove from the start
- assert.deepEqual(client.handlers().ready, [func2]);
- client.off("ready", func2); // Remove the last one
- assert.deepEqual(client.handlers().ready, []);
- });
- test("`on` can add more than one entry of the same handler function for the same event", function(assert) {
- assert.expect(2);
- // Arrange
- var client = new ZeroClipboard();
- var func1 = function() {};
- // Assert
- assert.ok(!client.handlers().ready);
- // Act
- client.on("ready", func1);
- client.on("ready", func1);
- // Assert more
- assert.deepEqual(client.handlers().ready, [func1, func1]);
- });
- test("`off` will remove all entries of the same handler function for the same event", function(assert) {
- assert.expect(3);
- // Arrange
- var client = new ZeroClipboard();
- var func1 = function() {};
- // Assert
- assert.ok(!client.handlers().ready);
- // Act
- client.on("ready", func1);
- client.on("ready", func1);
- // Assert more
- assert.deepEqual(client.handlers().ready, [func1, func1]);
- // Act more
- client.off("ready", func1);
- // Assert even more
- assert.deepEqual(client.handlers().ready, []);
- });
- test("`off` will remove all handler functions for an event if no function is specified", function(assert) {
- assert.expect(3);
- // Arrange
- var client = new ZeroClipboard();
- var func1 = function() {};
- var func2 = function() {};
- var func3 = function() {};
- // Assert
- assert.ok(!client.handlers().ready);
- // Act
- client.on("ready", func1);
- client.on("ready", func2);
- client.on("ready", func3);
- client.on("ready", func1);
- // Assert more
- assert.deepEqual(client.handlers().ready, [func1, func2, func3, func1]);
- // Act and assert even more
- client.off("ready"); // Remove all
- assert.deepEqual(client.handlers().ready, []);
- });
- test("`off` will remove all handler functions for all events if no event type is specified", function(assert) {
- assert.expect(6);
- // Arrange
- var client = new ZeroClipboard();
- var func1 = function() {};
- var func2 = function() {};
- var func3 = function() {};
- // Assert
- assert.ok(!client.handlers().ready);
- assert.ok(!client.handlers().error);
- // Act
- client.on("ready", func1);
- client.on("ready", func2);
- client.on("error", func3);
- // Assert more
- assert.deepEqual(client.handlers().ready, [func1, func2]);
- assert.deepEqual(client.handlers().error, [func3]);
- // Act and assert even more
- client.off(); // Remove all handlers for all types
- assert.deepEqual(client.handlers().ready, []);
- assert.deepEqual(client.handlers().error, []);
- });
- test("Test disabledFlash Event", function(assert) {
- assert.expect(6);
- // Arrange
- _flashState.disabled = true;
- var client = new ZeroClipboard();
- var id = client.id;
- // Act (should auto-fire immediately but the handler will be invoked asynchronously)
- client.on( "error", function(event) {
- // Assert
- assert.strictEqual(this, client);
- assert.strictEqual(this.id, id);
- assert.strictEqual(_flashState.disabled, true);
- assert.strictEqual(event.type, "error");
- assert.strictEqual(event.name, "flash-disabled");
- assert.strictEqual(event.target, null);
- QUnit.start();
- } );
- QUnit.stop();
- });
- test("Test outdatedFlash Event", function(assert) {
- assert.expect(8);
- // Arrange
- _flashState.disabled = false;
- _flashState.outdated = true;
- _flashState.version = "10.0.0";
- var client = new ZeroClipboard();
- var id = client.id;
- // Act
- client.on( "ready", function(/* event */) {
- assert.ok(false, "The `ready` event should NOT have fired!");
- } );
- client.on( "error", function(event) {
- // Assert
- assert.strictEqual(this, client);
- assert.strictEqual(this.id, id);
- assert.strictEqual(_flashState.outdated, true);
- assert.strictEqual(event.type, "error");
- assert.strictEqual(event.name, "flash-outdated");
- assert.strictEqual(event.target, null);
- assert.strictEqual(event.version, "10.0.0");
- assert.strictEqual(event.minimumVersion, "11.0.0");
- QUnit.start();
- } );
- QUnit.stop();
- });
- test("Test deactivatedFlash Event", function(assert) {
- assert.expect(10);
- // Arrange
- _flashState.disabled = false;
- _flashState.outdated = false;
- _flashState.version = "11.0.0";
- ZeroClipboard.config({ flashLoadTimeout: 2000 });
- var client = new ZeroClipboard();
- var id = client.id;
- client.on( "ready", function(/* event */) {
- assert.ok(false, "The `ready` event should NOT have fired!");
- } );
- client.on( "error", function(event) {
- // Assert
- assert.strictEqual(this, client);
- assert.strictEqual(this.id, id);
- assert.strictEqual(_flashState.deactivated, true);
- assert.strictEqual(_flashState.ready, false);
- assert.strictEqual(event.type, "error");
- assert.strictEqual(event.name, "flash-deactivated");
- assert.strictEqual(event.target, null);
- assert.strictEqual(event.version, "11.0.0");
- assert.strictEqual(event.minimumVersion, "11.0.0");
- QUnit.start();
- } );
- // Act
- setTimeout(function() {
- assert.strictEqual(_flashState.deactivated, null);
- }, 500);
- QUnit.stop();
- // The "deactivatedFlash" event will automatically fire in 2 seconds if the `ready` event does not fire first
- });
- test("Test deactivatedFlash Event after first resolution", function(assert) {
- assert.expect(8);
- // Arrange
- _flashState.disabled = false;
- _flashState.outdated = false;
- _flashState.version = "11.0.0";
- _flashState.deactivated = true;
- var client = new ZeroClipboard();
- var id = client.id;
- client.on( "ready", function(/* event */) {
- assert.ok(false, "The `ready` event should NOT have fired!");
- } );
- client.on( "error", function(event) {
- // Assert
- assert.strictEqual(this, client);
- assert.strictEqual(this.id, id);
- assert.strictEqual(_flashState.deactivated, true);
- assert.strictEqual(event.type, "error");
- assert.strictEqual(event.name, "flash-deactivated");
- assert.strictEqual(event.target, null);
- assert.strictEqual(event.version, "11.0.0");
- assert.strictEqual(event.minimumVersion, "11.0.0");
- QUnit.start();
- } );
- // Act
- QUnit.stop();
- // The "deactivatedFlash" event will automatically fire in 0 seconds (when the event loop gets to it)
- });
- test("Test ready Event", function(assert) {
- assert.expect(6);
- // Arrange
- _flashState.disabled = false;
- _flashState.outdated = false;
- _flashState.version = "11.9.0";
- var client = new ZeroClipboard();
- var currentEl = document.getElementById("d_clip_button");
- var id = client.id;
- client.clip(currentEl);
- client.on( "ready", function(event) {
- // Assert
- assert.strictEqual(this, client);
- assert.strictEqual(this.id, id);
- assert.strictEqual(event.type, "ready");
- assert.strictEqual(event.target, null);
- assert.strictEqual(_flashState.deactivated, false);
- assert.strictEqual(event.version, "11.9.0");
- QUnit.start();
- } );
- // Act
- QUnit.stop();
- ZeroClipboard.emit("ready");
- });
- test("Test ready Event after first load", function(assert) {
- assert.expect(6);
- // Arrange
- _flashState.disabled = false;
- _flashState.outdated = false;
- _flashState.deactivated = false;
- _flashState.version = "11.9.0";
- _flashState.ready = true;
- _flashState.bridge = {};
- var client = new ZeroClipboard();
- var id = client.id;
- // Act (should auto-fire immediately but the handler will be invoked asynchronously)
- client.on( "ready", function(event) {
- // Assert
- assert.strictEqual(this, client);
- assert.strictEqual(this.id, id);
- assert.strictEqual(event.type, "ready");
- assert.strictEqual(event.target, null);
- assert.strictEqual(_flashState.deactivated, false);
- assert.strictEqual(event.version, "11.9.0");
- QUnit.start();
- } );
- QUnit.stop();
- });
- test("Test overdueFlash Event", function(assert) {
- assert.expect(15);
- // Arrange
- _flashState.disabled = false;
- _flashState.outdated = false;
- _flashState.version = "11.0.0";
- _flashState.deactivated = true;
- var client = new ZeroClipboard();
- var id = client.id;
- client.on( "ready", function(/* event */) {
- assert.ok(false, "The `ready` event should NOT have fired!");
- } );
- client.on( "error", function(event) {
- // Assert
- assert.strictEqual(this, client);
- assert.strictEqual(this.id, id);
- if (event.name === "flash-deactivated") {
- assert.strictEqual(event.type, "error");
- assert.strictEqual(event.name, "flash-deactivated");
- assert.strictEqual(_flashState.deactivated, true);
- assert.strictEqual(event.version, "11.0.0");
- assert.strictEqual(event.minimumVersion, "11.0.0");
- }
- else if (event.name === "flash-overdue") {
- assert.strictEqual(event.type, "error");
- assert.strictEqual(event.name, "flash-overdue");
- assert.strictEqual(_flashState.deactivated, false);
- assert.strictEqual(_flashState.overdue, true);
- assert.strictEqual(event.version, "11.0.0");
- assert.strictEqual(event.minimumVersion, "11.0.0");
- QUnit.start();
- }
- } );
- // Act
- QUnit.stop();
- // The "deactivatedFlash" event will automatically fire in 0 seconds (when the event loop gets to it)
- setTimeout(function() {
- // Emit a "ready" event (as if from the SWF) to trigger an "overdueFlash" event
- ZeroClipboard.emit("ready");
- }, 1000);
- });
- test("Test string function name as handler", function(assert) {
- assert.expect(2);
- // Arrange
- var client = new ZeroClipboard();
- var currentEl = document.getElementById("d_clip_button");
- var id = client.id;
- client.clip(currentEl);
- window.zcLoadCallback = function(event) {
- // Assert
- assert.strictEqual(this.id, id);
- assert.strictEqual(event.type, "ready");
- QUnit.start();
- delete window.zcLoadCallback;
- };
- client.on( "ready", "zcLoadCallback" );
- // Act
- QUnit.stop();
- ZeroClipboard.emit("ready");
- });
- test("Test EventListener object as handler", function(assert) {
- assert.expect(4);
- // Arrange
- var client = new ZeroClipboard();
- var currentEl = document.getElementById("d_clip_button");
- var id = client.id;
- client.clip(currentEl);
- var eventListenerObj = {
- handleEvent: function(event) {
- // Assert
- assert.strictEqual(event.type, "ready");
- assert.strictEqual(event.client, client);
- assert.strictEqual(event.client.id, id);
- assert.strictEqual(this, eventListenerObj);
- QUnit.start();
- }
- };
- client.on( "ready", eventListenerObj );
- // Act
- QUnit.stop();
- ZeroClipboard.emit("ready");
- });
- test("Test for appropriate context inside of invoked event handlers", function(assert) {
- assert.expect(12);
- // Arrange
- var client = new ZeroClipboard();
- var currentEl = document.getElementById("d_clip_button");
- assert.ok(currentEl);
- assert.strictEqual(currentEl.id, "d_clip_button");
- client.clip(currentEl);
- ZeroClipboard.activate(currentEl);
- client.on( "ready error", function(/* event */) {
- // Assert
- assert.strictEqual(this, client);
- } );
- client.on( "beforecopy", function(event) {
- // Assert
- assert.strictEqual(event.target, currentEl);
- } );
- client.on( "copy", function(event) {
- // Assert
- assert.strictEqual(event.target, currentEl);
- assert.ok(_clipData["text/plain"]);
- } );
- client.on( "aftercopy", function(event) {
- // Assert
- assert.strictEqual(event.target, currentEl);
- assert.ok(!_clipData["text/plain"]);
- QUnit.start();
- } );
- // Act
- QUnit.stop();
- ZeroClipboard.emit("ready");
- ZeroClipboard.emit({"type":"error", "name":"flash-disabled"});
- ZeroClipboard.emit({"type":"error", "name":"flash-outdated"});
- ZeroClipboard.emit({"type":"error", "name":"flash-deactivated"});
- ZeroClipboard.emit({"type":"error", "name":"flash-overdue"});
- ZeroClipboard.emit("beforecopy");
- ZeroClipboard.emit("copy");
- ZeroClipboard.emit("aftercopy");
- });
- module("client/api.js unit tests - element clipping", {
- setup: function() {
- // Store
- originalConfig = ZeroClipboard.config();
- // Modify
- ZeroClipboard.config({ swfPath: originalConfig.swfPath.replace(/\/(?:src|test)\/.*$/i, "/dist/ZeroClipboard.swf") });
- },
- teardown: function() {
- ZeroClipboard.destroy();
- ZeroClipboard.config(originalConfig);
- }
- });
- test("Client without selector doesn't have elements", function(assert) {
- assert.expect(2);
- // Arrange & Act
- var client = new ZeroClipboard();
- // Assert
- assert.ok(client);
- assert.deepEqual(client.elements(), []);
- });
- })(QUnit.module, QUnit.test);
|