Implement UndoManager's item() method
[WebKit-https.git] / LayoutTests / editing / undomanager / undomanager-item.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>undoManager.item()</title>
5 <script src="../../resources/testharness.js"></script>
6 <script src="../../resources/testharnessreport.js"></script>
7 </head>
8 <body>
9 This tests UndoManager's item() method.
10
11 <div id="edit" contentEditable>Hello</div>
12
13 <script>
14 var undoManager = document.undoManager;
15
16 test(function() {
17     assert_idl_attribute(undoManager, "item");
18 }, "undoManager has item property.");
19
20 var transaction = {"executeAutomatic": function() { }};
21 var transaction2 = {"executeAutomatic": function() { }};
22
23 test(function() {
24     undoManager.transact(transaction);
25     undoManager.transact(transaction2, true);
26     
27     var entry = undoManager.item(0);
28     assert_equals(entry.length, 2);
29     assert_equals(entry[0], transaction);
30     assert_equals(entry[1], transaction2);
31 }, "After two transact calls that are merged into one, item(0) returns an array of "
32     + "the two transactions in the correct order.");
33
34 test(function() {
35     var entry = undoManager.item(1);
36     assert_equals(entry, null);
37 }, "item(1) returns null because it's out of range.");
38
39 test(function() {
40     undoManager.undo();
41
42     var entry = undoManager.item(0);
43     assert_equals(entry.length, 2);
44     assert_equals(entry[0], transaction);
45     assert_equals(entry[1], transaction2);
46 }, "After an undo call, item(0) stills return an array of the two transactions in the correct order.");
47
48 test(function() {
49     undoManager.redo();
50     assert_equals(undoManager.position, 0);
51 }, "After a redo call, undoManager's position is back to 0.");
52
53 test(function() {
54     var range = document.createRange();
55     range.selectNodeContents(document.getElementById("edit"));
56     window.getSelection().addRange(range);
57     document.execCommand("Bold");
58     
59     var entry = undoManager.item(0);
60     assert_equals(entry.length, 1);
61     assert_own_property(entry[0], "label");
62 }, "After executing an editing command, item(0) returns an array of an object with label property.");
63
64 test(function() {
65     var entry = undoManager.item(1);
66     assert_equals(entry.length, 2);
67     assert_equals(entry[0], transaction);
68     assert_equals(entry[1], transaction2);
69 }, "item(1) now returns an array of the two transactions.");
70
71 test(function() {
72     assert_not_equals(undoManager.item(1), undoManager.item(1));
73 }, "item(1) returns a different object than item(1).");
74
75 document.getElementById("edit").style.display = "none";
76 </script>
77 </body>
78 </html>