projects/genea/out/js/spectrum-1.8.1/test/tests.js
1.
// Spectrum Colorpicker Tests
2.
// https://github.com/bgrins/spectrum
3.
// Author: Brian Grinstead
4.
// License: MIT
5.
 
6.
// Pretend like the color inputs aren't supported for initial load.
7.
$.fn.spectrum.inputTypeColorSupport = function () {
8.
  return false;
9.
};
10.
 
11.
QUnit.module("Initialization");
12.
 
13.
QUnit.test("jQuery Plugin Can Be Created", function (assert) {
14.
  var el = $("<input id='spec' />").spectrum();
15.
 
16.
  assert.ok(el.attr("id") === "spec", "Element returned from plugin");
17.
 
18.
  el.spectrum("set", "red");
19.
  assert.equal(el.spectrum("get").toName(), "red", "Basic color setting");
20.
 
21.
  assert.equal(
22.
    el.spectrum("option", "showInput"),
23.
    false,
24.
    "Undefined option is false."
25.
  );
26.
 
27.
  el.spectrum({ showInput: true });
28.
 
29.
  assert.equal(
30.
    el.spectrum("option", "showInput"),
31.
    true,
32.
    "Double initialized spectrum is destroyed before recreating."
33.
  );
34.
 
35.
  el.spectrum("destroy");
36.
 
37.
  assert.equal(
38.
    el.spectrum("container"),
39.
    el,
40.
    "After destroying spectrum, string function returns input."
41.
  );
42.
});
43.
 
44.
QUnit.test("Polyfill", function (assert) {
45.
  var el = $("#type-color-on-page");
46.
  assert.ok(
47.
    el.spectrum("get").toHex,
48.
    "The input[type=color] has been initialized on load"
49.
  );
50.
  el.spectrum("destroy");
51.
 
52.
  // Pretend like the color inputs are supported.
53.
  $.fn.spectrum.inputTypeColorSupport = function () {
54.
    return true;
55.
  };
56.
 
57.
  el = $("<input type='color' value='red' />").spectrum({
58.
    allowEmpty: true,
59.
  });
60.
  el.spectrum("set", null);
61.
  assert.ok(el.spectrum("get"), "input[type] color does not allow null values");
62.
  el.spectrum("destroy");
63.
});
64.
 
65.
QUnit.test("Per-element Options Are Read From Data Attributes", function (
66.
  assert
67.
) {
68.
  var el = $("<input id='spec' data-show-alpha='true' />").spectrum();
69.
 
70.
  assert.equal(
71.
    el.spectrum("option", "showAlpha"),
72.
    true,
73.
    "Took showAlpha value from data attribute"
74.
  );
75.
 
76.
  el.spectrum("destroy");
77.
 
78.
  var changeDefault = $("<input id='spec' data-show-alpha='false' />").spectrum(
79.
    {
80.
      showAlpha: true,
81.
    }
82.
  );
83.
 
84.
  assert.equal(
85.
    changeDefault.spectrum("option", "showAlpha"),
86.
    true,
87.
    "Took showAlpha value from options arg"
88.
  );
89.
 
90.
  changeDefault.spectrum("destroy");
91.
 
92.
  var noData = $("<input id='spec' />").spectrum({
93.
    showAlpha: true,
94.
  });
95.
 
96.
  assert.equal(
97.
    noData.spectrum("option", "showAlpha"),
98.
    true,
99.
    "Kept showAlpha without data attribute"
100.
  );
101.
 
102.
  noData.spectrum("destroy");
103.
});
104.
 
105.
QUnit.test("Events Fire", function (assert) {
106.
  assert.expect(4);
107.
  var count = 0;
108.
  var el = $("<input id='spec' />").spectrum();
109.
 
110.
  el.on("beforeShow.spectrum", function (e) {
111.
    // Cancel the event the first time
112.
    if (count === 0) {
113.
      assert.ok(true, "Cancel beforeShow");
114.
      count++;
115.
      return false;
116.
    }
117.
 
118.
    assert.equal(count, 1, "Allow beforeShow");
119.
    count++;
120.
  });
121.
 
122.
  el.on("show.spectrum", function (e) {
123.
    assert.equal(count, 2, "Show");
124.
    count++;
125.
  });
126.
 
127.
  el.on("hide.spectrum", function (e) {
128.
    assert.equal(count, 3, "Hide");
129.
    count++;
130.
  });
131.
 
132.
  el.on("move.spectrum", function (e) {
133.
    assert.ok(false, "Change should not fire from `move` call");
134.
  });
135.
 
136.
  el.on("change", function (e, color) {
137.
    assert.ok(false, "Change should not fire from `set` call");
138.
  });
139.
 
140.
  el.spectrum("show");
141.
  el.spectrum("show");
142.
  el.spectrum("hide");
143.
 
144.
  el.spectrum("set", "red");
145.
  el.spectrum("destroy");
146.
});
147.
 
