blob: dc52bfbcfc323186f49f094de9f396384efeac6c [file] [log] [blame]
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:hooks/hooks.dart';
import 'package:hooks/src/utils/datetime.dart';
import 'package:test/test.dart';
void main() {
test('BuildOutputBuilder->JSON->BuildOutput', () {
final assets = [
for (int i = 0; i < 3; i++)
EncodedAsset('my-asset-type', {'a-$i': 'v-$i'}),
];
final uris = [for (int i = 0; i < 3; ++i) Uri.file('path$i')];
final before = DateTime.now().roundDownToSeconds();
final builder = BuildOutputBuilder();
final after = DateTime.now().roundDownToSeconds();
builder.dependencies.add(uris.first);
builder.dependencies.addAll(uris.skip(1).toList());
builder.assets.addEncodedAsset(assets.first);
builder.assets.addEncodedAsset(
assets.skip(2).first,
routing: const ToBuildHooks(),
);
builder.assets.addEncodedAsset(
assets.skip(1).first,
routing: const ToLinkHook('package:linker1'),
);
builder.assets.addEncodedAssets(assets.skip(2).take(2).toList());
builder.assets.addEncodedAssets(
assets.take(2),
routing: const ToBuildHooks(),
);
builder.assets.addEncodedAssets(
assets.skip(4).toList(),
routing: const ToLinkHook('package:linker2'),
);
final input = BuildOutput(builder.json);
expect(input.timestamp.compareTo(before), greaterThanOrEqualTo(0));
expect(input.timestamp.compareTo(after), lessThanOrEqualTo(0));
expect(
input.timestamp.isAtSameMomentAs(input.timestamp.roundDownToSeconds()),
true,
);
// The JSON format of the build output.
final expectedJson = <String, Object?>{
'dependencies': ['path0', 'path1', 'path2'],
'assets': [
{
'encoding': {'a-0': 'v-0'},
'type': 'my-asset-type',
},
{
'encoding': {'a-2': 'v-2'},
'type': 'my-asset-type',
},
],
'assets_for_build': [
{
'encoding': {'a-2': 'v-2'},
'type': 'my-asset-type',
},
{
'encoding': {'a-0': 'v-0'},
'type': 'my-asset-type',
},
{
'encoding': {'a-1': 'v-1'},
'type': 'my-asset-type',
},
],
'assets_for_linking': {
'package:linker1': [
{
'encoding': {'a-1': 'v-1'},
'type': 'my-asset-type',
},
],
'package:linker2': <Object?>[],
},
'status': 'success',
'timestamp': input.timestamp.toString(),
};
expect(input.json, equals(expectedJson));
});
for (final version in ['9001.0.0', '0.0.1']) {
test('BuildOutput version $version', () {
expect(() => BuildOutput({'version': version}), isNot(throwsException));
});
}
}