// Copyright 2021 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:test/test.dart';

import 'common.dart';

/// Validates `bin/generate_jspb.dart` which is used in the ci.yaml roller script.
Future<void> main() async {
  test('validate cocoon ci.yaml generates jspb', () async {
    final ProcessResult generateResult =
        Process.runSync('dart', <String>['run', 'bin/generate_jspb.dart', '../.ci.yaml']);
    if (generateResult.exitCode != 0) {
      fail('generate_jspb.dart failed with exit code ${generateResult.exitCode}\n'
          'stderr: ${generateResult.stderr}\n'
          'stdout: ${generateResult.stdout}');
    }

    // Update expectations file
    final File jspbExpectationsFile = File('integration_test/data/cocoon_config.json');
    jspbExpectationsFile.writeAsStringSync(generateResult.stdout as String);

    expectNoDiff(jspbExpectationsFile.path);
  });
}