148.
QUnit.test("Events Fire (text input change)", function (assert) {
149.
  assert.expect(3);
150.
  var count = 0;
151.
  var el = $("<input id='spec' />").spectrum({
152.
    showInput: true,
153.
  });
154.
  el.on("move.spectrum", function (e, color) {
155.
    assert.equal(count, 0, "Move fires when input changes");
156.
    count++;
157.
  });
158.
 
159.
  el.on("change.spectrum", function (e, color) {
160.
    assert.equal(
161.
      count,
162.
      2,
163.
      "Change should not fire when input changes, only when chosen"
164.
    );
165.
    count++;
166.
  });
167.
 
168.
  el.spectrum("container").find(".sp-input").val("blue").trigger("change");
169.
  count++;
170.
  el.spectrum("container").find(".sp-choose").click();
171.
  el.spectrum("destroy");
172.
 
173.
  assert.equal(count, 3, "All events fired");
174.
});
175.
 
176.
QUnit.test("Escape hides the colorpicker", function (assert) {
177.
  assert.expect(1);
178.
  var el = $("<input id='spec' />").spectrum();
179.
  el.on("hide.spectrum", function (e) {
180.
    assert.ok(true, "Hide event should fire");
181.
  });
182.
 
183.
  // Simulate an escape before showing -- should do nothing
184.
  var e = jQuery.Event("keydown");
185.
  e.keyCode = 27;
186.
  $(document).trigger(e);
187.
 
188.
  el.spectrum("show");
189.
 
190.
  // Simulate an escape after showing -- should call the hide handler
191.
  $(document).trigger(e);
192.
 
193.
  el.spectrum("destroy");
194.
});
195.
 
196.
QUnit.test("Dragging", function (assert) {
197.
  var el = $("<input id='spec' />").spectrum();
198.
  var hueSlider = el.spectrum("container").find(".sp-hue");
199.
 
200.
  assert.ok(hueSlider.length, "There is a hue slider");
201.
 
202.
  hueSlider.trigger("mousedown");
203.
 
204.
  assert.ok($("body").hasClass("sp-dragging"), "The body has dragging class");
205.
 
206.
  hueSlider.trigger("mouseup");
207.
 
208.
  assert.ok(
209.
    !$("body").hasClass("sp-dragging"),
210.
    "The body does not have a dragging class"
211.
  );
212.
 
213.
  el.spectrum("destroy");
214.
});
215.
 
216.
QUnit.module("Defaults");
217.
 
218.
QUnit.test("Default Color Is Set By Input Value", function (assert) {
219.
  var red = $("<input id='spec' value='red' />").spectrum();
220.
  assert.equal(red.spectrum("get").toName(), "red", "Basic color setting");
221.
 
222.
  var noColor = $("<input id='spec' value='not a color' />").spectrum();
223.
  assert.equal(
224.
    noColor.spectrum("get").toHex(),
225.
    "000000",
226.
    "Defaults to black with an invalid color"
227.
  );
228.
 
229.
  var noValue = $("<input id='spec' />").spectrum();
230.
  assert.equal(
231.
    noValue.spectrum("get").toHex(),
232.
    "000000",
233.
    "Defaults to black with no value set"
234.
  );
235.
 
236.
  var noValueHex3 = $("<input id='spec' />").spectrum({
237.
    preferredFormat: "hex3",
238.
  });
239.
  assert.equal(
240.
    noValueHex3.spectrum("get").toHex(true),
241.
    "000",
242.
    "Defaults to 3 char hex with no value set"
243.
  );
244.
  assert.equal(
245.
    noValueHex3.spectrum("get").toString(),
246.
    "#000",
247.
    "Defaults to 3 char hex with no value set"
248.
  );
249.
 
250.
  red.spectrum("destroy");
251.
  noColor.spectrum("destroy");
252.
  noValue.spectrum("destroy");
253.
  noValueHex3.spectrum("destroy");
254.
});
255.
 
256.
QUnit.module("Palettes");
257.
 
258.
QUnit.test("Palette Events Fire In Correct Order ", function (assert) {
259.
  assert.expect(4);
260.
  var el = $("<input id='spec' value='red' />").spectrum({
261.
    showPalette: true,
262.
    palette: [["red", "green", "blue"]],
263.
    move: function () {},
264.
  });
265.
 
266.
  var count = 0;
267.
  el.on("move.spectrum", function (e) {
268.
    assert.equal(count, 0, "move fires before change");
269.
    count++;
270.
  });
271.
 
272.
  el.on("change.spectrum", function (e) {
273.
    assert.equal(count, 1, "change fires after move");
274.
    count++;
275.
  });
276.
 
277.
  el.spectrum("container").find(".sp-thumb-el:last-child").click();
278.
  assert.equal(count, 1, "Change event hasn't fired after palette click");
279.
 
280.
  el.spectrum("container").find(".sp-choose").click();
281.
  assert.equal(count, 2, "Change event has fired after choose button click");
282.
 
283.
  el.spectrum("destroy");
284.
});
285.
 
