1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
/* vim: set ts=2 et sw=2 tw=80: */
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
function test() {
waitForExplicitFinish();
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.selectedBrowser.addEventListener("load", function onTabLoad() {
gBrowser.selectedBrowser.removeEventListener("load", onTabLoad, true);
openScratchpad(runTests);
}, true);
content.location = "data:text/html,<p>test run() and display() in Scratchpad";
}
function runTests() {
let sp = gScratchpadWindow.Scratchpad;
let tests = [{
method: "run",
prepare: function* () {
yield inContent(function* () {
content.wrappedJSObject.foobarBug636725 = 1;
});
sp.editor.setText("++window.foobarBug636725");
},
then: function* ([code, , result]) {
is(code, sp.getText(), "code is correct");
let pageResult = yield inContent(function* () {
return content.wrappedJSObject.foobarBug636725;
});
is(result, pageResult,
"result is correct");
is(sp.getText(), "++window.foobarBug636725",
"run() does not change the editor content");
is(pageResult, 2, "run() updated window.foobarBug636725");
}
}, {
method: "display",
prepare: function* () {},
then: function* () {
let pageResult = yield inContent(function* () {
return content.wrappedJSObject.foobarBug636725;
});
is(pageResult, 3, "display() updated window.foobarBug636725");
is(sp.getText(), "++window.foobarBug636725\n/*\n3\n*/",
"display() shows evaluation result in the textbox");
is(sp.editor.getSelection(), "\n/*\n3\n*/", "getSelection is correct");
}
}, {
method: "run",
prepare: function* () {
sp.editor.setText("window.foobarBug636725 = 'a';\n" +
"window.foobarBug636725 = 'b';");
sp.editor.setSelection({ line: 0, ch: 0 }, { line: 0, ch: 29 });
},
then: function* ([code, , result]) {
is(code, "window.foobarBug636725 = 'a';", "code is correct");
is(result, "a", "result is correct");
is(sp.getText(), "window.foobarBug636725 = 'a';\n" +
"window.foobarBug636725 = 'b';",
"run() does not change the textbox value");
let pageResult = yield inContent(function* () {
return content.wrappedJSObject.foobarBug636725;
});
is(pageResult, "a", "run() worked for the selected range");
}
}, {
method: "display",
prepare: function* () {
sp.editor.setText("window.foobarBug636725 = 'c';\n" +
"window.foobarBug636725 = 'b';");
sp.editor.setSelection({ line: 0, ch: 0 }, { line: 0, ch: 22 });
},
then: function* () {
let pageResult = yield inContent(function* () {
return content.wrappedJSObject.foobarBug636725;
});
is(pageResult, "a", "display() worked for the selected range");
is(sp.getText(), "window.foobarBug636725" +
"\n/*\na\n*/" +
" = 'c';\n" +
"window.foobarBug636725 = 'b';",
"display() shows evaluation result in the textbox");
is(sp.editor.getSelection(), "\n/*\na\n*/", "getSelection is correct");
}
}];
runAsyncCallbackTests(sp, tests).then(function () {
ok(sp.editor.somethingSelected(), "something is selected");
sp.editor.dropSelection();
ok(!sp.editor.somethingSelected(), "something is no longer selected");
ok(!sp.editor.getSelection(), "getSelection is empty");
// Test undo/redo.
sp.editor.setText("foo1");
sp.editor.setText("foo2");
is(sp.getText(), "foo2", "editor content updated");
sp.undo();
is(sp.getText(), "foo1", "undo() works");
sp.redo();
is(sp.getText(), "foo2", "redo() works");
finish();
});
}
|