blob: 84035937b30cc3434c10e0afe9d74cc2632f8fac [file] [log] [blame]
import { assert } from 'chai';
import { convertResponseToDataTable, shortenName } from './binary-page-sk';
import { TreeMapDataTableRow } from '../rpc_types';
describe('Binary Page Static Methods', () => {
describe('shortenName()', () => {
it('returns the last segment (the file name)', () => {
const test = (name: string, input: string, expected: string) => {
const actual = shortenName(input);
assert.equal(actual, expected, name);
};
test('empty string is unchanged', '', '');
test('no slashes means unchanged', 'alpha', 'alpha');
test('filepath returns last segment', 'alpha/beta/gamma.cc', 'gamma.cc');
test(
'function is unchanged',
'OT::OffsetTo<>::sanitize<>()',
'OT::OffsetTo<>::sanitize<>()'
);
test(
'Symbol with a period but no slashes is unchanged',
'foo.bar()',
'foo.bar()'
);
});
});
describe('convertResponseToDataTable()', () => {
it('shortens file names', () => {
const inputs: TreeMapDataTableRow[] = [
{ name: 'ROOT', parent: '', size: 0 },
{ name: 'third_party', parent: 'ROOT', size: 0 },
{ name: 'third_party/externals', parent: 'third_party', size: 0 },
{
name: 'third_party/externals/harfbuzz',
parent: 'third_party/externals',
size: 0,
},
{
name: 'third_party/externals/harfbuzz/src',
parent: 'third_party/externals/harfbuzz',
size: 0,
},
{
name: 'third_party/externals/harfbuzz/src/hb-ot-layout.cc',
parent: 'third_party/externals/harfbuzz/src',
size: 0,
},
{
name: 'OT::OffsetTo<>::sanitize<>()',
parent: 'third_party/externals/harfbuzz/src/hb-ot-layout.cc',
size: 11221,
},
{
name: 'OT::ArrayOf<>::sanitize<>()',
parent: 'third_party/externals/harfbuzz/src/hb-ot-layout.cc',
size: 6835,
},
];
const expectedRows = [
['Name', 'Parent', 'Size'],
['ROOT', '', 0],
['third_party', 'ROOT', 0],
['third_party/externals', 'third_party', 0],
['third_party/externals/harfbuzz', 'third_party/externals', 0],
[
'third_party/externals/harfbuzz/src',
'third_party/externals/harfbuzz',
0,
],
['hb-ot-layout.cc', 'third_party/externals/harfbuzz/src', 0], // This was shortened
['OT::OffsetTo<>::sanitize<>()', 'hb-ot-layout.cc', 11221], // As were these usages
['OT::ArrayOf<>::sanitize<>()', 'hb-ot-layout.cc', 6835],
];
const actualRows = convertResponseToDataTable(inputs);
assert.sameDeepOrderedMembers(actualRows, expectedRows);
});
it('does not shorten file names if there are duplicates', () => {
const inputs: TreeMapDataTableRow[] = [
{ name: 'ROOT', parent: '', size: 0 },
{ name: 'third_party', parent: 'ROOT', size: 0 },
{ name: 'third_party/externals', parent: 'third_party', size: 0 },
{
name: 'third_party/externals/harfbuzz',
parent: 'third_party/externals',
size: 0,
},
{
name: 'third_party/externals/harfbuzz/src',
parent: 'third_party/externals/harfbuzz',
size: 0,
},
{
name: 'third_party/externals/harfbuzz/src/hb-ot-layout.cc',
parent: 'third_party/externals/harfbuzz/src',
size: 0,
},
{
name: 'OT::OffsetTo<>::sanitize<>()',
parent: 'third_party/externals/harfbuzz/src/hb-ot-layout.cc',
size: 11221,
},
{
name: 'OT::ArrayOf<>::sanitize<>()',
parent: 'third_party/externals/harfbuzz/src/hb-ot-layout.cc',
size: 6835,
},
{
name: 'third_party/hb-ot-layout.cc',
parent: 'third_party',
size: 117,
},
{
name: 'Merbulate()',
parent: 'third_party/hb-ot-layout.cc',
size: 65,
},
];
const expectedRows = [
['Name', 'Parent', 'Size'],
['ROOT', '', 0],
['third_party', 'ROOT', 0],
['third_party/externals', 'third_party', 0],
['third_party/externals/harfbuzz', 'third_party/externals', 0],
[
'third_party/externals/harfbuzz/src',
'third_party/externals/harfbuzz',
0,
],
['hb-ot-layout.cc', 'third_party/externals/harfbuzz/src', 0], // This was shortened
['OT::OffsetTo<>::sanitize<>()', 'hb-ot-layout.cc', 11221], // As were these usages
['OT::ArrayOf<>::sanitize<>()', 'hb-ot-layout.cc', 6835],
// This file was a duplicate and not shortened
['third_party/hb-ot-layout.cc', 'third_party', 117],
// neither were symbols belonging to it
['Merbulate()', 'third_party/hb-ot-layout.cc', 65],
];
const actualRows = convertResponseToDataTable(inputs);
assert.sameDeepOrderedMembers(actualRows, expectedRows);
});
});
});