blob: 617a3af107f7abee12122464f85b5e188a7733d3 [file] [log] [blame]
import './index';
import { ParamSet, toParamSet, fromParamSet } from 'common-sk/modules/query';
import { QuerySk } from './query-sk';
import { QuerySkPO } from './query-sk_po';
import { setUpElementUnderTest } from '../test_util';
import { assert } from 'chai';
const paramset: ParamSet = {
arch: [
'WASM',
'arm',
'arm64',
'asmjs',
'wasm',
'x86',
'x86_64',
],
bench_type: [
'deserial',
'micro',
'playback',
'recording',
'skandroidcodec',
'skcodec',
'tracing',
],
compiler: [
'Clang',
'EMCC',
'GCC',
],
config: [
'8888',
'f16',
'gl',
'gles',
],
};
describe('query-sk', () => {
const newInstance = setUpElementUnderTest<QuerySk>('query-sk');
let querySk: QuerySk;
let querySkPO: QuerySkPO;
beforeEach(() => {
querySk = newInstance();
querySk.paramset = paramset;
querySkPO = new QuerySkPO(querySk);
});
it('sets the available options via the "paramset" property', async () => {
assert.deepEqual(paramset, await querySkPO.getParamSet());
});
it('can change the selection on the UI via the current_query property', async () => {
const query: ParamSet = {
arch: ['arm', 'x86'],
config: ['!8888'],
compiler: ['~CC'],
};
querySk.current_query = fromParamSet(query);
assert.deepEqual(query, await querySkPO.getCurrentQuery());
});
it('can change the current_query property via the UI', async () => {
const query: ParamSet = {
arch: ['arm', 'x86'],
config: ['!8888'],
compiler: ['~CC'],
};
await querySkPO.setCurrentQuery(query);
assert.deepEqual(fromParamSet(query), querySk.current_query);
});
it('obeys key_order', async () => {
assert.deepEqual(['arch', 'bench_type', 'compiler', 'config'], await querySkPO.getKeys());
// Setting key_order will change the key order.
querySk.key_order = ['config'];
assert.deepEqual(['config', 'arch', 'bench_type', 'compiler'], await querySkPO.getKeys());
// Setting key_order to empty will go back to alphabetical order.
querySk.key_order = [];
assert.deepEqual(['arch', 'bench_type', 'compiler', 'config'], await querySkPO.getKeys());
});
it('obeys filter', async () => {
assert.deepEqual(['arch', 'bench_type', 'compiler', 'config'], await querySkPO.getKeys());
// Setting the filter will change the keys displayed.
await querySkPO.setFilter('cro'); // Only 'micro' in 'bench_type' should match.
// Only key should be bench_type.
assert.deepEqual(['bench_type'], await querySkPO.getKeys());
// Clearing the filter will restore all options.
await querySkPO.clickClearFilter();
assert.deepEqual(['arch', 'bench_type', 'compiler', 'config'], await querySkPO.getKeys());
});
it('only edits displayed values when filter is used.', async () => {
// Make a selection.
querySk.current_query = 'arch=x86';
// Setting the filter will change the keys displayed.
await querySkPO.setFilter('64'); // Only 'arm64' and 'x86_64' in 'arch' should match.
// Only key should be arch.
assert.deepEqual(['arch'], await querySkPO.getKeys());
// Click on 'arch'.
await querySkPO.clickKey('arch');
// Click on the value 'arm64' to add it to the query.
await querySkPO.clickValue('arm64');
// Confirm it gets added.
assert.deepEqual(toParamSet('arch=x86&arch=arm64'), toParamSet(querySk.current_query));
// Click on the value 'arm64' a second time to remove it from the query.
await querySkPO.clickValue('arm64');
// Confirm it gets removed.
assert.deepEqual(toParamSet('arch=x86'), toParamSet(querySk.current_query));
});
it('updates query-values-sk when the current_query property is set', async () => {
// Click on 'arch'.
await querySkPO.clickKey('arch');
// Click on the value 'arm' to add it to the query.
await querySkPO.clickValue('arm');
// Assert that only 'arm' is selected.
assert.deepEqual(['arm'], await querySkPO.getSelectedValues());
// Set selection via current_query.
querySk.current_query = 'arch=x86&arch=x86_64&config=8888';
// Assert that the previous selection is reflected in the UI.
assert.deepEqual(['x86', 'x86_64'], await querySkPO.getSelectedValues());
});
it('rationalizes current_query when set programmatically', async () => {
const validQuery = fromParamSet({
arch: ['arm', 'x86'],
config: ['!8888'],
compiler: ['~CC'],
});
const invalidQuery = fromParamSet({
'arch': ['arm', 'invalid_architecture'],
'invalid_key': ['foo']
});
const invalidQueryRationalized = fromParamSet({ 'arch': ['arm'] });
// Valid queries should remain unaltered.
querySk.current_query = validQuery;
assert.deepEqual(validQuery, querySk.current_query);
assert.deepEqual(validQuery, fromParamSet(await querySkPO.getCurrentQuery()));
// Invalid queries should be rationalized.
querySk.current_query = invalidQuery;
assert.deepEqual(invalidQueryRationalized, querySk.current_query);
assert.deepEqual(invalidQueryRationalized, fromParamSet(await querySkPO.getCurrentQuery()));
});
it('clears the selection when the "Clear Selections" button is clicked', async () => {
const query: ParamSet = {
arch: ['arm', 'x86'],
config: ['!8888'],
compiler: ['~CC'],
};
querySk.current_query = fromParamSet(query);
assert.deepEqual(query, await querySkPO.getCurrentQuery());
await querySkPO.clickClearSelections();
assert.deepEqual('', querySk.current_query);
assert.deepEqual({}, await querySkPO.getCurrentQuery());
});
});