browser/devtools/shared/test/unit/test_undoStack.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:c91900975a31
1 /* -*- Mode: Javascript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=2 et sw=2 tw=80: */
3 /* Any copyright is dedicated to the Public Domain.
4 http://creativecommons.org/publicdomain/zero/1.0/ */
5
6 const Cu = Components.utils;
7 let {Loader} = Cu.import("resource://gre/modules/commonjs/toolkit/loader.js", {});
8
9 let loader = new Loader.Loader({
10 paths: {
11 "": "resource://gre/modules/commonjs/",
12 "devtools": "resource:///modules/devtools",
13 },
14 globals: {},
15 });
16 let require = Loader.Require(loader, { id: "undo-test" })
17
18 let {UndoStack} = require("devtools/shared/undo");
19
20 const MAX_SIZE = 5;
21
22 function run_test()
23 {
24 let str = "";
25 let stack = new UndoStack(MAX_SIZE);
26
27 function add(ch) {
28 stack.do(function() {
29 str += ch;
30 }, function() {
31 str = str.slice(0, -1);
32 });
33 }
34
35 do_check_false(stack.canUndo());
36 do_check_false(stack.canRedo());
37
38 // Check adding up to the limit of the size
39 add("a");
40 do_check_true(stack.canUndo());
41 do_check_false(stack.canRedo());
42
43 add("b");
44 add("c");
45 add("d");
46 add("e");
47
48 do_check_eq(str, "abcde");
49
50 // Check a simple undo+redo
51 stack.undo();
52
53 do_check_eq(str, "abcd");
54 do_check_true(stack.canRedo());
55
56 stack.redo();
57 do_check_eq(str, "abcde")
58 do_check_false(stack.canRedo());
59
60 // Check an undo followed by a new action
61 stack.undo();
62 do_check_eq(str, "abcd");
63
64 add("q");
65 do_check_eq(str, "abcdq");
66 do_check_false(stack.canRedo());
67
68 stack.undo();
69 do_check_eq(str, "abcd");
70 stack.redo();
71 do_check_eq(str, "abcdq");
72
73 // Revert back to the beginning of the queue...
74 while (stack.canUndo()) {
75 stack.undo();
76 }
77 do_check_eq(str, "");
78
79 // Now put it all back....
80 while (stack.canRedo()) {
81 stack.redo();
82 }
83 do_check_eq(str, "abcdq");
84
85 // Now go over the undo limit...
86 add("1");
87 add("2");
88 add("3");
89
90 do_check_eq(str, "abcdq123");
91
92 // And now undoing the whole stack should only undo 5 actions.
93 while (stack.canUndo()) {
94 stack.undo();
95 }
96
97 do_check_eq(str, "abc");
98 }

mercurial