286.
QUnit.test("Palette click events work", function (assert) {
287.
  assert.expect(7);
288.
 
289.
  var moveCount = 0;
290.
  var moves = ["blue", "green", "red"];
291.
  var changeCount = 0;
292.
 
293.
  var el = $("<input id='spec' value='orange' />")
294.
    .spectrum({
295.
      showPalette: true,
296.
      preferredFormat: "name",
297.
      palette: [["red", "green", "blue"]],
298.
      show: function (c) {
299.
        assert.equal(c.toName(), "orange", "correct shown color");
300.
      },
301.
      move: function (c) {
302.
        assert.equal(
303.
          c.toName(),
304.
          moves[moveCount],
305.
          "Move # " + moveCount + " is correct"
306.
        );
307.
        moveCount++;
308.
      },
309.
      change: function (c) {
310.
        assert.equal(changeCount, 0, "Only one change happens");
311.
        assert.equal(c.toName(), "red");
312.
        changeCount++;
313.
      },
314.
    })
315.
    .spectrum("show");
316.
 
317.
  el.spectrum("container").find(".sp-thumb-el:nth-child(3)").click();
318.
  el.spectrum("container")
319.
    .find(".sp-thumb-el:nth-child(2) .sp-thumb-inner")
320.
    .click();
321.
  el.spectrum("container")
322.
    .find(".sp-thumb-el:nth-child(1) .sp-thumb-inner")
323.
    .click();
324.
  el.spectrum("container").find(".sp-choose").click();
325.
 
326.
  assert.equal(el.val(), "red", "Element's value is set");
327.
  el.spectrum("destroy");
328.
});
329.
 
330.
QUnit.test("Palette doesn't changes don't stick if cancelled", function (
331.
  assert
332.
) {
333.
  assert.expect(4);
334.
 
335.
  var moveCount = 0;
336.
  var moves = ["blue", "green", "red", "orange"];
337.
  var changeCount = 0;
338.
 
339.
  var el = $("<input id='spec' value='orange' />")
340.
    .spectrum({
341.
      showPalette: true,
342.
      preferredFormat: "name",
343.
      palette: [["red", "green", "blue"]],
344.
      move: function (c) {
345.
        assert.equal(
346.
          c.toName(),
347.
          moves[moveCount],
348.
          "Move # " + moveCount + " is correct"
349.
        );
350.
        moveCount++;
351.
      },
352.
      change: function (c) {
353.
        assert.ok(false, "No change fires");
354.
      },
355.
    })
356.
    .spectrum("show");
357.
 
358.
  el.spectrum("container").find(".sp-thumb-el:nth-child(3)").click();
359.
  el.spectrum("container").find(".sp-thumb-el:nth-child(2)").click();
360.
  el.spectrum("container").find(".sp-thumb-el:nth-child(1)").click();
361.
  el.spectrum("container").find(".sp-cancel").click();
362.
 
363.
  assert.equal(el.val(), "orange", "Element's value is the same");
364.
  el.spectrum("destroy");
365.
});
366.
 
367.
QUnit.test(
368.
  "hideAfterPaletteSelect: Palette stays open after color select when false",
369.
  function (assert) {
370.
    var el = $("<input id='spec' value='orange' />").spectrum({
371.
      showPalette: true,
372.
      hideAfterPaletteSelect: false,
373.
      palette: [["red", "green", "blue"]],
374.
    });
375.
 
376.
    el.spectrum("show");
377.
    el.spectrum("container").find(".sp-thumb-el:nth-child(1)").click();
378.
 
379.
    assert.ok(
380.
      !el.spectrum("container").hasClass("sp-hidden"),
381.
      "palette is still visible after color selection"
382.
    );
383.
    el.spectrum("destroy");
384.
  }
385.
);
386.
 
387.
QUnit.test(
388.
  "hideAfterPaletteSelect: Palette closes after color select when true",
389.
  function (assert) {
390.
    assert.expect(2);
391.
    var el = $("<input id='spec' value='orange' />").spectrum({
392.
      showPalette: true,
393.
      hideAfterPaletteSelect: true,
394.
      change: function (c) {
395.
        assert.equal(c.toName(), "red", "change fires");
396.
      },
397.
      palette: [["red", "green", "blue"]],
398.
    });
399.
 
400.
    el.spectrum("show");
401.
    el.spectrum("container").find(".sp-thumb-el:nth-child(1)").click();
402.
 
403.
    assert.ok(
404.
      el.spectrum("container").hasClass("sp-hidden"),
405.
      "palette is still hidden after color selection"
406.
    );
407.
    el.spectrum("destroy");
408.
  }
409.
);
410.
 
