// 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_inheritedSetter_shadowedBy_topLevelGetter() async {
    await assertErrorsInCode('''
class A {
  void set foo(int _) {}
}

int get foo => 0;

class B extends A {
  void bar() {
    foo = 0;
  }
}
''', [
      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 96, 3),
    ]);
  }

  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),
    ]);
  }
}
