blob: c5a0fbed7997014f183328d4611aca524a256a49 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:io';
import 'package:test/test.dart';
import 'package:codesize/queries/index.dart';
import 'package:codesize/queries/mock_query.dart';
import 'package:codesize/render/ast.dart';
import 'package:codesize/run_queries.dart';
import 'package:codesize/types.dart';
import 'testing_util.dart';
class SimpleQuery extends MockQuery {
SimpleQuery(List<AnyNode> nodes) : super(nodes);
@override
void addReport(Report report) {
if (report.context.name != 'libasync')
throw Exception('Incorrect name ${report.context.name}');
// These values were taken from libasync-default.so.bloaty_report_pb
if (report.compileUnits.length != 15)
throw Exception(
'Incorrect compileUnits.length ${report.compileUnits.length}');
count += 1;
}
@override
void mergeWith(Iterable<Query> others) {
for (final other in others) {
if (other is SimpleQuery) count += other.count;
}
}
int count = 0;
}
void main() {
// See the `//scripts/codesize:bloaty_reports` target in `BUILD.gn`.
Directory testData = locateTestData();
Query mock() => SimpleQuery([]);
group('QueryRunner', () {
test('Empty', () async {
await QueryRunner([mock], numConcurrency: 1).join();
await QueryRunner([mock], numConcurrency: 10).join();
});
test('Run one query', () async {
final runner = QueryRunner([mock], numConcurrency: 2);
await runner.addReport(AnalysisItem(
name: 'libasync',
path: '${testData.path}/libasync-default.so.bloaty_report_pb'));
await runner.join();
expect(runner.queries.first, isA<SimpleQuery>());
// ignore: avoid_as
expect((runner.queries.first as SimpleQuery).count, equals(1));
});
test('Run many queries', () async {
const count = 100;
final runner = QueryRunner([mock], numConcurrency: 2);
await Future.wait(Iterable<int>.generate(count).map((i) =>
runner.addReport(AnalysisItem(
name: 'libasync',
path: '${testData.path}/libasync-default.so.bloaty_report_pb'))));
await runner.join();
expect(runner.queries.first, isA<SimpleQuery>());
// ignore: avoid_as
expect((runner.queries.first as SimpleQuery).count, equals(count));
});
});
}