123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441 |
- /*global ZeroClipboard, _globalConfig:true, _flashState, _clipData, _clipDataFormatMap, _deleteOwnProperties */
- (function(module, test) {
- "use strict";
- // Helper functions
- var TestUtils = {
- getHtmlBridge: function() {
- return document.getElementById("global-zeroclipboard-html-bridge");
- }
- };
- var originalConfig, originalFlashDetect;
- module("core/api.js unit tests - state");
- test("`state` produces expected result", function(assert) {
- assert.expect(8);
- // Act
- var result = ZeroClipboard.state();
- // Assert
- assert.deepEqual(Object.keys(result), ["browser", "flash", "zeroclipboard"], "Has all expected keys");
- assert.strictEqual(typeof result.browser, "object", ".browser is an object");
- assert.notStrictEqual(result.browser, null, ".browser is a non-null object");
- assert.strictEqual(typeof result.flash, "object", ".flash is an object");
- assert.notStrictEqual(result.flash, null, ".flash is a non-null object");
- assert.strictEqual(typeof result.zeroclipboard, "object", ".zeroclipboard is an object");
- assert.notStrictEqual(result.zeroclipboard, null, ".zeroclipboard is a non-null object");
- assert.deepEqual(Object.keys(result.zeroclipboard), ["version", "config"], ".zeroclipboard has all expected keys");
- });
- module("core/api.js unit tests - config", {
- setup: function() {
- originalConfig = ZeroClipboard.config();
- },
- teardown: function() {
- _globalConfig = originalConfig;
- }
- });
- test("`swfPath` finds the expected default URL", function(assert) {
- assert.expect(1);
- // Assert, act, assert
- var rootOrigin = window.location.protocol + "//" + window.location.host + "/";
- var indexOfTest = window.location.pathname.toLowerCase().indexOf("/test/");
- var rootDir = window.location.pathname.slice(1, indexOfTest + 1);
- var rootPath = rootOrigin + rootDir;
- //var stateJsUrl = rootPath + "src/js/core/state.js";
- // This is, for the record, a totally incorrect path due to being the development
- // file structure but it IS the correct URL based on calculated assumption of using
- // the built distributable versions of the library
- var swfPathBasedOnStateJsPath = rootPath + "src/js/core/ZeroClipboard.swf";
- // Test that the client has the expected default URL [even if it's not correct]
- assert.strictEqual(ZeroClipboard.config("swfPath"), swfPathBasedOnStateJsPath);
- });
- test("Changing `trustedDomains` works", function(assert) {
- assert.expect(5);
- // Arrange
- var currentHost = window.location.host;
- var originalValue = currentHost ? [currentHost] : [];
- var updatedValue = currentHost ? [currentHost, "otherDomain.com"] : ["otherDomain.com"];
- // Assert, act, assert
- // Test that the client has the default value
- assert.deepEqual(ZeroClipboard.config("trustedDomains"), originalValue);
- assert.deepEqual(ZeroClipboard.config().trustedDomains, originalValue);
- // Change the value
- var updatedConfig = ZeroClipboard.config({ trustedDomains: updatedValue });
- // Test that the client has the changed value
- assert.deepEqual(updatedConfig.trustedDomains, updatedValue);
- assert.deepEqual(ZeroClipboard.config("trustedDomains"), updatedValue);
- assert.deepEqual(ZeroClipboard.config().trustedDomains, updatedValue);
- });
- test("Some config values are ignored if SWF is actively embedded", function(assert) {
- assert.expect(2);
- // Arrange
- var _swfPath = ZeroClipboard.config("swfPath");
- var expectedBefore = {
- swfPath: _swfPath,
- trustedDomains: window.location.host ? [window.location.host] : [],
- cacheBust: true,
- forceEnhancedClipboard: false,
- flashLoadTimeout: 30000,
- autoActivate: true,
- containerId: "global-zeroclipboard-html-bridge",
- containerClass: "global-zeroclipboard-container",
- swfObjectId: "global-zeroclipboard-flash-bridge",
- hoverClass: "zeroclipboard-is-hover",
- activeClass: "zeroclipboard-is-active",
- // These configuration values CAN be modified while a SWF is actively embedded.
- bubbleEvents: true,
- forceHandCursor: false,
- title: null,
- zIndex: 999999999
- };
- var expectedAfter = {
- swfPath: _swfPath,
- trustedDomains: window.location.host ? [window.location.host] : [],
- cacheBust: true,
- forceEnhancedClipboard: false,
- flashLoadTimeout: 30000,
- autoActivate: true,
- containerId: "global-zeroclipboard-html-bridge",
- containerClass: "global-zeroclipboard-container",
- swfObjectId: "global-zeroclipboard-flash-bridge",
- hoverClass: "zeroclipboard-is-hover",
- activeClass: "zeroclipboard-is-active",
- // These configuration values CAN be modified while a SWF is actively embedded.
- bubbleEvents: false,
- forceHandCursor: true,
- title: "test",
- zIndex: 1000
- };
- // Act
- var actualBefore = ZeroClipboard.config();
- _flashState.bridge = {};
- var actualAfter = ZeroClipboard.config({
- swfPath: "/path/to/test.swf",
- trustedDomains: ["test.domain.com"],
- cacheBust: false,
- forceEnhancedClipboard: true,
- flashLoadTimeout: 15000,
- autoActivate: false,
- containerId: "test-id",
- containerClass: "test-class",
- swfObjectId: "test-swf",
- hoverClass: "test-hover",
- activeClass: "test-active",
- // These configuration values CAN be modified while a SWF is actively embedded.
- bubbleEvents: false,
- forceHandCursor: true,
- title: "test",
- zIndex: 1000
- });
- // Assert
- assert.deepEqual(actualBefore, expectedBefore, "Original config is as expected");
- assert.deepEqual(actualAfter, expectedAfter, "Updated config is as expected");
- });
- module("core/api.js unit tests - clipboard", {
- teardown: function() {
- _deleteOwnProperties(_clipData);
- }
- });
- test("`setData` works", function(assert) {
- assert.expect(4);
- // Assert, Act, repeat ad nauseam
- assert.deepEqual(_clipData, {}, "`_clipData` is empty");
- ZeroClipboard.setData("text/plain", "zc4evar");
- assert.deepEqual(_clipData, { "text/plain": "zc4evar" }, "`_clipData` contains expected text");
- ZeroClipboard.setData("text/x-markdown", "**ZeroClipboard**");
- assert.deepEqual(_clipData, { "text/plain": "zc4evar", "text/x-markdown": "**ZeroClipboard**" }, "`_clipData` contains expected text and custom format");
- ZeroClipboard.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);
- // Assert
- assert.deepEqual(_clipData, {}, "`_clipData` is empty");
- // Arrange & Assert
- _clipData["text/plain"] = "zc4evar";
- _clipData["text/html"] = "<b>Win</b>";
- _clipData["text/x-markdown"] = "**ZeroClipboard**";
- assert.deepEqual(_clipData, {
- "text/plain": "zc4evar",
- "text/html": "<b>Win</b>",
- "text/x-markdown": "**ZeroClipboard**"
- }, "`_clipData` contains all expected data");
- // Act & Assert
- ZeroClipboard.clearData("text/html");
- assert.deepEqual(_clipData, {
- "text/plain": "zc4evar",
- "text/x-markdown": "**ZeroClipboard**"
- }, "`_clipData` had 'text/html' successfully removed");
- // Act & Assert
- ZeroClipboard.clearData();
- assert.deepEqual(_clipData, {}, "`_clipData` had all data successfully removed");
- });
- module("core/api.js unit tests - flash", {
- setup: function() {
- // Store
- originalFlashDetect = ZeroClipboard.isFlashUnusable;
- // Modify
- ZeroClipboard.isFlashUnusable = function() {
- return false;
- };
- },
- teardown: function() {
- // Restore
- ZeroClipboard.isFlashUnusable = originalFlashDetect;
- ZeroClipboard.destroy();
- }
- });
- test("Flash object is ready after emitting `ready`", function(assert) {
- assert.expect(2);
- // Arrange
- ZeroClipboard.isFlashUnusable = function() {
- return false;
- };
- ZeroClipboard.create();
- // Assert, act, assert
- assert.strictEqual(_flashState.ready, false);
- // `emit`-ing event handlers are async (generally) but the internal `ready` state is set synchronously
- ZeroClipboard.emit("ready");
- assert.strictEqual(_flashState.ready, true);
- });
- test("Object has a title", function(assert) {
- assert.expect(1);
- // Arrange
- var currentEl = document.getElementById("d_clip_button");
- ZeroClipboard.create();
- // Act
- ZeroClipboard.activate(currentEl);
- // Assert
- assert.strictEqual(TestUtils.getHtmlBridge().getAttribute("title"), "Click me to copy to clipboard.");
- // Revert
- ZeroClipboard.deactivate();
- });
- test("Object has no title", function(assert) {
- assert.expect(1);
- // Arrange
- var currentEl = document.getElementById("d_clip_button_no_title");
- ZeroClipboard.create();
- // Act
- ZeroClipboard.activate(currentEl);
- // Assert
- assert.ok(!TestUtils.getHtmlBridge().getAttribute("title"));
- // Revert
- ZeroClipboard.deactivate();
- });
- test("Object has data-clipboard-text", function(assert) {
- assert.expect(3);
- // Arrange
- var currentEl = document.getElementById("d_clip_button");
- ZeroClipboard.create();
- // Act
- ZeroClipboard.activate(currentEl);
- var pendingText = ZeroClipboard.emit("copy");
- // Assert
- assert.deepEqual(_clipData, { "text/plain": "Copy me!" });
- assert.deepEqual(pendingText, { "text": "Copy me!" });
- assert.deepEqual(_clipDataFormatMap, { "text": "text/plain" });
- // Revert
- ZeroClipboard.deactivate();
- });
- test("Object has data-clipboard-target textarea", function(assert) {
- assert.expect(3);
- // Arrange
- var currentEl = document.getElementById("d_clip_button_textarea_text");
- var expectedText =
- "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\n"+
- "tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,\n"+
- "quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\n"+
- "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse\n"+
- "cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non\n"+
- "proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
- ZeroClipboard.create();
- // Act
- ZeroClipboard.activate(currentEl);
- var pendingText = ZeroClipboard.emit("copy");
- // Assert
- assert.strictEqual(_clipData["text/plain"].replace(/\r\n/g, "\n"), expectedText);
- assert.strictEqual(pendingText.text.replace(/\r\n/g, "\n"), expectedText);
- assert.deepEqual(_clipDataFormatMap, { "text": "text/plain" });
- // Revert
- ZeroClipboard.deactivate();
- });
- test("Object has data-clipboard-target pre", function(assert) {
- assert.expect(5);
- // Arrange
- var currentEl = document.getElementById("d_clip_button_pre_text");
- var expectedText =
- "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\n"+
- "tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,\n"+
- "quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\n"+
- "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse\n"+
- "cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non\n"+
- "proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
- var expectedHtml =
- "<pre id=\"clipboard_pre\">"+
- "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\n"+
- "tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,\n"+
- "quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\n"+
- "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse\n"+
- "cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non\n"+
- "proident, sunt in culpa qui officia deserunt mollit anim id est laborum."+
- "</pre>";
- ZeroClipboard.create();
- // Act
- ZeroClipboard.activate(currentEl);
- var pendingText = ZeroClipboard.emit("copy");
- // Assert
- assert.strictEqual(_clipData["text/plain"].replace(/\r\n/g, "\n"), expectedText);
- assert.strictEqual(
- _clipData["text/html"]
- .replace(/\r\n/g, "\n")
- .replace(/<\/?pre(?:\s+[^>]*)?>/gi, function($0) { return $0.toLowerCase(); }),
- expectedHtml
- );
- assert.strictEqual(pendingText.text.replace(/\r\n/g, "\n"), expectedText);
- assert.strictEqual(
- pendingText.html
- .replace(/\r\n/g, "\n")
- .replace(/<\/?pre(?:\s+[^>]*)?>/gi, function($0) { return $0.toLowerCase(); }),
- expectedHtml
- );
- assert.deepEqual(_clipDataFormatMap, { "text": "text/plain", "html": "text/html" });
- // Revert
- ZeroClipboard.deactivate();
- });
- test("Object has data-clipboard-target input", function(assert) {
- assert.expect(3);
- // Arrange
- var currentEl = document.getElementById("d_clip_button_input_text");
- ZeroClipboard.create();
- // Act
- ZeroClipboard.activate(currentEl);
- var pendingText = ZeroClipboard.emit("copy");
- // Assert
- assert.deepEqual(_clipData, { "text/plain": "Clipboard Text" });
- assert.deepEqual(pendingText, { "text": "Clipboard Text" });
- assert.deepEqual(_clipDataFormatMap, { "text": "text/plain" });
- // Revert
- ZeroClipboard.deactivate();
- });
- test("Object doesn't have data-clipboard-text", function(assert) {
- assert.expect(1);
- // Arrange
- var currentEl = document.getElementById("d_clip_button_no_text");
- ZeroClipboard.create();
- // Act
- ZeroClipboard.activate(currentEl);
- // Assert
- assert.ok(!TestUtils.getHtmlBridge().getAttribute("data-clipboard-text"));
- // Revert
- ZeroClipboard.deactivate();
- });
- test("Calculations based on borderWidth never return NaN", function(assert) {
- assert.expect(4);
- // Arrange
- var currentEl = document.getElementById("d_clip_button");
- ZeroClipboard.create();
- // Act
- ZeroClipboard.activate(currentEl);
- // Assert
- assert.strictEqual(/^-?[0-9\.]+px$/.test(TestUtils.getHtmlBridge().style.top), true);
- assert.strictEqual(/^-?[0-9\.]+px$/.test(TestUtils.getHtmlBridge().style.left), true);
- assert.strictEqual(/^-?[0-9\.]+px$/.test(TestUtils.getHtmlBridge().style.width), true);
- assert.strictEqual(/^-?[0-9\.]+px$/.test(TestUtils.getHtmlBridge().style.height), true);
- });
- })(QUnit.module, QUnit.test);
|