229 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			229 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
			Vendored
		
	
	
	
| /*global ZeroClipboard */
 | |
| 
 | |
| (function(module, test) {
 | |
|   "use strict";
 | |
| 
 | |
|   var originalConfig, originalFlashDetect;
 | |
| 
 | |
|   // Helper functions
 | |
|   var TestUtils = {
 | |
|     getHtmlBridge: function() {
 | |
|       return document.getElementById(ZeroClipboard.config("containerId"));
 | |
|     }
 | |
|   };
 | |
| 
 | |
| 
 | |
|   module("ZeroClipboard.js (built) unit tests - Core", {
 | |
|     setup: function() {
 | |
|       // Store
 | |
|       originalConfig = ZeroClipboard.config();
 | |
|       originalFlashDetect = ZeroClipboard.isFlashUnusable;
 | |
|       // Modify
 | |
|       ZeroClipboard.isFlashUnusable = function() {
 | |
|         return false;
 | |
|       };
 | |
|       ZeroClipboard.config({ swfPath: originalConfig.swfPath.replace(/\/(?:src|test)\/.*$/i, "/dist/ZeroClipboard.swf") });
 | |
|     },
 | |
|     teardown: function() {
 | |
|       // Restore
 | |
|       ZeroClipboard.destroy();
 | |
|       ZeroClipboard.config(originalConfig);
 | |
|       ZeroClipboard.isFlashUnusable = originalFlashDetect;
 | |
|     }
 | |
|   });
 | |
| 
 | |
| 
 | |
|   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 zcJsUrl = rootPath + "dist/ZeroClipboard.js";
 | |
|     var swfPathBasedOnZeroClipboardJsPath = rootPath + "dist/ZeroClipboard.swf";
 | |
| 
 | |
|     // Test that the client has the expected default URL [even if it's not correct]
 | |
|     assert.strictEqual(ZeroClipboard.config("swfPath"), swfPathBasedOnZeroClipboardJsPath);
 | |
|   });
 | |
| 
 | |
| 
 | |
|   test("`destroy` destroys the bridge", function(assert) {
 | |
|     assert.expect(3);
 | |
| 
 | |
|     // Arrange
 | |
|     ZeroClipboard.isFlashUnusable = function() {
 | |
|       return false;
 | |
|     };
 | |
| 
 | |
|     // Assert, arrange, assert, act, assert
 | |
|     assert.equal(TestUtils.getHtmlBridge(), null, "The bridge does not exist before creating a client");
 | |
|     /*jshint nonew:false */
 | |
|     new ZeroClipboard();
 | |
|     assert.notEqual(TestUtils.getHtmlBridge(), null, "The bridge does exist after creating a client");
 | |
|     ZeroClipboard.destroy();
 | |
|     assert.equal(TestUtils.getHtmlBridge(), null, "The bridge does not exist after calling `destroy`");
 | |
|   });
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
|   module("ZeroClipboard.js (built) unit tests - Client", {
 | |
|     setup: function() {
 | |
|       // Store
 | |
|       originalConfig = ZeroClipboard.config();
 | |
|       originalFlashDetect = ZeroClipboard.isFlashUnusable;
 | |
|       // Modify
 | |
|       ZeroClipboard.isFlashUnusable = function() {
 | |
|         return false;
 | |
|       };
 | |
|       ZeroClipboard.config({ swfPath: originalConfig.swfPath.replace(/\/(?:src|test)\/.*$/i, "/dist/ZeroClipboard.swf") });
 | |
|     },
 | |
|     teardown: function() {
 | |
|       // Restore
 | |
|       ZeroClipboard.destroy();
 | |
|       ZeroClipboard.config(originalConfig);
 | |
|       ZeroClipboard.isFlashUnusable = originalFlashDetect;
 | |
|     }
 | |
|   });
 | |
| 
 | |
|   test("`ZeroClipboard` exists", function(assert) {
 | |
|     assert.expect(1);
 | |
| 
 | |
|     // Arrange -> N/A
 | |
| 
 | |
|     // Act -> N/A
 | |
| 
 | |
|     // Assert
 | |
|     assert.ok(ZeroClipboard);
 | |
|   });
 | |
| 
 | |
|   test("Client is created properly", function(assert) {
 | |
|     assert.expect(2);
 | |
| 
 | |
|     // Arrange & Act
 | |
|     var client = new ZeroClipboard();
 | |
| 
 | |
|     // Assert
 | |
|     assert.ok(client);
 | |
|     assert.ok(client.id);
 | |
|   });
 | |
| 
 | |
|   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(), []);
 | |
|   });
 | |
| 
 | |
|   test("Object has a title", function(assert) {
 | |
|     assert.expect(1);
 | |
| 
 | |
|     // Arrange
 | |
|     var client = new ZeroClipboard();
 | |
|     var currentEl = document.getElementById("d_clip_button");
 | |
| 
 | |
|     // Act
 | |
|     client.clip(currentEl);
 | |
|     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 client = new ZeroClipboard();
 | |
|     var currentEl = document.getElementById("d_clip_button_no_title");
 | |
| 
 | |
|     // Act
 | |
|     client.clip(currentEl);
 | |
|     ZeroClipboard.activate(currentEl);
 | |
| 
 | |
|     // Assert
 | |
|     assert.ok(!TestUtils.getHtmlBridge().getAttribute("title"));
 | |
|   });
 | |
| 
 | |
|   test("Object doesn't have data-clipboard-text", function(assert) {
 | |
|     assert.expect(1);
 | |
| 
 | |
|     // Arrange
 | |
|     var client = new ZeroClipboard();
 | |
|     var currentEl = document.getElementById("d_clip_button_no_text");
 | |
| 
 | |
|     // Act
 | |
|     client.clip(currentEl);
 | |
|     ZeroClipboard.activate(currentEl);
 | |
| 
 | |
|     // Assert
 | |
|     assert.ok(!TestUtils.getHtmlBridge().getAttribute("data-clipboard-text"));
 | |
|   });
 | |
| 
 | |
|   test("New client is not the same client (no singleton) but does share the same bridge", function(assert) {
 | |
|     assert.expect(6);
 | |
| 
 | |
|     // Assert, arrange, assert, act, assert
 | |
|     var containerClass = "." + ZeroClipboard.config("containerClass");
 | |
|     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("Calculations based on borderWidth never return NaN", function(assert) {
 | |
|     assert.expect(4);
 | |
| 
 | |
|     // Arrange
 | |
|     var client = new ZeroClipboard();
 | |
|     var currentEl = document.getElementById("d_clip_button");
 | |
| 
 | |
|     // Act
 | |
|     client.clip(currentEl);
 | |
|     ZeroClipboard.activate(currentEl);
 | |
| 
 | |
|     // Assert
 | |
|     var htmlBridge = TestUtils.getHtmlBridge();
 | |
|     assert.strictEqual(/^-?[0-9\.]+px$/.test(htmlBridge.style.top), true);
 | |
|     assert.strictEqual(/^-?[0-9\.]+px$/.test(htmlBridge.style.left), true);
 | |
|     assert.strictEqual(/^-?[0-9\.]+px$/.test(htmlBridge.style.width), true);
 | |
|     assert.strictEqual(/^-?[0-9\.]+px$/.test(htmlBridge.style.height), true);
 | |
|   });
 | |
| 
 | |
|   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`");
 | |
|   });
 | |
| 
 | |
| 
 | |
| })(QUnit.module, QUnit.test);
 | 
