blob: 029c1762a529db26f6826836ca3f8fd4a6602831 [file] [log] [blame]
// 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:test_reflective_loader/test_reflective_loader.dart';
import '../../../../client/completion_driver_test.dart';
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(IfElementTest);
defineReflectiveTests(IfElementInListTest);
defineReflectiveTests(IfElementInMapTest);
defineReflectiveTests(IfElementInSetTest);
});
}
@reflectiveTest
class IfElementInListTest extends AbstractCompletionDriverTest
with IfElementInListTestCases {}
mixin IfElementInListTestCases on AbstractCompletionDriverTest {
Future<void> test_afterElse_beforeComma_partial() async {
await computeSuggestions('''
void f(int i) {
[if (true) 1 else 2 e^, i, i];
}
''');
assertResponse(r'''
replacement
left: 1
suggestions
''');
}
Future<void> test_afterElse_beforeEnd() async {
await computeSuggestions('''
f() => [if (true) 1 else ^];
''');
assertResponse(r'''
suggestions
false
kind: keyword
null
kind: keyword
true
kind: keyword
if
kind: keyword
for
kind: keyword
const
kind: keyword
switch
kind: keyword
''');
}
Future<void> test_afterFor_beforeEnd_partial() async {
await computeSuggestions('''
void f(int i) {
[if (b) for (var e in c) e e^];
}
''');
assertResponse(r'''
replacement
left: 1
suggestions
else
kind: keyword
''');
}
Future<void> test_afterRightParen_beforeEnd() async {
await computeSuggestions('''
f() => [if (true) ^];
''');
assertResponse(r'''
suggestions
false
kind: keyword
null
kind: keyword
true
kind: keyword
const
kind: keyword
for
kind: keyword
if
kind: keyword
switch
kind: keyword
''');
}
Future<void> test_afterThen_beforeComma() async {
await computeSuggestions('''
void f(int i, int j) {
[if (true) i ^, j];
}
''');
assertResponse(r'''
suggestions
false
kind: keyword
null
kind: keyword
true
kind: keyword
const
kind: keyword
else
kind: keyword
for
kind: keyword
if
kind: keyword
switch
kind: keyword
''');
}
Future<void> test_afterThen_beforeComma_partial_list() async {
await computeSuggestions('''
void f(int i) {
[if (true) 1 e^, i];
}
''');
assertResponse(r'''
replacement
left: 1
suggestions
else
kind: keyword
''');
}
Future<void> test_afterThen_beforeEnd() async {
await computeSuggestions('''
void f(int i) {
[if (true) i ^];
}
''');
assertResponse(r'''
suggestions
false
kind: keyword
null
kind: keyword
true
kind: keyword
const
kind: keyword
else
kind: keyword
for
kind: keyword
if
kind: keyword
switch
kind: keyword
''');
}
Future<void> test_afterThen_beforeEnd_nestedInElse() async {
await computeSuggestions('''
void f(int i) {
[if (false) i else if (true) i ^];
}
''');
assertResponse(r'''
suggestions
false
kind: keyword
null
kind: keyword
true
kind: keyword
const
kind: keyword
else
kind: keyword
for
kind: keyword
if
kind: keyword
switch
kind: keyword
''');
}
Future<void> test_afterThen_beforeEnd_nestedInFor() async {
await computeSuggestions('''
void f(int i) {
[for (var e in []) if (true) i ^];
}
''');
assertResponse(r'''
suggestions
false
kind: keyword
null
kind: keyword
true
kind: keyword
const
kind: keyword
else
kind: keyword
for
kind: keyword
if
kind: keyword
switch
kind: keyword
''');
}
Future<void> test_afterThen_beforeEnd_nestedInThen() async {
await computeSuggestions('''
void f(int i) {
[if (false) if (true) i ^];
}
''');
assertResponse(r'''
suggestions
false
kind: keyword
null
kind: keyword
true
kind: keyword
const
kind: keyword
else
kind: keyword
for
kind: keyword
if
kind: keyword
switch
kind: keyword
''');
}
Future<void> test_test_afterThen_beforeEnd_partial() async {
await computeSuggestions('''
void f() {
[if (true) 1 e^];
}
''');
assertResponse(r'''
replacement
left: 1
suggestions
else
kind: keyword
''');
}
}
@reflectiveTest
class IfElementInMapTest extends AbstractCompletionDriverTest
with IfElementInMapTestCases {}
mixin IfElementInMapTestCases on AbstractCompletionDriverTest {
Future<void> test_afterMapEntry_beforeComma_partial() async {
await computeSuggestions('''
void f(int i) {
<int, int>{if (true) 1: 1 e^, 2: i};
}
''');
assertResponse(r'''
replacement
left: 1
suggestions
else
kind: keyword
''');
}
}
@reflectiveTest
class IfElementInSetTest extends AbstractCompletionDriverTest
with IfElementInSetTestCases {}
mixin IfElementInSetTestCases on AbstractCompletionDriverTest {
Future<void> test_afterThen_beforeComma_partial_set() async {
await computeSuggestions('''
void f(int i) {
<int>{if (true) 1 e^, i};
}
''');
assertResponse(r'''
replacement
left: 1
suggestions
else
kind: keyword
''');
}
}
@reflectiveTest
class IfElementTest extends AbstractCompletionDriverTest
with IfElementTestCases {}
mixin IfElementTestCases on AbstractCompletionDriverTest {
Future<void> test_afterPattern() async {
await computeSuggestions('''
void f(Object o) {
var v = [ if (o case var x ^) ];
}
''');
assertResponse(r'''
suggestions
when
kind: keyword
''');
}
Future<void> test_afterPattern_partial() async {
await computeSuggestions('''
void f(Object o) {
var v = [ if (o case var x w^) ];
}
''');
assertResponse(r'''
replacement
left: 1
suggestions
when
kind: keyword
''');
}
Future<void> test_afterWhen() async {
await computeSuggestions('''
void f(Object o) {
var v = [ if (o case var x when ^) ];
}
''');
assertResponse(r'''
suggestions
false
kind: keyword
true
kind: keyword
null
kind: keyword
const
kind: keyword
switch
kind: keyword
''');
}
Future<void> test_afterWhen_partial() async {
await computeSuggestions('''
void f(Object o) {
var v = [ if (o case var x when c^) ];
}
''');
assertResponse(r'''
replacement
left: 1
suggestions
const
kind: keyword
''');
}
Future<void> test_rightParen_withCondition_withoutCase() async {
await computeSuggestions('''
var v = [ if (o ^) ];
''');
assertResponse(r'''
suggestions
case
kind: keyword
is
kind: keyword
''');
}
Future<void> test_rightParen_withoutCondition() async {
await computeSuggestions('''
var v = [ if (^) ];
''');
assertResponse(r'''
suggestions
false
kind: keyword
true
kind: keyword
null
kind: keyword
const
kind: keyword
switch
kind: keyword
''');
}
}