// 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 String filename in jsonFiles) { final File 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.', );