Skip to content

Commit 10239c7

Browse files
authored
Merge pull request #4 from KaiVolland/handle-bad-inputs
Introduces handling of bad/empty input to read and write method
2 parents a4ac616 + 70f8bf3 commit 10239c7

2 files changed

Lines changed: 27 additions & 2 deletions

File tree

src/CqlParser.spec.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { CqlParser } from './CqlParser';
2+
import { Filter } from 'geostyler-style';
23

34
describe('CqlParser', () => {
45
let cqlParser: CqlParser;
@@ -15,6 +16,12 @@ describe('CqlParser', () => {
1516
it('is defined', () => {
1617
expect(cqlParser.read).toBeDefined();
1718
});
19+
it('returns undefined for empty strings', () => {
20+
const cqlFilter1 = undefined;
21+
const cqlFilter2 = '';
22+
expect(cqlParser.read(cqlFilter1)).toBeUndefined();
23+
expect(cqlParser.read(cqlFilter2)).toBeUndefined();
24+
});
1825
it('can read String Comparison Filters', () => {
1926
const cqlFilter = 'Name = Peter';
2027
const got = cqlParser.read(cqlFilter);
@@ -62,6 +69,14 @@ describe('CqlParser', () => {
6269
it('is defined', () => {
6370
expect(cqlParser.write).toBeDefined();
6471
});
72+
it('returns undefined for illegal filters', () => {
73+
const cqlFilter1 = undefined;
74+
const cqlFilter2: Filter = ['=='];
75+
const cqlFilter3: Filter = [];
76+
expect(cqlParser.write(cqlFilter1)).toBeUndefined();
77+
expect(cqlParser.write(cqlFilter2)).toBeUndefined();
78+
expect(cqlParser.write(cqlFilter3)).toBeUndefined();
79+
});
6580
it('can write String Comparison Filters', () => {
6681
const geoStylerFilter = ['==', 'Name', 'Peter'];
6782
const got = cqlParser.write(geoStylerFilter);

src/CqlParser.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -327,20 +327,30 @@ export class CqlParser {
327327
return result;
328328
}
329329

330-
read(text: string): Filter {
330+
read(text: string | undefined): Filter | undefined {
331331
const {
332332
buildAst,
333333
tokenize
334334
} = this;
335+
336+
if (!text || text.length === 0) {
337+
return undefined;
338+
}
339+
335340
return buildAst(tokenize(text));
336341
}
337342

338-
write(filter: Filter): string | undefined {
343+
write(filter: Filter | undefined): string | undefined {
339344
const {
340345
operatorReverseMap,
341346
combinationOperatorsReverseMap,
342347
write
343348
} = this;
349+
350+
if (!Array.isArray(filter) || filter.length < 2) {
351+
return undefined;
352+
}
353+
344354
const operator = filter[0];
345355
const cqlOperator = operatorReverseMap[operator];
346356
switch (operator) {

0 commit comments

Comments
 (0)