// Copyright (c) 2014, 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_plugin/protocol/protocol_common.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';

import 'abstract_rename.dart';

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

@reflectiveTest
class RenameLabelTest extends RenameRefactoringTest {
  test_checkNewName_LocalVariableElement() async {
    await indexTestUnit('''
main() {
test:
  while (true) {
    break test;
  }
}
''');
    createRenameRefactoringAtString('test:');
    // null
    refactoring.newName = null;
    assertRefactoringStatus(
        refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
        expectedMessage: "Label name must not be null.");
    // empty
    refactoring.newName = '';
    assertRefactoringStatus(
        refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
        expectedMessage: "Label name must not be empty.");
    // OK
    refactoring.newName = 'newName';
    assertRefactoringStatusOK(refactoring.checkNewName());
  }

  test_createChange() async {
    await indexTestUnit('''
main() {
test:
  while (true) {
    break test;
  }
}
''');
    // configure refactoring
    createRenameRefactoringAtString('test:');
    expect(refactoring.refactoringName, 'Rename Label');
    expect(refactoring.elementKindName, 'label');
    refactoring.newName = 'newName';
    // validate change
    return assertSuccessfulRefactoring('''
main() {
newName:
  while (true) {
    break newName;
  }
}
''');
  }

  test_oldName() async {
    await indexTestUnit('''
main() {
test:
  while (true) {
    break test;
  }
}
''');
    // configure refactoring
    createRenameRefactoringAtString('test:');
    // old name
    expect(refactoring.oldName, 'test');
  }
}