411.
QUnit.test("Local Storage Is Limited ", function (assert) {
412.
  var el = $("<input id='spec' value='red' />").spectrum({
413.
    localStorageKey: "spectrum.tests",
414.
    palette: [["#ff0", "#0ff"]],
415.
    maxSelectionSize: 3,
416.
  });
417.
 
418.
  el.spectrum("set", "#f00");
419.
  el.spectrum("set", "#e00");
420.
  el.spectrum("set", "#d00");
421.
  el.spectrum("set", "#c00");
422.
  el.spectrum("set", "#b00");
423.
  el.spectrum("set", "#a00");
424.
 
425.
  assert.equal(
426.
    localStorage["spectrum.tests"],
427.
    "rgb(204, 0, 0);rgb(187, 0, 0);rgb(170, 0, 0)",
428.
    "Local storage array has been limited"
429.
  );
430.
 
431.
  el.spectrum("set", "#ff0");
432.
  el.spectrum("set", "#0ff");
433.
 
434.
  assert.equal(
435.
    localStorage["spectrum.tests"],
436.
    "rgb(204, 0, 0);rgb(187, 0, 0);rgb(170, 0, 0)",
437.
    "Local storage array did not get changed by selecting palette items"
438.
  );
439.
  el.spectrum("destroy");
440.
});
441.
 
442.
QUnit.module("Options");
443.
 
444.
QUnit.test("allowEmpty", function (assert) {
445.
  var el = $("<input value='red' />").spectrum({
446.
    allowEmpty: true,
447.
  });
448.
  el.spectrum("set", null);
449.
  assert.ok(
450.
    !el.spectrum("get"),
451.
    "input[type] color does not allow null values"
452.
  );
453.
  el.spectrum("destroy");
454.
 
455.
  el = $("<input value='red' />").spectrum();
456.
  el.spectrum("set", null);
457.
  assert.ok(el.spectrum("get"), "input[type] color does not allow null values");
458.
  el.spectrum("destroy");
459.
});
460.
 
461.
QUnit.test("clickoutFiresChange", function (assert) {
462.
  var el = $("<input value='red' />").spectrum({
463.
    clickoutFiresChange: false,
464.
  });
465.
  el.spectrum("show");
466.
  assert.equal(el.spectrum("get").toName(), "red", "Color is initialized");
467.
  el.spectrum("set", "orange");
468.
  assert.equal(el.spectrum("get").toName(), "orange", "Color is set");
469.
  $(document).click();
470.
  assert.equal(
471.
    el.spectrum("get").toName(),
472.
    "red",
473.
    "Color is reverted after clicking 'cancel'"
474.
  );
475.
  el.spectrum("destroy");
476.
 
477.
  // Try again with default behavior (clickoutFiresChange = true)
478.
  el = $("<input value='red' />").spectrum();
479.
  el.spectrum("show");
480.
  assert.equal(el.spectrum("get").toName(), "red", "Color is initialized");
481.
  el.spectrum("set", "orange");
482.
  assert.equal(el.spectrum("get").toName(), "orange", "Color is set");
483.
  $(document).click();
484.
  assert.equal(
485.
    el.spectrum("get").toName(),
486.
    "orange",
487.
    "Color is changed after clicking out"
488.
  );
489.
  el.spectrum("destroy");
490.
});
491.
 
492.
QUnit.test("replacerClassName", function (assert) {
493.
  var el = $("<input />").appendTo("body").spectrum({
494.
    replacerClassName: "test",
495.
  });
496.
  assert.ok(
497.
    el.next(".sp-replacer").hasClass("test"),
498.
    "Replacer class has been applied"
499.
  );
500.
  el.spectrum("destroy").remove();
501.
});
502.
 
503.
QUnit.test("containerClassName", function (assert) {
504.
  var el = $("<input />").appendTo("body").spectrum({
505.
    containerClassName: "test",
506.
  });
507.
  assert.ok(
508.
    el.spectrum("container").hasClass("test"),
509.
    "Container class has been applied"
510.
  );
511.
  el.spectrum("destroy").remove();
512.
});
513.
 
