blob: 2f45b1f9a01ab73499e9910237cc057f64191e9a [file] [log] [blame]
// Copyright (C) 2021 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import {SLICE_STACK_COLUMN, TableAttrs} from '../common/pivot_table_common';
import {PivotTableHelper} from './pivot_table_helper';
const AVAILABLE_COLUMNS: TableAttrs[] =
[{tableName: 'slice', columns: ['id', 'type', 'dur', SLICE_STACK_COLUMN]}];
const ID_COL_IDX = 0;
const TYPE_COL_IDX = 1;
const DUR_COL_IDX = 2;
const STACK_COL_IDX = 3;
const AVAILABLE_AGGREGATIONS = ['SUM', 'AVG'];
const SUM_AGG_IDX = 0;
const AVG_AGG_IDX = 1;
function createNewHelper() {
return new PivotTableHelper(
'pivotTable', AVAILABLE_COLUMNS, AVAILABLE_AGGREGATIONS, [], []);
}
test('Update selected pivots based on selected indices', () => {
const helper = createNewHelper();
helper.setSelectedPivotTableColumnIndex(ID_COL_IDX);
helper.updatePivotTableColumnOnSelectedIndex();
expect(helper.selectedPivots).toEqual([
{tableName: 'slice', columnName: 'id', isStackPivot: false}
]);
helper.updatePivotTableColumnOnSelectedIndex();
expect(helper.selectedPivots).toEqual([]);
});
test('Update selected aggregations based on selected indices', () => {
const helper = createNewHelper();
helper.togglePivotSelection();
helper.setSelectedPivotTableColumnIndex(DUR_COL_IDX);
helper.setSelectedPivotTableAggregationIndex(SUM_AGG_IDX);
helper.updatePivotTableColumnOnSelectedIndex();
expect(helper.selectedAggregations).toEqual([
{tableName: 'slice', columnName: 'dur', aggregation: 'SUM', order: 'DESC'}
]);
helper.updatePivotTableColumnOnSelectedIndex();
expect(helper.selectedAggregations).toEqual([]);
});
test('Change aggregation sorting based on aggregation index', () => {
const helper = createNewHelper();
helper.togglePivotSelection();
helper.setSelectedPivotTableColumnIndex(DUR_COL_IDX);
helper.setSelectedPivotTableAggregationIndex(SUM_AGG_IDX);
helper.updatePivotTableColumnOnSelectedIndex();
expect(helper.selectedAggregations).toEqual([
{tableName: 'slice', columnName: 'dur', aggregation: 'SUM', order: 'DESC'}
]);
helper.togglePivotTableAggregationSorting(0);
expect(helper.selectedAggregations).toEqual([
{tableName: 'slice', columnName: 'dur', aggregation: 'SUM', order: 'ASC'}
]);
});
test(
'Changing aggregation sorting with invalid index results in an error',
() => {
const helper = createNewHelper();
expect(() => helper.togglePivotTableAggregationSorting(1))
.toThrow('Column index "1" is out of bounds.');
});
test('Reorder columns based on target and destination indices', () => {
const helper = createNewHelper();
helper.setSelectedPivotTableColumnIndex(ID_COL_IDX);
helper.updatePivotTableColumnOnSelectedIndex();
helper.setSelectedPivotTableColumnIndex(TYPE_COL_IDX);
helper.updatePivotTableColumnOnSelectedIndex();
expect(helper.selectedPivots).toEqual([
{tableName: 'slice', columnName: 'id', isStackPivot: false},
{tableName: 'slice', columnName: 'type', isStackPivot: false}
]);
helper.reorderPivotTableDraggedColumn(true, 0, 1);
expect(helper.selectedPivots).toEqual([
{tableName: 'slice', columnName: 'type', isStackPivot: false},
{tableName: 'slice', columnName: 'id', isStackPivot: false}
]);
});
test('Reordering columns with invalid indices results in an error', () => {
const helper = createNewHelper();
expect(() => helper.reorderPivotTableDraggedColumn(true, 0, 1))
.toThrow('Target column index "0" out of bounds.');
});
test('Select column based on attributes', () => {
const helper = createNewHelper();
helper.selectPivotTableColumn({
tableName: 'slice',
columnName: 'dur',
aggregation: 'AVG',
order: 'DESC'
});
expect(helper.isPivot).toEqual(false);
expect(helper.selectedColumnIndex).toEqual(DUR_COL_IDX);
expect(helper.selectedAggregationIndex).toEqual(AVG_AGG_IDX);
});
test('Selecting a column with invalid attributes results in an error', () => {
const helper = createNewHelper();
expect(
() => helper.selectPivotTableColumn(
{tableName: 'foo', columnName: 'bar', isStackPivot: false}))
.toThrow('Selected column "foo bar" not found in availableColumns.');
});
test('Selecting stack column sets isStackPivot', () => {
const helper = createNewHelper();
helper.setSelectedPivotTableColumnIndex(STACK_COL_IDX);
helper.updatePivotTableColumnOnSelectedIndex();
expect(helper.selectedPivots).toEqual([
{tableName: 'slice', columnName: SLICE_STACK_COLUMN, isStackPivot: true}
]);
});