mirror of
https://github.com/datahub-project/datahub.git
synced 2025-07-23 17:39:59 +00:00
164 lines
3.0 KiB
TypeScript
164 lines
3.0 KiB
TypeScript
import { module, test } from 'qunit';
|
|
import grammar from 'wherehows-web/parsers/autocomplete';
|
|
import { parse } from 'wherehows-web/utils/parsers/parser';
|
|
|
|
const tests = [
|
|
{
|
|
description: '1 Dataset',
|
|
text: 'dataset1',
|
|
result: [
|
|
{
|
|
dataset: 'dataset1'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
description: '2 Datasets',
|
|
text: 'dataset1 dataset2',
|
|
result: [
|
|
{
|
|
dataset: 'dataset1'
|
|
},
|
|
{
|
|
dataset: 'dataset2'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
description: '2 Datasets with AND',
|
|
text: 'dataset1 AND dataset2',
|
|
result: [
|
|
{
|
|
dataset: 'dataset1'
|
|
},
|
|
'AND',
|
|
{
|
|
dataset: 'dataset2'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
description: 'Spaces',
|
|
text: ' dataset1 AND dataset2 ',
|
|
result: [
|
|
{
|
|
dataset: 'dataset1'
|
|
},
|
|
'AND',
|
|
{
|
|
dataset: 'dataset2'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
description: 'Parenthesis1',
|
|
text: ' ( dataset1 AND dataset2 ) ',
|
|
result: [
|
|
[
|
|
{
|
|
dataset: 'dataset1'
|
|
},
|
|
'AND',
|
|
{
|
|
dataset: 'dataset2'
|
|
}
|
|
]
|
|
]
|
|
},
|
|
{
|
|
description: 'Parenthesis2',
|
|
text: ' (dataset1 AND dataset2) OR (dataset3 AND dataset4) ',
|
|
result: [
|
|
[
|
|
{
|
|
dataset: 'dataset1'
|
|
},
|
|
'AND',
|
|
{
|
|
dataset: 'dataset2'
|
|
}
|
|
],
|
|
'OR',
|
|
[
|
|
{
|
|
dataset: 'dataset3'
|
|
},
|
|
'AND',
|
|
{
|
|
dataset: 'dataset4'
|
|
}
|
|
]
|
|
]
|
|
},
|
|
{
|
|
description: 'Facets 1',
|
|
text: ' (name:dataset1 AND dataset2) OR (dataset3 AND dataset4) ',
|
|
result: [
|
|
[
|
|
{
|
|
facetName: 'name',
|
|
facetValue: 'dataset1'
|
|
},
|
|
'AND',
|
|
{
|
|
dataset: 'dataset2'
|
|
}
|
|
],
|
|
'OR',
|
|
[
|
|
{
|
|
dataset: 'dataset3'
|
|
},
|
|
'AND',
|
|
{
|
|
dataset: 'dataset4'
|
|
}
|
|
]
|
|
]
|
|
},
|
|
{
|
|
description: 'Facets 2',
|
|
text: ' (name:dataset1 AND platform:something) OR ( origin:corp AND dataset4 )',
|
|
result: [
|
|
[
|
|
{
|
|
facetName: 'name',
|
|
facetValue: 'dataset1'
|
|
},
|
|
'AND',
|
|
{
|
|
facetName: 'platform',
|
|
facetValue: 'something'
|
|
}
|
|
],
|
|
'OR',
|
|
[
|
|
{
|
|
facetName: 'origin',
|
|
facetValue: 'corp'
|
|
},
|
|
'AND',
|
|
{
|
|
dataset: 'dataset4'
|
|
}
|
|
]
|
|
]
|
|
}
|
|
];
|
|
|
|
module('Unit | Helper | Parsers', function() {
|
|
test('Grammar works as expected', function(assert) {
|
|
tests.forEach(myTest => {
|
|
try {
|
|
const parser = parse(myTest.text.trim(), grammar);
|
|
assert.ok(true, `${myTest.description}: grammar parse correctly`);
|
|
assert.deepEqual(parser.results[0], myTest.result, `${myTest.description}: expected tree match`);
|
|
|
|
assert.equal(parser.results.length, 1, `${myTest.description}: no ambiguity`);
|
|
} catch (e) {
|
|
assert.ok(false, `${myTest.description}: ${e}`);
|
|
}
|
|
});
|
|
});
|
|
});
|