tests: Add unit test for highlighter
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2033>
This commit is contained in:
parent
3d8b866a9d
commit
a4b6b07d78
@ -10,7 +10,17 @@ run_test = configure_file(
|
|||||||
testenv = environment()
|
testenv = environment()
|
||||||
testenv.set('GSETTINGS_SCHEMA_DIR', join_paths(meson.build_root(), 'data'))
|
testenv.set('GSETTINGS_SCHEMA_DIR', join_paths(meson.build_root(), 'data'))
|
||||||
|
|
||||||
foreach test : ['insertSorted', 'jsParse', 'markup', 'params', 'url', 'versionCompare']
|
tests = [
|
||||||
|
'highlighter',
|
||||||
|
'insertSorted',
|
||||||
|
'jsParse',
|
||||||
|
'markup',
|
||||||
|
'params',
|
||||||
|
'url',
|
||||||
|
'versionCompare',
|
||||||
|
]
|
||||||
|
|
||||||
|
foreach test : tests
|
||||||
test(test, run_test,
|
test(test, run_test,
|
||||||
args: 'unit/@0@.js'.format(test),
|
args: 'unit/@0@.js'.format(test),
|
||||||
env: testenv,
|
env: testenv,
|
||||||
|
106
tests/unit/highlighter.js
Normal file
106
tests/unit/highlighter.js
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
|
// Test cases for SearchResult description match highlighter
|
||||||
|
|
||||||
|
const JsUnit = imports.jsUnit;
|
||||||
|
const Pango = imports.gi.Pango;
|
||||||
|
|
||||||
|
const Environment = imports.ui.environment;
|
||||||
|
Environment.init();
|
||||||
|
|
||||||
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
|
const tests = [
|
||||||
|
{ input: 'abc cba',
|
||||||
|
terms: null,
|
||||||
|
output: 'abc cba' },
|
||||||
|
{ input: 'abc cba',
|
||||||
|
terms: [],
|
||||||
|
output: 'abc cba' },
|
||||||
|
{ input: 'abc cba',
|
||||||
|
terms: [''],
|
||||||
|
output: 'abc cba' },
|
||||||
|
{ input: 'abc cba',
|
||||||
|
terms: ['a'],
|
||||||
|
output: '<b>a</b>bc cb<b>a</b>' },
|
||||||
|
{ input: 'abc cba',
|
||||||
|
terms: ['a', 'a'],
|
||||||
|
output: '<b>a</b>bc cb<b>a</b>' },
|
||||||
|
{ input: 'CaSe InSenSiTiVe',
|
||||||
|
terms: ['cas', 'sens'],
|
||||||
|
output: '<b>CaS</b>e In<b>SenS</b>iTiVe' },
|
||||||
|
{ input: 'This contains the < character',
|
||||||
|
terms: null,
|
||||||
|
output: 'This contains the < character' },
|
||||||
|
{ input: 'Don\'t',
|
||||||
|
terms: ['t'],
|
||||||
|
output: 'Don'<b>t</b>' },
|
||||||
|
{ input: 'Don\'t',
|
||||||
|
terms: ['n\'t'],
|
||||||
|
output: 'Do<b>n't</b>' },
|
||||||
|
{ input: 'Don\'t',
|
||||||
|
terms: ['o', 't'],
|
||||||
|
output: 'D<b>o</b>n'<b>t</b>' },
|
||||||
|
{ input: 'salt&pepper',
|
||||||
|
terms: ['salt'],
|
||||||
|
output: '<b>salt</b>&pepper' },
|
||||||
|
{ input: 'salt&pepper',
|
||||||
|
terms: ['salt', 'alt'],
|
||||||
|
output: '<b>salt</b>&pepper' },
|
||||||
|
{ input: 'salt&pepper',
|
||||||
|
terms: ['pepper'],
|
||||||
|
output: 'salt&<b>pepper</b>' },
|
||||||
|
{ input: 'salt&pepper',
|
||||||
|
terms: ['salt', 'pepper'],
|
||||||
|
output: '<b>salt</b>&<b>pepper</b>' },
|
||||||
|
{ input: 'salt&pepper',
|
||||||
|
terms: ['t', 'p'],
|
||||||
|
output: 'sal<b>t</b>&<b>p</b>e<b>p</b><b>p</b>er' },
|
||||||
|
{ input: 'salt&pepper',
|
||||||
|
terms: ['t', '&', 'p'],
|
||||||
|
output: 'sal<b>t</b><b>&</b><b>p</b>e<b>p</b><b>p</b>er' },
|
||||||
|
{ input: 'salt&pepper',
|
||||||
|
terms: ['e'],
|
||||||
|
output: 'salt&p<b>e</b>pp<b>e</b>r' },
|
||||||
|
{ input: 'salt&pepper',
|
||||||
|
terms: ['&a', '&am', '&', '&'],
|
||||||
|
output: 'salt&pepper' },
|
||||||
|
{ input: '&&&&&',
|
||||||
|
terms: ['a'],
|
||||||
|
output: '&&&&&' },
|
||||||
|
{ input: '&;&;&;&;&;',
|
||||||
|
terms: ['a'],
|
||||||
|
output: '&;&;&;&;&;' },
|
||||||
|
{ input: '&;&;&;&;&;',
|
||||||
|
terms: [';'],
|
||||||
|
output: '&<b>;</b>&<b>;</b>&<b>;</b>&<b>;</b>&<b>;</b>' },
|
||||||
|
{ input: '&',
|
||||||
|
terms: ['a'],
|
||||||
|
output: '&<b>a</b>mp;' }
|
||||||
|
];
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (let i = 0; i < tests.length; i++) {
|
||||||
|
let highlighter = new Util.Highlighter(tests[i].terms);
|
||||||
|
let output = highlighter.highlight(tests[i].input);
|
||||||
|
|
||||||
|
JsUnit.assertEquals(`Test ${i + 1} highlight ` +
|
||||||
|
`"${tests[i].terms}" in "${tests[i].input}"`,
|
||||||
|
output, tests[i].output);
|
||||||
|
|
||||||
|
let parsed = false;
|
||||||
|
try {
|
||||||
|
Pango.parse_markup(output, -1, '');
|
||||||
|
parsed = true;
|
||||||
|
} catch (e) {}
|
||||||
|
JsUnit.assertEquals(`Test ${i + 1} is valid markup`, true, parsed);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
if (typeof(e.isJsUnitException) != 'undefined'
|
||||||
|
&& e.isJsUnitException)
|
||||||
|
{
|
||||||
|
if (e.comment)
|
||||||
|
log(`Error in: ${e.comment}`);
|
||||||
|
}
|
||||||
|
throw e;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user