// 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 'package:flutter_tools/src/android/build_validation.dart';
import 'package:flutter_tools/src/build_info.dart';

import '../../src/common.dart';

void main() {
  testWithoutContext('validateBuild throws if attempting to build release/profile on x86', () {
    expect(() => validateBuild(
      const AndroidBuildInfo(
        BuildInfo.release,
        targetArchs: <AndroidArch>[AndroidArch.x86],
      ),
    ), throwsToolExit(message: 'Cannot build release mode for x86 ABI.'));
  });

  testWithoutContext('validateBuild does not throw on AOT supported architectures', () {
    expect(() => validateBuild(
      const AndroidBuildInfo(
        BuildInfo.release,
        targetArchs: <AndroidArch>[AndroidArch.x86_64, AndroidArch.armeabi_v7a, AndroidArch.arm64_v8a],
      ),
    ), returnsNormally);
  });

  testWithoutContext('validateBuild throws if an invalid build number is specified', () {
    expect(() => validateBuild(
      const AndroidBuildInfo(
        // Invalid number
        BuildInfo(BuildMode.debug, '', treeShakeIcons: false, buildNumber: 'a'),
        targetArchs: <AndroidArch>[AndroidArch.x86],
      ),
    ), throwsToolExit(message: 'buildNumber: a was not a valid integer value.'));

    expect(() => validateBuild(
      const AndroidBuildInfo(
        // Negative number
        BuildInfo(BuildMode.debug, '', treeShakeIcons: false, buildNumber: '-1'),
        targetArchs: <AndroidArch>[AndroidArch.x86],
      ),
    ), throwsToolExit(message: 'buildNumber: -1 must be a positive integer value.'));

    expect(() => validateBuild(
      const AndroidBuildInfo(
        // bigger than maximum supported play store value
        BuildInfo(BuildMode.debug, '', treeShakeIcons: false, buildNumber: '2100000001'),
        targetArchs: <AndroidArch>[AndroidArch.x86],
      ),
    ), throwsToolExit(message: 'buildNumber: 2100000001 is greater than the maximum '
        'allowed value of 2100000000.'));
  });

  testWithoutContext('validateBuild does not throw on positive number', () {
    expect(() => validateBuild(
      const AndroidBuildInfo(
        BuildInfo(BuildMode.debug, '', treeShakeIcons: false, buildNumber: '2'),
        targetArchs: <AndroidArch>[AndroidArch.x86],
      ),
    ), returnsNormally);
  });
}
