blob: aa6183365838cfc43c13140e8fbf47c5438d9eda [file] [log] [blame]
// Copyright 2013 The Flutter 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' as io;
import 'package:args/args.dart';
import 'package:golden_tests_harvester/golden_tests_harvester.dart';
import 'package:skia_gold_client/skia_gold_client.dart';
final bool _isLocalEnvWithoutSkiaGold =
!SkiaGoldClient.isAvailable(environment: io.Platform.environment) ||
!SkiaGoldClient.isLuciEnv(environment: io.Platform.environment);
final ArgParser _argParser = ArgParser()
..addFlag(
'help',
abbr: 'h',
negatable: false,
help: 'Prints this usage information.',
)
..addFlag(
'dry-run',
defaultsTo: _isLocalEnvWithoutSkiaGold,
help: 'Do not upload images to Skia Gold.',
);
Future<void> main(List<String> args) async {
final ArgResults results = _argParser.parse(args);
if (results['help'] as bool) {
io.stdout.writeln(_argParser.usage);
return;
}
final List<String> rest = results.rest;
if (rest.length != 1) {
io.stderr.writeln('Error: Must provide exactly one argument.');
io.stderr.writeln(_argParser.usage);
io.exitCode = 1;
return;
}
final io.Directory workDirectory = io.Directory(rest.single);
final bool isDryRun = results['dry-run'] as bool;
final Harvester harvester;
if (isDryRun) {
io.stderr.writeln('=== DRY RUN. Results not submitted to Skia Gold. ===');
harvester =
await Harvester.create(workDirectory, io.stderr,
addImageToSkiaGold: _dryRunAddImg);
} else {
harvester =
await Harvester.create(workDirectory, io.stderr);
}
await harvest(harvester);
}
Future<void> _dryRunAddImg(
String testName,
io.File goldenFile, {
required int screenshotSize,
double differentPixelsRate = 0.01,
int pixelColorDelta = 0,
}) async {
io.stderr.writeln('addImg '
'testName:$testName '
'goldenFile:${goldenFile.path} '
'screenshotSize:$screenshotSize '
'differentPixelsRate:$differentPixelsRate '
'pixelColorDelta:$pixelColorDelta',
);
}