WIP: Note editing, markdown to html
[oweals/karmaworld.git] / karmaworld / apps / wysihtml5 / static / wysihtml5 / wysihtml-0.4.17 / test / undo_manager_test.js
1 if (wysihtml5.browser.supportsCommand(document, "insertHTML")) {
2
3   module("wysihtml5.UndoManager", {
4     setup: function() {
5       this.textareaElement        = document.createElement("textarea");
6       this.textareaElement.value  = "1";
7
8       document.body.appendChild(this.textareaElement);
9     },
10
11     teardown: function() {
12       var leftover;
13       while (leftover = document.querySelector("iframe.wysihtml5-sandbox, input[name='_wysihtml5_mode']")) {
14         leftover.parentNode.removeChild(leftover);
15       }
16       document.body.removeChild(this.textareaElement);
17     },
18     
19     triggerUndo: function(editor) {
20       this.triggerKey(editor, 90);
21     },
22     
23     triggerRedo: function(editor) {
24       this.triggerKey(editor, 89);
25     },
26     
27     triggerKey: function(editor, keyCode) {
28       var event;
29       try {
30         event = editor.composer.sandbox.getDocument().createEvent("KeyEvents");
31         event.initKeyEvent("keydown", true, true, editor.composer.sandbox.getWindow(), true, false, false, false, keyCode, keyCode);
32       } catch(e) {
33         event = editor.composer.sandbox.getDocument().createEvent("Events");
34         event.initEvent("keydown", true, true);
35         event.ctrlKey = true;
36         event.keyCode = keyCode;
37       }
38       editor.composer.element.dispatchEvent(event);
39     }
40   });
41
42
43   asyncTest("Basic test", function() {
44     expect(5);
45     
46     var that   = this,
47         editor = new wysihtml5.Editor(this.textareaElement);
48     editor.on("load", function() {
49       editor.setValue("1 2").fire("newword:composer");
50       editor.setValue("1 2 3").fire("newword:composer");
51       editor.setValue("1 2 3 4").fire("newword:composer");
52       editor.setValue("1 2 3 4 5");
53
54       that.triggerUndo(editor);
55       equal(editor.getValue(false, false), "1 2 3 4");
56       that.triggerRedo(editor);
57       that.triggerRedo(editor);
58       equal(editor.getValue(false, false), "1 2 3 4 5");
59       that.triggerUndo(editor);
60       that.triggerUndo(editor);
61       equal(editor.getValue(false, false), "1 2 3");
62       that.triggerUndo(editor);
63       that.triggerUndo(editor);
64       equal(editor.getValue(false, false), "1");
65       that.triggerUndo(editor);
66       that.triggerUndo(editor);
67       equal(editor.getValue(false, false), "1");
68       
69       start();
70     });
71   });
72   
73   
74   asyncTest("Test commands", function() {
75     expect(3);
76     
77     var that   = this,
78         editor = new wysihtml5.Editor(this.textareaElement);
79     editor.on("load", function() {
80       editor.setValue("<b>1</b>").fire("beforecommand:composer");
81       editor.setValue("<i><b>1</b></i>").fire("beforecommand:composer");
82       
83       that.triggerUndo(editor);
84       equal(editor.getValue(false, false), "<b>1</b>");
85       that.triggerRedo(editor);
86       equal(editor.getValue(false, false), "<i><b>1</b></i>");
87       that.triggerUndo(editor);
88       that.triggerUndo(editor);
89       equal(editor.getValue(false, false), "1");
90       
91       start();
92     });
93   });
94 }