514.
QUnit.test("Options Can Be Set and Gotten Programmatically", function (assert) {
515.
  var spec = $("<input id='spec' />").spectrum({
516.
    color: "#ECC",
517.
    flat: true,
518.
    showInput: true,
519.
    className: "full-spectrum",
520.
    showInitial: true,
521.
    showPalette: true,
522.
    showSelectionPalette: true,
523.
    maxPaletteSize: 10,
524.
    preferredFormat: "hex",
525.
    localStorageKey: "spectrum.example",
526.
    palette: [["red"], ["green"]],
527.
  });
528.
 
529.
  var allOptions = spec.spectrum("option");
530.
  assert.equal(
531.
    allOptions.flat,
532.
    true,
533.
    "Fetching all options provides accurate value"
534.
  );
535.
 
536.
  var singleOption = spec.spectrum("option", "className");
537.
  assert.equal(
538.
    singleOption,
539.
    "full-spectrum",
540.
    "Fetching a single option returns that value"
541.
  );
542.
 
543.
  spec.spectrum("option", "className", "changed");
544.
  singleOption = spec.spectrum("option", "className");
545.
  assert.equal(
546.
    singleOption,
547.
    "changed",
548.
    "Changing an option then fetching it is updated"
549.
  );
550.
 
551.
  var numPaletteElements = spec
552.
    .spectrum("container")
553.
    .find(".sp-palette-row:not(.sp-palette-row-selection) .sp-thumb-el").length;
554.
  assert.equal(numPaletteElements, 2, "Two palette elements to start");
555.
  spec.spectrum("option", "palette", [["red"], ["green"], ["blue"]]);
556.
  var optPalette = spec.spectrum("option", "palette");
557.
  assert.deepEqual(
558.
    optPalette,
559.
    [["red"], ["green"], ["blue"]],
560.
    "Changing an option then fetching it is updated"
561.
  );
562.
  numPaletteElements = spec
563.
    .spectrum("container")
564.
    .find(".sp-palette-row:not(.sp-palette-row-selection) .sp-thumb-el").length;
565.
  assert.equal(numPaletteElements, 3, "Three palette elements after updating");
566.
 
567.
  var appendToDefault = $("<input />").spectrum({});
568.
 
569.
  var container = $("<div id='c' />").appendTo("body");
570.
  var appendToOther = $("<input />").spectrum({
571.
    appendTo: container,
572.
  });
573.
 
574.
  var appendToParent = $("<input />").appendTo("#c").spectrum({
575.
    appendTo: "parent",
576.
  });
577.
 
578.
  var appendToOtherFlat = $("<input />").spectrum({
579.
    appendTo: container,
580.
    flat: true,
581.
  });
582.
 
583.
  assert.equal(
584.
    appendToDefault.spectrum("container").parent()[0],
585.
    document.body,
586.
    "Appended to body by default"
587.
  );
588.
 
589.
  assert.equal(
590.
    appendToOther.spectrum("container").parent()[0],
591.
    container[0],
592.
    "Can be appended to another element"
593.
  );
594.
 
595.
  assert.equal(
596.
    appendToOtherFlat.spectrum("container").parent()[0],
597.
    $(appendToOtherFlat).parent()[0],
598.
    "Flat CANNOT be appended to another element, will be same as input"
599.
  );
600.
 
601.
  assert.equal(
602.
    appendToParent.spectrum("container").parent()[0],
603.
    container[0],
604.
    "Passing 'parent' to appendTo works as expected"
605.
  );
606.
 
607.
  // Issue #70 - https://github.com/bgrins/spectrum/issues/70
608.
  assert.equal(
609.
    spec.spectrum("option", "showPalette"),
610.
    true,
611.
    "showPalette is true by default"
612.
  );
613.
  spec.spectrum("option", "showPalette", false);
614.
 
615.
  assert.equal(
616.
    spec.spectrum("option", "showPalette"),
617.
    false,
618.
    "showPalette is false after setting showPalette"
619.
  );
620.
  spec.spectrum("option", "showPaletteOnly", true);
621.
 
622.
  assert.equal(
623.
    spec.spectrum("option", "showPaletteOnly"),
624.
    true,
625.
    "showPaletteOnly is true after setting showPaletteOnly"
626.
  );
627.
  assert.equal(
628.
    spec.spectrum("option", "showPalette"),
629.
    true,
630.
    "showPalette is true after setting showPaletteOnly"
631.
  );
632.
 
633.
  spec.spectrum("destroy");
634.
  appendToDefault.spectrum("destroy");
635.
  appendToOther.spectrum("destroy");
636.
  appendToOtherFlat.spectrum("destroy");
637.
  appendToParent.spectrum("destroy").remove();
638.
  delete window.localStorage["spectrum.example"];
639.
  container.remove();
640.
});
641.
 
642.
QUnit.test("Show Input works as expected", function (assert) {
643.
  var el = $("<input />").spectrum({
644.
    showInput: true,
645.
    color: "red",
646.
  });
647.
  var input = el.spectrum("container").find(".sp-input");
648.
 
649.
  assert.equal(input.val(), "red", "Input is set to color by default");
650.
  input.val("").trigger("change");
651.
 
652.
  assert.ok(
653.
    input.hasClass("sp-validation-error"),
654.
    "Input has validation error class after being emptied."
655.
  );
656.
 
657.
  input.val("red").trigger("change");
658.
 
659.
  assert.ok(
660.
    !input.hasClass("sp-validation-error"),
661.
    "Input does not have validation error class after being reset to original color."
662.
  );
663.
 
664.
  assert.equal(
665.
    el.spectrum("get").toHexString(),
666.
    "#ff0000",
667.
    "Color is still red"
668.
  );
669.
  el.spectrum("destroy");
670.
});
671.
 
