// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. 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:analyzer/src/pubspec/pubspec_warning_code.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';

import '../pubspec_test_support.dart';

main() {
  defineReflectiveSuite(() {
    defineReflectiveTests(UnknownPlatformsTest);
  });
}

@reflectiveTest
class UnknownPlatformsTest extends PubspecDiagnosticTest {
  test_subset_of_supported_platforms_is_allowed() {
    assertNoErrors('''
name: foo
version: 1.0.0
platforms:
  android:
  ios:
  web:
''');
  }

  test_supported_platforms_are_allowed() {
    assertNoErrors('''
name: foo
version: 1.0.0
platforms:
  android:
  ios:
  linux:
  macos:
  web:
  windows:
''');
  }

  test_unknown_platform_bool() {
    assertErrors(
      '''
name: foo
version: 1.0.0
platforms:
  True:
''',
      [PubspecWarningCode.unknownPlatform],
    );
  }

  test_unknown_platform_browser() {
    assertErrors(
      '''
name: foo
version: 1.0.0
platforms:
  browser: # the correct platform is "web"
''',
      [PubspecWarningCode.unknownPlatform],
    );
  }

  test_unknown_platform_int() {
    assertErrors(
      '''
name: foo
version: 1.0.0
platforms:
  33:
''',
      [PubspecWarningCode.unknownPlatform],
    );
  }

  test_unknown_platform_list() {
    assertErrors(
      '''
name: foo
version: 1.0.0
platforms:
  [1, 2]:
''',
      [PubspecWarningCode.unknownPlatform],
    );
  }

  test_unknown_platform_null() {
    assertErrors(
      '''
name: foo
version: 1.0.0
platforms:
  null:
''',
      [PubspecWarningCode.unknownPlatform],
    );
  }

  test_unknown_platform_win32() {
    assertErrors(
      '''
name: foo
version: 1.0.0
platforms:
  win32: # the correct platform is "windows"
''',
      [PubspecWarningCode.unknownPlatform],
    );
  }
}
