name:
tests/Formulas/InfoTest.ts
-rw-r--r--
9331
1import {
2 NA,
3 ISTEXT,
4 ISLOGICAL,
5 ISNUMBER,
6 ISNONTEXT,
7 ISEMAIL,
8 ISURL,
9 N,
10 ISREF,
11 ERRORTYPE,
12 ISBLANK,
13 ISERR,
14 ISERROR,
15 ISNA,
16 IFERROR,
17 TYPE,
18 COLUMN,
19 ROW,
20 ISFORMULA
21} from "../../src/Formulas/Info";
22import * as ERRORS from "../../src/Errors";
23import {
24 assertEquals,
25 catchAndAssertEquals,
26 test
27} from "../Utils/Asserts";
28import {
29 Cell
30} from "../../src/Cell";
31import {
32 RefError,
33 NullError,
34 NAError,
35 DivZeroError,
36 ValueError,
37 NameError,
38 NumError
39} from "../../src/Errors";
40
41
42test("NA", function(){
43 catchAndAssertEquals(function() {
44 NA();
45 }, ERRORS.NA_ERROR);
46});
47
48test("ISTEXT", function(){
49 assertEquals(ISTEXT("str"), true);
50 assertEquals(ISTEXT(["str"]), true);
51 assertEquals(ISTEXT(9), false);
52 assertEquals(ISTEXT(false), false);
53 catchAndAssertEquals(function() {
54 ISTEXT.apply(this, []);
55 }, ERRORS.NA_ERROR);
56});
57
58test("ISLOGICAL", function(){
59 assertEquals(ISLOGICAL("str"), false);
60 assertEquals(ISLOGICAL(9), false);
61 assertEquals(ISLOGICAL(false), true);
62 assertEquals(ISLOGICAL(true), true);
63 catchAndAssertEquals(function() {
64 ISLOGICAL.apply(this, []);
65 }, ERRORS.NA_ERROR);
66});
67
68test("ISNUMBER", function(){
69 assertEquals(ISNUMBER("str"), false);
70 assertEquals(ISNUMBER(9), true);
71 assertEquals(ISNUMBER(false), false);
72 assertEquals(ISNUMBER(true), false);
73 catchAndAssertEquals(function() {
74 ISNUMBER.apply(this, []);
75 }, ERRORS.NA_ERROR);
76});
77
78test("ISNONTEXT", function(){
79 assertEquals(ISNONTEXT("str"), false);
80 assertEquals(ISNONTEXT(["str"]), false);
81 assertEquals(ISNONTEXT(9), true);
82 assertEquals(ISNONTEXT(false), true);
83 catchAndAssertEquals(function() {
84 ISNONTEXT.apply(this, []);
85 }, ERRORS.NA_ERROR);
86});
87
88test("ISEMAIL", function(){
89 assertEquals(ISEMAIL("str"), false);
90 assertEquals(ISEMAIL("[email protected]"), true);
91 assertEquals(ISEMAIL("[email protected]"), true);
92 assertEquals(ISEMAIL("[email protected]"), true);
93 assertEquals(ISEMAIL("[email protected]"), true);
94 assertEquals(ISEMAIL("[email protected]"), true);
95 catchAndAssertEquals(function() {
96 ISEMAIL.apply(this, []);
97 }, ERRORS.NA_ERROR);
98});
99
100test("ISURL", function(){
101 assertEquals(ISURL("http://google.com"), true);
102 assertEquals(ISURL("google.com"), true);
103 assertEquals(ISURL("www.google.com"), true);
104 assertEquals(ISURL("http://localhost"), true);
105 assertEquals(ISURL("http://localhost/"), true);
106 assertEquals(ISURL("https://10.1.1.255:8080"), true);
107 assertEquals(ISURL("http://example.w3.org/path%20with%20spaces.html"), true);
108 assertEquals(ISURL("http://example.w3.org/%20"), true);
109 assertEquals(ISURL("ftp://ftp.is.co.za/rfc/rfc1808.txt"), true);
110 assertEquals(ISURL("ftp://ftp.is.co.za/../../../rfc/rfc1808.txt"), true);
111 assertEquals(ISURL("http://www.ietf.org/rfc/rfc2396.txt"), true);
112 assertEquals(ISURL("ldap://[2001:db8::7]/c=GB?objectClass?one"), true);
113 assertEquals(ISURL("mailto:[email protected]"), true);
114 assertEquals(ISURL("news:comp.infosystems.www.servers.unix"), true);
115 assertEquals(ISURL("tel:+1-816-555-1212"), true);
116 assertEquals(ISURL("telnet://192.0.2.16:80/"), true);
117 assertEquals(ISURL("urn:oasis:names:specification:docbook:dtd:xml:4.1.2"), true);
118 catchAndAssertEquals(function() {
119 ISURL.apply(this, []);
120 }, ERRORS.NA_ERROR);
121});
122
123test("N", function(){
124 assertEquals(N("10"), 10);
125 assertEquals(N(10), 10);
126 assertEquals(N(true), 1);
127 assertEquals(N(false), 0);
128 assertEquals(N(["10", "str"]), 10);
129 catchAndAssertEquals(function() {
130 NA.apply(this, []);
131 }, ERRORS.NA_ERROR);
132});
133
134test("ISREF", function(){
135 assertEquals(ISREF("10"), false);
136 assertEquals(ISREF(false), false);
137 assertEquals(ISREF(new Cell("A1")), true);
138 assertEquals(ISREF([new Cell("A1"), new Cell("A2"), new Cell("A3")]), true);
139 catchAndAssertEquals(function() {
140 ISREF.apply(this, []);
141 }, ERRORS.NA_ERROR);
142});
143
144test("ERRORTYPE", function(){
145 let errorCell = new Cell("A1");
146 errorCell.setError(new NAError("error"));
147 assertEquals(ERRORTYPE(new NullError("error")), 1);
148 assertEquals(ERRORTYPE(new DivZeroError("error")), 2);
149 assertEquals(ERRORTYPE(new ValueError("error")), 3);
150 assertEquals(ERRORTYPE(new RefError("error")), 4);
151 assertEquals(ERRORTYPE(new NameError("error")), 5);
152 assertEquals(ERRORTYPE(new NumError("error")), 6);
153 assertEquals(ERRORTYPE(new NAError("error")), 7);
154 assertEquals(ERRORTYPE(errorCell), 7);
155 catchAndAssertEquals(function() {
156 ERRORTYPE.apply(this, []);
157 }, ERRORS.NA_ERROR);
158 catchAndAssertEquals(function() {
159 ERRORTYPE(10);
160 }, ERRORS.NA_ERROR);
161});
162
163
164test("ISBLANK", function(){
165 assertEquals(ISBLANK(10), false);
166 assertEquals(ISBLANK([]), false);
167 assertEquals(ISBLANK(undefined), true);
168 assertEquals(ISBLANK(Cell.BuildFrom("A1", 10)), false);
169 assertEquals(ISBLANK(new Cell("A1")), true);
170 catchAndAssertEquals(function() {
171 ISBLANK.apply(this, [])
172 }, ERRORS.NA_ERROR);
173});
174
175
176test("ISERR", function(){
177 let errorCell = new Cell("A1");
178 errorCell.setError(new DivZeroError("err"));
179 assertEquals(ISERR(errorCell), true);
180 assertEquals(ISERR(Cell.BuildFrom("A1", 10)), false);
181 assertEquals(ISERR(10), false);
182 assertEquals(ISERR([]), true);
183 assertEquals(ISERR(new NAError("error")), false);
184 assertEquals(ISERR(new DivZeroError("error")), true);
185 assertEquals(ISERR(new NameError("error")), true);
186 assertEquals(ISERR(new RefError("error")), true);
187 catchAndAssertEquals(function() {
188 ISERR.apply(this, [])
189 }, ERRORS.NA_ERROR);
190});
191
192
193test("ISERROR", function(){
194 let errorCell = new Cell("A1");
195 errorCell.setError(new DivZeroError("err"));
196 assertEquals(ISERROR(errorCell), true);
197 assertEquals(ISERROR(Cell.BuildFrom("A1", 10)), false);
198 assertEquals(ISERROR(new Cell("A1")), false);
199 assertEquals(ISERROR("10"), false);
200 assertEquals(ISERROR(10), false);
201 assertEquals(ISERROR([]), true);
202 assertEquals(ISERROR(new NAError("error")), true);
203 assertEquals(ISERROR(new DivZeroError("error")), true);
204 assertEquals(ISERROR(new NameError("error")), true);
205 assertEquals(ISERROR(new RefError("error")), true);
206 catchAndAssertEquals(function() {
207 ISERROR.apply(this, [])
208 }, ERRORS.NA_ERROR);
209});
210
211
212test("ISNA", function(){
213 let errorCell = new Cell("A1");
214 errorCell.setError(new NAError("err"));
215 assertEquals(ISNA(errorCell), true);
216 assertEquals(ISNA(Cell.BuildFrom("A1", 10)), false);
217 assertEquals(ISNA(new Cell("A1")), false);
218 assertEquals(ISNA("10"), false);
219 assertEquals(ISNA(10), false);
220 assertEquals(ISNA([]), false);
221 assertEquals(ISNA(new NAError("error")), true);
222 assertEquals(ISNA(new DivZeroError("error")), false);
223 assertEquals(ISNA(new NameError("error")), false);
224 assertEquals(ISNA(new RefError("error")), false);
225 catchAndAssertEquals(function() {
226 ISNA.apply(this, [])
227 }, ERRORS.NA_ERROR);
228});
229
230
231test("IFERROR", function(){
232 let errorCell = new Cell("A1");
233 errorCell.setError(new NAError("err"));
234 assertEquals(IFERROR(errorCell, 10), 10);
235 assertEquals(IFERROR(new NAError("err")), null);
236 assertEquals(IFERROR(new NAError("err"), 10), 10);
237 assertEquals(IFERROR(10), 10);
238 assertEquals(IFERROR(10, false), 10);
239 assertEquals(IFERROR(false, 10), false);
240 assertEquals(IFERROR(Cell.BuildFrom("A1", 10), "abc"), Cell.BuildFrom("A1", 10));
241 assertEquals(IFERROR(new Cell("A1")), new Cell("A1"));
242 catchAndAssertEquals(function() {
243 IFERROR.apply(this, []);
244 }, ERRORS.NA_ERROR);
245});
246
247
248test("TYPE", function(){
249 assertEquals(TYPE(44), 1);
250 assertEquals(TYPE("str"), 2);
251 assertEquals(TYPE(false), 4);
252 assertEquals(TYPE(new NAError("err")), 16);
253 assertEquals(TYPE([1, 2, 3]), 64);
254 let errorCell = new Cell("A1");
255 errorCell.setError(new NAError("err"));
256 assertEquals(TYPE(errorCell), 16);
257 assertEquals(TYPE(Cell.BuildFrom("A1", 1)), 1);
258 assertEquals(TYPE(Cell.BuildFrom("A1", "string")), 2);
259 assertEquals(TYPE(Cell.BuildFrom("A1", false)), 4);
260 assertEquals(TYPE(new Cell("A1")), 1);
261 catchAndAssertEquals(function() {
262 TYPE.apply(this, [])
263 }, ERRORS.NA_ERROR);
264});
265
266
267test("COLUMN", function(){
268 assertEquals(COLUMN(new Cell("A1")), 1);
269 assertEquals(COLUMN(new Cell("A2")), 1);
270 assertEquals(COLUMN(new Cell("B1")), 2);
271 assertEquals(COLUMN(new Cell("C1")), 3);
272 catchAndAssertEquals(function() {
273 COLUMN(10)
274 }, ERRORS.NA_ERROR);
275 catchAndAssertEquals(function() {
276 COLUMN.apply(this, [])
277 }, ERRORS.NA_ERROR);
278});
279
280test("ROW", function(){
281 assertEquals(ROW(new Cell("A1")), 1);
282 assertEquals(ROW(new Cell("A2")), 2);
283 assertEquals(ROW(new Cell("A3")), 3);
284 assertEquals(ROW(new Cell("M3")), 3);
285 catchAndAssertEquals(function() {
286 ROW(10)
287 }, ERRORS.NA_ERROR);
288 catchAndAssertEquals(function() {
289 ROW.apply(this, [])
290 }, ERRORS.NA_ERROR);
291});
292
293test("ISFORMULA", function(){
294 let c = new Cell("A1");
295 c.setValue("=SUM(10, 10)");
296 assertEquals(ISFORMULA(c), true);
297 assertEquals(ISFORMULA(new Cell("M5")), false);
298 catchAndAssertEquals(function() {
299 ISFORMULA.apply(this, [])
300 }, ERRORS.NA_ERROR);
301 catchAndAssertEquals(function() {
302 ISFORMULA(10);
303 }, ERRORS.NA_ERROR);
304 catchAndAssertEquals(function() {
305 ISFORMULA("str");
306 }, ERRORS.NA_ERROR);
307 catchAndAssertEquals(function() {
308 ISFORMULA([]);
309 }, ERRORS.REF_ERROR);
310 catchAndAssertEquals(function() {
311 ISFORMULA(false);
312 }, ERRORS.NA_ERROR);
313});