672.
QUnit.test("Toggle Picker Area button works as expected", function (assert) {
673.
  var div = $(
674.
      "<div style='position:absolute; right:0; height:20px; width:150px'>"
675.
    )
676.
      .appendTo("body")
677.
      .show(),
678.
    el = $("<input />").appendTo(div);
679.
  el.spectrum({
680.
    showInput: true,
681.
    showPaletteOnly: true,
682.
    togglePaletteOnly: true,
683.
    color: "red",
684.
  });
685.
 
686.
  var spectrum = el.spectrum("container").show(),
687.
    toggle = spectrum.find(".sp-palette-toggle"),
688.
    picker = spectrum.find(".sp-picker-container"),
689.
    palette = spectrum.find(".sp-palette-container");
690.
 
691.
  // Open the Colorpicker
692.
  el.spectrum("show");
693.
  assert.equal(
694.
    picker.is(":hidden"),
695.
    true,
696.
    "The picker area is hidden by default."
697.
  );
698.
  assert.ok(
699.
    spectrum.hasClass("sp-palette-only"),
700.
    "The 'palette-only' class is enabled."
701.
  );
702.
 
703.
  // Click the Picker area Toggle button to show the Picker
704.
  toggle.click();
705.
 
706.
  assert.equal(
707.
    picker.is(":hidden"),
708.
    false,
709.
    "After toggling, the picker area is visible."
710.
  );
711.
  assert.ok(
712.
    !spectrum.hasClass("sp-palette-only"),
713.
    "The 'palette-only' class is disabled."
714.
  );
715.
  assert.equal(
716.
    Math.round(picker.offset().top),
717.
    Math.round(palette.offset().top),
718.
    "The picker area is next to the palette."
719.
  );
720.
 
721.
  // Click the toggle again to hide the picker
722.
  toggle.trigger("click");
723.
 
724.
  assert.equal(
725.
    picker.is(":hidden"),
726.
    true,
727.
    "After toggling again, the picker area is hidden."
728.
  );
729.
  assert.ok(
730.
    spectrum.hasClass("sp-palette-only"),
731.
    "And the 'palette-only' class is enabled."
732.
  );
733.
 
734.
  // Cleanup
735.
  el.spectrum("hide");
736.
  el.spectrum("destroy");
737.
  el.remove();
738.
  div.remove();
739.
});
740.
 
741.
QUnit.test("Tooltip is formatted based on preferred format", function (assert) {
742.
  var el = $("<input />").spectrum({
743.
    showInput: true,
744.
    color: "red",
745.
    showPalette: true,
746.
    palette: [["red", "rgba(255, 255, 255, .5)", "rgb(0, 0, 255)"]],
747.
  });
748.
  el.spectrum("show");
749.
 
750.
  function getTitlesString() {
751.
    return el
752.
      .spectrum("container")
753.
      .find(".sp-thumb-el")
754.
      .map(function () {
755.
        return this.getAttribute("title");
756.
      })
757.
      .toArray()
758.
      .join(" ");
759.
  }
760.
 
761.
  assert.equal(
762.
    getTitlesString(),
763.
    "rgb(255, 0, 0) rgba(255, 255, 255, 0.5) rgb(0, 0, 255)",
764.
    "Titles use rgb format by default"
765.
  );
766.
 
767.
  el.spectrum("option", "preferredFormat", "hex");
768.
  assert.equal(
769.
    getTitlesString(),
770.
    "#ff0000 #ffffff #0000ff",
771.
    "Titles are updated to hex"
772.
  );
773.
  assert.equal(
774.
    el.spectrum("get").toString(),
775.
    "#ff0000",
776.
    "Value's format is updated"
777.
  );
778.
 
779.
  el.spectrum("option", "preferredFormat", "hex6");
780.
  assert.equal(
781.
    getTitlesString(),
782.
    "#ff0000 #ffffff #0000ff",
783.
    "Titles are updated to hex6"
784.
  );
785.
  assert.equal(
786.
    el.spectrum("get").toString(),
787.
    "#ff0000",
788.
    "Value's format is updated"
789.
  );
790.
 
791.
  el.spectrum("option", "preferredFormat", "hex3");
792.
  assert.equal(
793.
    getTitlesString(),
794.
    "#f00 #fff #00f",
795.
    "Titles are updated to hex3"
796.
  );
797.
  assert.equal(
798.
    el.spectrum("get").toString(),
799.
    "#f00",
800.
    "Value's format is updated"
801.
  );
802.
 
803.
  el.spectrum("option", "preferredFormat", "name");
804.
  assert.equal(
805.
    getTitlesString(),
806.
    "red #ffffff blue",
807.
    "Titles are updated to name"
808.
  );
809.
  assert.equal(
810.
    el.spectrum("get").toString(),
811.
    "red",
812.
    "Value's format is updated"
813.
  );
814.
 
815.
  el.spectrum("option", "preferredFormat", "hsv");
816.
  assert.equal(
817.
    getTitlesString(),
818.
    "hsv(0, 100%, 100%) hsva(0, 0%, 100%, 0.5) hsv(240, 100%, 100%)",
819.
    "Titles are updated to hsv"
820.
  );
821.
  assert.equal(
822.
    el.spectrum("get").toString(),
823.
    "hsv(0, 100%, 100%)",
824.
    "Value's format is updated"
825.
  );
826.
 
827.
  el.spectrum("option", "preferredFormat", "hsl");
828.
  assert.equal(
829.
    getTitlesString(),
830.
    "hsl(0, 100%, 50%) hsla(0, 0%, 100%, 0.5) hsl(240, 100%, 50%)",
831.
    "Titles are updated to hsl"
832.
  );
833.
  assert.equal(
834.
    el.spectrum("get").toString(),
835.
    "hsl(0, 100%, 50%)",
836.
    "Value's format is updated"
837.
  );
838.
 
839.
  el.spectrum("option", "preferredFormat", "rgb");
840.
  assert.equal(
841.
    getTitlesString(),
842.
    "rgb(255, 0, 0) rgba(255, 255, 255, 0.5) rgb(0, 0, 255)",
843.
    "Titles are updated to rgb"
844.
  );
845.
  assert.equal(
846.
    el.spectrum("get").toString(),
847.
    "rgb(255, 0, 0)",
848.
    "Value's format is updated"
849.
  );
850.
 
851.
  el.spectrum("destroy");
852.
});
853.
 
