spreadsheet
typeScript/javascript spreadsheet parser, with formulas.
git clone https://git.vogt.world/spreadsheet.git
Log | Files | README.md
← All files
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});