blob: 8d2bec4d0a80ffb6eb90a63a9b8e5eba455de4f0 [file] [log] [blame]
// Copyright (c) 2022, 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 'context_collection_resolution.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ConstantPattern_BooleanLiteral_ResolutionTest);
defineReflectiveTests(ConstantPattern_DoubleLiteral_ResolutionTest);
defineReflectiveTests(ConstantPattern_IntegerLiteral_ResolutionTest);
defineReflectiveTests(ConstantPattern_NullLiteral_ResolutionTest);
defineReflectiveTests(ConstantPattern_SimpleIdentifier_ResolutionTest);
defineReflectiveTests(ConstantPattern_SimpleStringLiteral_ResolutionTest);
});
}
@reflectiveTest
class ConstantPattern_BooleanLiteral_ResolutionTest
extends PatternsResolutionTest {
test_inside_castPattern() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case true as Object:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
CastPattern
pattern: ConstantPattern
expression: BooleanLiteral
literal: true
asToken: as
type: NamedType
name: SimpleIdentifier
token: Object
''');
}
test_inside_ifStatement_case() async {
await assertNoErrorsInCode(r'''
void f(x) {
if (x case true) {}
}
''');
final node = findNode.caseClause('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
expression: BooleanLiteral
literal: true
''');
}
test_inside_nullAssert() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case true!:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
expression: BooleanLiteral
literal: true
operator: !
''');
}
test_inside_nullCheck() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case true?:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
expression: BooleanLiteral
literal: true
operator: ?
''');
}
test_inside_switchStatement_case() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case true:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
expression: BooleanLiteral
literal: true
''');
}
}
@reflectiveTest
class ConstantPattern_DoubleLiteral_ResolutionTest
extends PatternsResolutionTest {
test_inside_castPattern() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case 1.0 as Object:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
CastPattern
pattern: ConstantPattern
expression: DoubleLiteral
literal: 1.0
asToken: as
type: NamedType
name: SimpleIdentifier
token: Object
''');
}
test_inside_ifStatement_case() async {
await assertNoErrorsInCode(r'''
void f(x) {
if (x case 1.0) {}
}
''');
final node = findNode.caseClause('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
expression: DoubleLiteral
literal: 1.0
''');
}
test_inside_nullAssert() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case 1.0!:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
expression: DoubleLiteral
literal: 1.0
operator: !
''');
}
test_inside_nullCheck() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case 1.0?:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
expression: DoubleLiteral
literal: 1.0
operator: ?
''');
}
test_inside_switchStatement_case() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case 1.0:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
expression: DoubleLiteral
literal: 1.0
''');
}
}
@reflectiveTest
class ConstantPattern_IntegerLiteral_ResolutionTest
extends PatternsResolutionTest {
test_inside_castPattern() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case 0 as Object:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
CastPattern
pattern: ConstantPattern
expression: IntegerLiteral
literal: 0
asToken: as
type: NamedType
name: SimpleIdentifier
token: Object
''');
}
test_inside_ifStatement_case() async {
await assertNoErrorsInCode(r'''
void f(x) {
if (x case 0) {}
}
''');
final node = findNode.caseClause('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
expression: IntegerLiteral
literal: 0
''');
}
test_inside_nullAssert() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case 0!:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
expression: IntegerLiteral
literal: 0
operator: !
''');
}
test_inside_nullCheck() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case 0?:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
expression: IntegerLiteral
literal: 0
operator: ?
''');
}
test_inside_switchStatement_case() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case 0:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
expression: IntegerLiteral
literal: 0
''');
}
}
@reflectiveTest
class ConstantPattern_NullLiteral_ResolutionTest
extends PatternsResolutionTest {
test_inside_castPattern() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case null as Object:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
CastPattern
pattern: ConstantPattern
expression: NullLiteral
literal: null
asToken: as
type: NamedType
name: SimpleIdentifier
token: Object
''');
}
test_inside_ifStatement_case() async {
await assertNoErrorsInCode(r'''
void f(x) {
if (x case null) {}
}
''');
final node = findNode.caseClause('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
expression: NullLiteral
literal: null
''');
}
test_inside_nullAssert() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case null!:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
expression: NullLiteral
literal: null
operator: !
''');
}
test_inside_nullCheck() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case null?:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
expression: NullLiteral
literal: null
operator: ?
''');
}
test_inside_switchStatement_case() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case null:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
expression: NullLiteral
literal: null
''');
}
}
@reflectiveTest
class ConstantPattern_SimpleIdentifier_ResolutionTest
extends PatternsResolutionTest {
test_inside_castPattern() async {
await assertNoErrorsInCode(r'''
void f(x, y) {
switch (x) {
case y as Object:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
CastPattern
pattern: ConstantPattern
expression: SimpleIdentifier
token: y
asToken: as
type: NamedType
name: SimpleIdentifier
token: Object
''');
}
test_inside_ifStatement_case() async {
await assertNoErrorsInCode(r'''
void f(x, y) {
if (x case y) {}
}
''');
final node = findNode.caseClause('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
expression: SimpleIdentifier
token: y
''');
}
test_inside_nullAssert() async {
await assertNoErrorsInCode(r'''
void f(x, y) {
switch (x) {
case y!:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
expression: SimpleIdentifier
token: y
operator: !
''');
}
test_inside_nullCheck() async {
await assertNoErrorsInCode(r'''
void f(x, y) {
switch (x) {
case y?:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
expression: SimpleIdentifier
token: y
operator: ?
''');
}
test_inside_switchStatement_case() async {
await assertNoErrorsInCode(r'''
void f(x, y) {
switch (x) {
case y:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
expression: SimpleIdentifier
token: y
''');
}
}
@reflectiveTest
class ConstantPattern_SimpleStringLiteral_ResolutionTest
extends PatternsResolutionTest {
test_inside_castPattern() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case 'x' as Object:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
CastPattern
pattern: ConstantPattern
expression: SimpleStringLiteral
literal: 'x'
asToken: as
type: NamedType
name: SimpleIdentifier
token: Object
''');
}
test_inside_ifStatement_case() async {
await assertNoErrorsInCode(r'''
void f(x) {
if (x case 'x') {}
}
''');
final node = findNode.caseClause('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
expression: SimpleStringLiteral
literal: 'x'
''');
}
test_inside_nullAssert() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case 'x'!:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
expression: SimpleStringLiteral
literal: 'x'
operator: !
''');
}
test_inside_nullCheck() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case 'x'?:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
PostfixPattern
operand: ConstantPattern
expression: SimpleStringLiteral
literal: 'x'
operator: ?
''');
}
test_inside_switchStatement_case() async {
await assertNoErrorsInCode(r'''
void f(x) {
switch (x) {
case 'x':
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ConstantPattern
expression: SimpleStringLiteral
literal: 'x'
''');
}
}