854.
QUnit.module("Methods");
855.
 
856.
QUnit.test("Methods work as described", function (assert) {
857.
  var el = $("<input id='spec' />").spectrum();
858.
 
859.
  // Method - show
860.
  el.spectrum("show");
861.
  assert.ok(el.spectrum("container").is(":visible"), "Spectrum is visible");
862.
 
863.
  // Method - hide
864.
  el.spectrum("hide");
865.
  assert.ok(
866.
    el.spectrum("container").not(":visible"),
867.
    "Spectrum is no longer visible"
868.
  );
869.
 
870.
  // Method - toggle
871.
  el.spectrum("toggle");
872.
  assert.ok(
873.
    el.spectrum("container").is(":visible"),
874.
    "Spectrum is visible after toggle"
875.
  );
876.
 
877.
  el.spectrum("toggle");
878.
  assert.ok(
879.
    el.spectrum("container").not(":visible"),
880.
    "Spectrum is no longer visible after toggle"
881.
  );
882.
 
883.
  // Method - set / get
884.
  el.spectrum("set", "orange");
885.
  var color = el.spectrum("get", "color");
886.
 
887.
  assert.ok(
888.
    color.toHexString() == "#ffa500",
889.
    "Color has been set and gotten as hex"
890.
  );
891.
  assert.ok(
892.
    color.toName() == "orange",
893.
    "Color has been set and gotten as name"
894.
  );
895.
  assert.ok(
896.
    color.toHsvString() == "hsv(39, 100%, 100%)",
897.
    "Color has been set and gotten as hsv"
898.
  );
899.
  assert.ok(
900.
    color.toRgbString() == "rgb(255, 165, 0)",
901.
    "Color has been set and gotten as rgb"
902.
  );
903.
  assert.ok(
904.
    color.toHslString() == "hsl(39, 100%, 50%)",
905.
    "Color has been set and gotten as hsl"
906.
  );
907.
  assert.ok(
908.
    (function () {
909.
      var i, argb, a;
910.
      for (i = 0; i < 16; i++) {
911.
        argb = "0" + i.toString(16) + "000000";
912.
        a = Math.round(
913.
          el.spectrum("set", argb).spectrum("get").getAlpha() * 255
914.
        );
915.
        if (a != i) {
916.
          return false;
917.
        }
918.
      }
919.
      return true;
920.
    })(),
921.
    "Set and get has preserved alpha resolution"
922.
  );
923.
 
924.
  // Method - container
925.
  assert.ok(
926.
    el.spectrum("container").hasClass("sp-container"),
927.
    "Container can be retrieved"
928.
  );
929.
 
930.
  // Method - disable
931.
  el.spectrum("disable");
932.
  assert.ok(el.is(":disabled"), "Can be disabled");
933.
 
934.
  el.spectrum("show");
935.
  assert.ok(el.not(":visible"), "Cannot show when disabled");
936.
 
937.
  // Method - enable
938.
  el.spectrum("enable");
939.
  assert.ok(!el.is(":disabled"), "Can be enabled");
940.
 
941.
  // Method - reflow
942.
  el.spectrum("reflow");
943.
 
944.
  // Method - throw exception when not existing
945.
  assert.throws(function () {
946.
    el.spectrum("no method");
947.
  }, "Expecting exception to be thrown when calling with no method");
948.
 
949.
  // Method - destroy
950.
  el.spectrum("destroy");
951.
 
952.
  assert.equal(el.spectrum("container"), el, "No usage after being destroyed");
953.
  assert.equal(el.spectrum("get"), el, "No usage after being destroyed");
954.
 
955.
  el.spectrum("destroy");
956.
});
957.
 
958.
// https://github.com/bgrins/spectrum/issues/97
959.
QUnit.test("Change events fire as described", function (assert) {
960.
  assert.expect(0);
961.
  var input = $("<input />");
962.
 
963.
  input.on("change", function () {
964.
    assert.ok(false, "Change should not be fired inside of input change");
965.
  });
966.
 
967.
  input.spectrum({
968.
    color: "red",
969.
    change: function () {
970.
      assert.ok(
971.
        false,
972.
        "Change should not be fired inside of spectrum callback"
973.
      );
974.
    },
975.
  });
976.
 
977.
  input.spectrum("set", "orange");
978.
});
979.
 
