// Copyright (c) 2019, 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/error/codes.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';

import '../dart/resolution/context_collection_resolution.dart';

main() {
  defineReflectiveSuite(() {
    defineReflectiveTests(AssignmentToFinalTest);
    defineReflectiveTests(AssignmentToFinalWithNullSafetyTest);
  });
}

@reflectiveTest
class AssignmentToFinalTest extends PubPackageResolutionTest
    with WithoutNullSafetyMixin {
  test_prefixedIdentifier_instanceField() async {
    await assertNoErrorsInCode('''
class A {
  var x = 0;
}

void f(A a) {
  a.x = 0;
  a.x += 0;
  ++a.x;
  a.x++;
}
''');
  }

  test_prefixedIdentifier_instanceField_final() async {
    await assertErrorsInCode('''
class A {
  final x = 0;
}

void f(A a) {
  a.x = 0;
  a.x += 0;
  ++a.x;
  a.x++;
}
''', [
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 46, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 57, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 71, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 78, 1),
    ]);
  }

  test_simpleIdentifier_topLevelGetter() async {
    await assertErrorsInCode('''
int get x => 0;

void f() {
  x = 0;
  x += 0;
  ++x;
  x++;
}
''', [
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 30, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 39, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 51, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 56, 1),
    ]);
  }

  test_simpleIdentifier_topLevelVariable() async {
    await assertNoErrorsInCode('''
var x = 0;

void f() {
  x = 0;
  x += 0;
  ++x;
  x++;
}
''');
  }

  test_simpleIdentifier_topLevelVariable_final() async {
    await assertErrorsInCode('''
final x = 0;

void f() {
  x = 0;
  x += 0;
  ++x;
  x++;
}
''', [
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 27, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 36, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 48, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 53, 1),
    ]);
  }
}

@reflectiveTest
class AssignmentToFinalWithNullSafetyTest extends AssignmentToFinalTest
    with WithNullSafetyMixin {
  test_prefixedIdentifier_instanceField_abstract() async {
    await assertNoErrorsInCode('''
abstract class A {
  abstract int x;
}

void f(A a) {
  a.x = 0;
  a.x += 0;
  ++a.x;
  a.x++;
}
''');
  }

  test_prefixedIdentifier_instanceField_abstractFinal() async {
    await assertErrorsInCode('''
abstract class A {
  abstract final int x;
}

void f(A a) {
  a.x = 0;
  a.x += 0;
  ++a.x;
  a.x++;
}
''', [
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 64, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 75, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 89, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 96, 1),
    ]);
  }

  test_prefixedIdentifier_instanceField_external() async {
    await assertNoErrorsInCode('''
abstract class A {
  external int x;
}

void f(A a) {
  a.x = 0;
  a.x += 0;
  ++a.x;
  a.x++;
}
''');
  }

  test_prefixedIdentifier_instanceField_externalFinal() async {
    await assertErrorsInCode('''
abstract class A {
  external final int x;
}

void f(A a) {
  a.x = 0;
  a.x += 0;
  ++a.x;
  a.x++;
}
''', [
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 64, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 75, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 89, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 96, 1),
    ]);
  }

  test_prefixedIdentifier_instanceField_lateFinal() async {
    await assertNoErrorsInCode('''
abstract class A {
  late final int x;
}

void f(A a) {
  a.x = 0;
  a.x += 0;
  ++a.x;
  a.x++;
}
''');
  }

  test_prefixedIdentifier_instanceField_lateFinal_hasInitializer() async {
    await assertErrorsInCode('''
abstract class A {
  late final int x = 0;
}

void f(A a) {
  a.x = 0;
  a.x += 0;
  ++a.x;
  a.x++;
}
''', [
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 64, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 75, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 89, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 96, 1),
    ]);
  }

  test_prefixedIdentifier_staticField_externalFinal() async {
    await assertErrorsInCode('''
abstract class A {
  external static final int x;
}

void f() {
  A.x = 0;
  A.x += 0;
  ++A.x;
  A.x++;
}
''', [
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 68, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 79, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 93, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 100, 1),
    ]);
  }

  test_prefixedIdentifier_staticField_lateFinal() async {
    await assertNoErrorsInCode('''
abstract class A {
  static late final int x;
}

void f() {
  A.x = 0;
  A.x += 0;
  ++A.x;
  A.x++;
}
''');
  }

  test_prefixedIdentifier_staticField_lateFinal_hasInitializer() async {
    await assertErrorsInCode('''
abstract class A {
  static late final int x = 0;
}

void f() {
  A.x = 0;
  A.x += 0;
  ++A.x;
  A.x++;
}
''', [
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 68, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 79, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 93, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 100, 1),
    ]);
  }

  test_propertyAccess_instanceField_lateFinal() async {
    await assertNoErrorsInCode('''
abstract class A {
  late final int x;
}

void f(A a) {
  (a).x = 0;
  (a).x += 0;
  ++(a).x;
  (a).x++;
}
''');
  }

  test_propertyAccess_instanceField_lateFinal_hasInitializer() async {
    await assertErrorsInCode('''
abstract class A {
  late final int x = 0;
}

void f(A a) {
  (a).x = 0;
  (a).x += 0;
  ++(a).x;
  (a).x++;
}
''', [
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 66, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 79, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 95, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 104, 1),
    ]);
  }

  test_simpleIdentifier_instanceField_lateFinal() async {
    await assertNoErrorsInCode('''
abstract class A {
  late final int x;

  void f() {
    x = 0;
    x += 0;
    ++x;
    x++;
  }
}
''');
  }

  test_simpleIdentifier_instanceField_lateFinal_hasInitializer() async {
    await assertErrorsInCode('''
abstract class A {
  late final int x = 0;

  void f() {
    x = 0;
    x += 0;
    ++x;
    x++;
  }
}
''', [
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 61, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 72, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 86, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 93, 1),
    ]);
  }

  test_simpleIdentifier_staticField_lateFinal() async {
    await assertNoErrorsInCode('''
abstract class A {
  static late final int x;

  void f() {
    x = 0;
    x += 0;
    ++x;
    x++;
  }
}
''');
  }

  test_simpleIdentifier_staticField_lateFinal_hasInitializer() async {
    await assertErrorsInCode('''
abstract class A {
  static late final int x = 0;

  void f() {
    x = 0;
    x += 0;
    ++x;
    x++;
  }
}
''', [
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 68, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 79, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 93, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 100, 1),
    ]);
  }

  test_simpleIdentifier_topLevelVariable_external() async {
    await assertNoErrorsInCode('''
external int x;

void f() {
  x = 0;
  x += 0;
  ++x;
  x++;
}
''');
  }

  test_simpleIdentifier_topLevelVariable_externalFinal() async {
    await assertErrorsInCode('''
external final x;

void f() {
  x = 0;
  x += 0;
  ++x;
  x++;
}
''', [
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 32, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 41, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 53, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 58, 1),
    ]);
  }

  test_simpleIdentifier_topLevelVariable_lateFinal() async {
    await assertNoErrorsInCode('''
late final int x;

void f() {
  x = 0;
  x += 0;
  ++x;
  x++;
}
''');
  }

  test_simpleIdentifier_topLevelVariable_lateFinal_hasInitializer() async {
    await assertErrorsInCode('''
late final int x = 0;

void f() {
  x = 0;
  x += 0;
  ++x;
  x++;
}
''', [
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 36, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 45, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 57, 1),
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 62, 1),
    ]);
  }
}
