-
Notifications
You must be signed in to change notification settings - Fork 5.3k
/
javascript_test.js
181 lines (147 loc) · 7.59 KB
/
javascript_test.js
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
if (typeof process !== "undefined") {
require("amd-loader");
}
"use strict";
var EditSession = require("../edit_session").EditSession;
var Tokenizer = require("../tokenizer").Tokenizer;
var JavaScriptMode = require("./javascript").Mode;
var assert = require("../test/assertions");
module.exports = {
setUp : function() {
this.mode = new JavaScriptMode();
},
"test: getTokenizer() (smoke test)" : function() {
var tokenizer = this.mode.getTokenizer();
assert.ok(tokenizer instanceof Tokenizer);
var tokens = tokenizer.getLineTokens("'juhu'", "start").tokens;
assert.equal("string", tokens[0].type);
},
"test: toggle comment lines should prepend '//' to each line" : function() {
var session = new EditSession([" abc", "cde", "fg"]);
session.setTabSize(1);
this.mode.toggleCommentLines("start", session, 0, 1);
assert.equal(["// abc", "// cde", "fg"].join("\n"), session.toString());
},
"test: toggle comment on commented lines should remove leading '//' chars" : function() {
var session = new EditSession(["// abc", "//cde", "fg"]);
session.setTabSize(1);
this.mode.toggleCommentLines("start", session, 0, 1);
assert.equal([" abc", "cde", "fg"].join("\n"), session.toString());
},
"test: toggle comment on all empty lines" : function() {
var session = new EditSession([" ", " ", " "]);
session.setTabSize(1);
this.mode.toggleCommentLines("start", session, 0, 1);
assert.equal([" // ", " // ", " "].join("\n"), session.toString());
},
"test: toggle comment with empty lines" : function() {
var session = new EditSession([
" abc",
"",
" cde",
" fg"]);
var initial = session.toString();
this.mode.toggleCommentLines("start", session, 0, 3);
assert.equal([
" // abc",
"",
" // cde",
" // fg"].join("\n"),
session.toString()
);
this.mode.toggleCommentLines("start", session, 0, 3);
assert.equal(initial, session.toString());
},
"test: toggle comment lines twice should return the original text" : function() {
var session = new EditSession([" abc", "cde", "fg"]);
this.mode.toggleCommentLines("start", session, 0, 2);
this.mode.toggleCommentLines("start", session, 0, 2);
assert.equal([" abc", "cde", "fg"].join("\n"), session.toString());
},
"test: toggle comment on multiple lines with one commented line prepend '//' to each line" : function() {
var session = new EditSession([" // abc", " //cde", " fg"]);
session.setTabSize(1);
this.mode.toggleCommentLines("start", session, 0, 2);
assert.equal([" // // abc", " // //cde", " // fg"].join("\n"), session.toString());
},
"test: toggle comment on a comment line with leading white space": function() {
var session = new EditSession(["//cde", " //fg"]);
this.mode.toggleCommentLines("start", session, 0, 1);
assert.equal(["cde", " fg"].join("\n"), session.toString());
},
"test: toggle comment lines should take tabsize into account" : function() {
var session = new EditSession([" // abc", " // cde", "// fg"]);
session.setTabSize(2);
this.mode.toggleCommentLines("start", session, 0, 2);
assert.equal([" abc", " cde", " fg"].join("\n"), session.toString());
session.setTabSize(4);
this.mode.toggleCommentLines("start", session, 0, 2);
assert.equal(["// abc", "// cde", "// fg"].join("\n"), session.toString());
this.mode.toggleCommentLines("start", session, 0, 2);
assert.equal([" abc", " cde", " fg"].join("\n"), session.toString());
session.insert({row: 0, column: 0}, " ");
this.mode.toggleCommentLines("start", session, 0, 2);
assert.equal(["// abc", "// cde", "// fg"].join("\n"), session.toString());
},
//there doesn't seem to be any way to make this work
"!test: togglecomment on line with one space" : function() {
var session = new EditSession([" abc", " // cde", "// fg"]);
var initialValue = session + "";
session.setTabSize(4);
this.mode.toggleCommentLines("start", session, 0, 0);
this.mode.toggleCommentLines("start", session, 0, 0);
assert.equal(initialValue, session.toString());
},
"test: auto indent after opening brace" : function() {
assert.equal(" ", this.mode.getNextLineIndent("start", "if () {", " "));
},
"test: auto indent after case" : function() {
assert.equal(" ", this.mode.getNextLineIndent("start", "case 'juhu':", " "));
},
"test: no auto indent in object literal" : function() {
assert.equal("", this.mode.getNextLineIndent("start", "{ 'juhu':", " "));
},
"test: no auto indent after opening brace in multi line comment" : function() {
assert.equal("", this.mode.getNextLineIndent("start", "/*if () {", " "));
assert.equal(" ", this.mode.getNextLineIndent("comment", " abcd", " "));
},
"test: no auto indent after opening brace in single line comment" : function() {
assert.equal("", this.mode.getNextLineIndent("start", "//if () {", " "));
assert.equal(" ", this.mode.getNextLineIndent("start", " //if () {", " "));
},
"test: no auto indent should add to existing indent" : function() {
assert.equal(" ", this.mode.getNextLineIndent("start", " if () {", " "));
assert.equal(" ", this.mode.getNextLineIndent("start", " cde", " "));
assert.equal(" ", this.mode.getNextLineIndent("start", "function foo(items) {", " "));
},
"test: special indent in doc comments" : function() {
assert.equal(" * ", this.mode.getNextLineIndent("doc-start", "/**", " "));
assert.equal(" * ", this.mode.getNextLineIndent("doc-start", " /**", " "));
assert.equal(" * ", this.mode.getNextLineIndent("doc-start", " *", " "));
assert.equal(" * ", this.mode.getNextLineIndent("doc-start", " *", " "));
assert.equal(" ", this.mode.getNextLineIndent("doc-start", " abc", " "));
},
"test: no indent after doc comments" : function() {
assert.equal("", this.mode.getNextLineIndent("doc-start", " */", " "));
},
"test: trigger outdent if line is space and new text starts with closing brace" : function() {
assert.ok(this.mode.checkOutdent("start", " ", " }"));
assert.ok(!this.mode.checkOutdent("start", " a ", " }"));
assert.ok(!this.mode.checkOutdent("start", "", "}"));
assert.ok(!this.mode.checkOutdent("start", " ", "a }"));
assert.ok(!this.mode.checkOutdent("start", " }", "}"));
},
"test: auto outdent should indent the line with the same indent as the line with the matching opening brace" : function() {
var session = new EditSession([" function foo() {", " bla", " }"], new JavaScriptMode());
this.mode.autoOutdent("start", session, 2);
assert.equal(" }", session.getLine(2));
},
"test: no auto outdent if no matching brace is found" : function() {
var session = new EditSession([" function foo()", " bla", " }"]);
this.mode.autoOutdent("start", session, 2);
assert.equal(" }", session.getLine(2));
}
};
if (typeof module !== "undefined" && module === require.main) {
require("asyncjs").test.testcase(module.exports).exec();
}