980.
QUnit.test(
981.
  "The selectedPalette should be updated in each spectrum instance, when storageKeys are identical.",
982.
  function (assert) {
983.
    delete window.localStorage["spectrum.tests"];
984.
 
985.
    var colorToChoose = "rgb(0, 244, 0)";
986.
    var firstEl = $("<input id='firstEl' value='red' />").spectrum({
987.
      showPalette: true,
988.
      localStorageKey: "spectrum.tests",
989.
    });
990.
    var secondEl = $("<input id='secondEl' value='blue' />").spectrum({
991.
      showPalette: true,
992.
      localStorageKey: "spectrum.tests",
993.
    });
994.
 
995.
    firstEl.spectrum("set", colorToChoose);
996.
 
997.
    secondEl.spectrum("toggle");
998.
 
999.
    var selectedColor = secondEl
1000.
      .spectrum("container")
1001.
      .find('span[data-color="' + colorToChoose + '"]');
1002.
    assert.ok(
1003.
      selectedColor.length > 0,
1004.
      "Selected color is also shown in the others instance's palette."
1005.
    );
1006.
 
1007.
    delete window.localStorage["spectrum.tests"];
1008.
 
1009.
    firstEl.spectrum("destroy");
1010.
    secondEl.spectrum("destroy");
1011.
  }
1012.
);
1013.
 
1014.
QUnit.test(
1015.
  "The selectedPalette should not be updated in spectrum instances that have different storageKeys.",
1016.
  function (assert) {
1017.
    delete window.localStorage["spectrum.test_1"];
1018.
    delete window.localStorage["spectrum.test_2"];
1019.
 
1020.
    var colorToChoose = "rgb(0, 244, 0)";
1021.
    var firstEl = $("<input id='firstEl' value='red' />").spectrum({
1022.
      showPalette: true,
1023.
      localStorageKey: "spectrum.test_1",
1024.
    });
1025.
    var secondEl = $("<input id='secondEl' value='blue' />").spectrum({
1026.
      showPalette: true,
1027.
      localStorageKey: "spectrum.test_2",
1028.
    });
1029.
 
1030.
    firstEl.spectrum("set", colorToChoose);
1031.
 
1032.
    secondEl.spectrum("toggle");
1033.
 
1034.
    var selectedColor = secondEl
1035.
      .spectrum("container")
1036.
      .find('span[data-color="' + colorToChoose + '"]');
1037.
    assert.ok(
1038.
      selectedColor.length === 0,
1039.
      "Selected color should not be available in instances with other storageKey."
1040.
    );
1041.
 
1042.
    firstEl.spectrum("destroy");
1043.
    secondEl.spectrum("destroy");
1044.
 
1045.
    delete window.localStorage["spectrum.test_1"];
1046.
    delete window.localStorage["spectrum.test_2"];
1047.
  }
1048.
);
1049.
 
1050.
QUnit.test("Cancelling reverts color", function (assert) {
1051.
  var el = $("<input value='red' />").spectrum();
1052.
  el.spectrum("show");
1053.
  assert.equal(el.spectrum("get").toName(), "red", "Color is initialized");
1054.
  el.spectrum("set", "orange");
1055.
  assert.equal(el.spectrum("get").toName(), "orange", "Color is set");
1056.
  el.spectrum("container").find(".sp-cancel").click();
1057.
  assert.equal(
1058.
    el.spectrum("get").toName(),
1059.
    "red",
1060.
    "Color is reverted after clicking 'cancel'"
1061.
  );
1062.
  el.spectrum("destroy");
1063.
});
1064.
 
1065.
QUnit.test("Choosing updates the color", function (assert) {
1066.
  var el = $("<input value='red' />").spectrum();
1067.
  el.spectrum("show");
1068.
  assert.equal(el.spectrum("get").toName(), "red", "Color is initialized");
1069.
  el.spectrum("set", "orange");
1070.
  assert.equal(el.spectrum("get").toName(), "orange", "Color is set");
1071.
  el.spectrum("container").find(".sp-choose").click();
1072.
  assert.equal(
1073.
    el.spectrum("get").toName(),
1074.
    "orange",
1075.
    "Color is kept after clicking 'choose'"
1076.
  );
1077.
  el.spectrum("destroy");
1078.
});
1079.
 
1080.
QUnit.test("Custom offset", function (assert) {
1081.
  var el = $("<input value='red' />").spectrum();
1082.
  el.spectrum("show");
1083.
  assert.deepEqual(el.spectrum("container").offset(), { top: 0, left: 0 });
1084.
  el.spectrum("hide");
1085.
  el.spectrum("offset", { top: 10, left: 10 });
1086.
  el.spectrum("show");
1087.
  assert.deepEqual(el.spectrum("container").offset(), { top: 10, left: 10 });
1088.
  el.spectrum("hide");
1089.
  el.spectrum("offset", null);
1090.
  el.spectrum("show");
1091.
  assert.deepEqual(el.spectrum("container").offset(), { top: 0, left: 0 });
1092.
  el.spectrum("hide");
1093.
  el.spectrum("destroy");
1094.
 
1095.
  var el2 = $("<input value='red' />").spectrum({
1096.
    offset: { top: 100, left: 100 },
1097.
  });
1098.
  el2.spectrum("show");
1099.
  assert.deepEqual(el2.spectrum("container").offset(), { top: 100, left: 100 });
1100.
  el2.spectrum("hide");
1101.
});
1102.