// 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:io';

import 'package:integration_test/integration_test_driver.dart' as driver;

Future<void> main() => driver.integrationDriver(
  timeout: const Duration(minutes: 1),
  responseDataCallback: (Map<String, dynamic> data) async {
    final Map<String, dynamic> benchmarkLiveResult =
        data['benchmarkLive'] as Map<String,dynamic>;
    final Map<String, dynamic> fullyLiveResult =
        data['fullyLive'] as Map<String,dynamic>;

    if(benchmarkLiveResult['frame_count'] as int < 10
       || fullyLiveResult['frame_count'] as int < 10) {
      print('Failure Details:\nNot Enough frames collected:'
            'benchmarkLive ${benchmarkLiveResult['frameCount']},'
            '${fullyLiveResult['frameCount']}.');
      exit(1);
    }
    await driver.writeResponseData(
      <String, dynamic>{
        'benchmarkLive': benchmarkLiveResult,
        'fullyLive': fullyLiveResult,
      },
      testOutputFilename: 'frame_policy_event_delay',
    );
  }
);
