| // Copyright 2014 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:convert'; | |
| import 'dart:io'; | |
| import 'package:args/args.dart'; | |
| import 'package:flutter_devicelab/framework/ab.dart'; | |
| import 'package:flutter_devicelab/framework/utils.dart'; | |
| String kRawSummaryOpt = 'raw-summary'; | |
| String kTabTableOpt = 'tsv-table'; | |
| String kAsciiTableOpt = 'ascii-table'; | |
| void _usage(String error) { | |
| stderr.writeln(error); | |
| stderr.writeln('Usage:\n'); | |
| stderr.writeln(_argParser.usage); | |
| exitCode = 1; | |
| } | |
| Future<void> main(List<String> rawArgs) async { | |
| ArgResults args; | |
| try { | |
| args = _argParser.parse(rawArgs); | |
| } on FormatException catch (error) { | |
| _usage('${error.message}\n'); | |
| return; | |
| } | |
| final List<String> jsonFiles = args.rest.isNotEmpty ? args.rest : <String>['ABresults.json']; | |
| for (final filename in jsonFiles) { | |
| final file = File(filename); | |
| if (!file.existsSync()) { | |
| _usage('File "$filename" does not exist'); | |
| return; | |
| } | |
| ABTest test; | |
| try { | |
| test = ABTest.fromJsonMap( | |
| const JsonDecoder().convert(await file.readAsString()) as Map<String, dynamic>, | |
| ); | |
| } catch (error) { | |
| _usage('Could not parse json file "$filename"'); | |
| return; | |
| } | |
| if (args[kRawSummaryOpt] as bool) { | |
| section('Raw results for "$filename"'); | |
| print(test.rawResults()); | |
| } | |
| if (args[kTabTableOpt] as bool) { | |
| section('A/B comparison for "$filename"'); | |
| print(test.printSummary()); | |
| } | |
| if (args[kAsciiTableOpt] as bool) { | |
| section('Formatted summary for "$filename"'); | |
| print(test.asciiSummary()); | |
| } | |
| } | |
| } | |
| /// Command-line options for the `summarize.dart` command. | |
| final ArgParser _argParser = ArgParser() | |
| ..addFlag( | |
| kAsciiTableOpt, | |
| defaultsTo: true, | |
| help: 'Prints the summary in a table formatted nicely for terminal output.', | |
| ) | |
| ..addFlag( | |
| kTabTableOpt, | |
| defaultsTo: true, | |
| help: 'Prints the summary in a table with tabs for easy spreadsheet entry.', | |
| ) | |
| ..addFlag( | |
| kRawSummaryOpt, | |
| defaultsTo: true, | |
| help: | |
| 'Prints all per-run data collected by the A/B test formatted with\n' | |
| 'tabs for easy spreadsheet entry.', | |
| ); |