| // 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. |
| |
| /// @assertion |
| /// You can also use var _ or final _ to write a wildcard in a matching context |
| /// because it would require additional specification to explicitly forbid it, |
| /// but doing so is discouraged. |
| /// |
| /// @description Checks that var _ or final _ can be used as a wildcard in a |
| /// matching context. Test switch statement |
| /// @author sgrekhov22@gmail.com |
| |
| import "../../Utils/expect.dart"; |
| import "patterns_lib.dart"; |
| |
| String testLogicalOr1(int x) { |
| if (x case var _ || var _) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testLogicalOr2(int x) { |
| if (x case final _ || final _) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testLogicalOr3(int x) { |
| if (x case final int _ || final int _) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testLogicalOr4(int x) { |
| if (x case int _ || int _) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testLogicalAnd1(int x) { |
| if (x case var _ && var _) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testLogicalAnd2(int x) { |
| if (x case final _ && final _) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testLogicalAnd3(int x) { |
| if (x case final int _ && final int _) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testLogicalAnd4(int x) { |
| if (x case int _ && int _) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testCast1(num x) { |
| if (x case var _ as int) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testCast2(num x) { |
| if (x case final _ as int) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testCast3(num x) { |
| if (x case num _ as int) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testCast4(num x) { |
| if (x case final int _ as int) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testNullCheck1(int? x) { |
| if (x case var _?) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testNullCheck2(int? x) { |
| if (x case final _?) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testNullCheck3(int? x) { |
| if (x case int _?) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testNullCheck4(int? x) { |
| if (x case final int _?) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testNullAssert1(int? x) { |
| if (x case var _!) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testNullAssert2(int? x) { |
| if (x case final _!) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testNullAssert3(int? x) { |
| if (x case int? _!) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testNullAssert4(int? x) { |
| if (x case final int? _!) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testVariable1(int x) { |
| if (x case var _) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testVariable2(int x) { |
| if (x case final _) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testVariable3(int x) { |
| if (x case int _) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testVariable4(int x) { |
| if (x case final int _) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testParenthesized1(int x) { |
| if (x case (var _)) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testParenthesized2(int x) { |
| if (x case (final _)) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testParenthesized3(int x) { |
| if (x case (int _)) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testParenthesized4(int x) { |
| if (x case (final int _)) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testList1(List<int> x) { |
| if (x case [var _]) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testList2(List<int> x) { |
| if (x case [final _]) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testList3(List<int> x) { |
| if (x case [int _]) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testList4(List<int> x) { |
| if (x case [final int _]) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testMap1(Map<String, int> x) { |
| if (x case {"key1": var _}) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testMap2(Map<String, int> x) { |
| if (x case {"key1": final _}) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testMap3(Map<String, int> x) { |
| if (x case {"key1": int _}) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testMap4(Map<String, int> x) { |
| if (x case {"key1": final int _}) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testRecord1(Record x) { |
| if (x case (var _,)) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testRecord2(Record x) { |
| if (x case (final _,)) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testRecord3(Record x) { |
| if (x case (int _,)) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testRecord4(Record x) { |
| if (x case (final int _,)) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testObject1(Shape shape) { |
| if (shape case Square(areaAsInt: var _)) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testObject2(Shape shape) { |
| if (shape case Square(areaAsInt: final _)) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testObject3(Shape shape) { |
| if (shape case Square(areaAsInt: int _)) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| String testObject4(Shape shape) { |
| if (shape case Square(areaAsInt: final int _)) { |
| return "match"; |
| } |
| return "no match"; |
| } |
| |
| main() { |
| Expect.equals("match", testLogicalOr1(2)); |
| Expect.equals("match", testLogicalOr2(1)); |
| Expect.equals("match", testLogicalOr3(2)); |
| Expect.equals("match", testLogicalOr4(1)); |
| Expect.equals("match", testLogicalAnd1(2)); |
| Expect.equals("match", testLogicalAnd2(1)); |
| Expect.equals("match", testLogicalAnd3(2)); |
| Expect.equals("match", testLogicalAnd4(1)); |
| Expect.equals("match", testCast1(1)); |
| Expect.equals("match", testCast2(1)); |
| Expect.equals("match", testCast3(1)); |
| Expect.equals("match", testCast4(1)); |
| Expect.throws(() {testCast1(3.14);}); |
| Expect.throws(() {testCast2(3.14);}); |
| Expect.throws(() {testCast3(3.14);}); |
| Expect.throws(() {testCast4(3.14);}); |
| Expect.equals("match", testNullCheck1(1)); |
| Expect.equals("match", testNullCheck2(1)); |
| Expect.equals("match", testNullCheck3(1)); |
| Expect.equals("match", testNullCheck4(1)); |
| Expect.equals("no match", testNullCheck1(null)); |
| Expect.equals("no match", testNullCheck2(null)); |
| Expect.equals("no match", testNullCheck3(null)); |
| Expect.equals("no match", testNullCheck4(null)); |
| Expect.equals("match", testNullAssert1(1)); |
| Expect.equals("match", testNullAssert2(1)); |
| Expect.equals("match", testNullAssert3(1)); |
| Expect.equals("match", testNullAssert4(1)); |
| Expect.throws(() {testNullAssert1(null);}); |
| Expect.throws(() {testNullAssert2(null);}); |
| Expect.throws(() {testNullAssert3(null);}); |
| Expect.throws(() {testNullAssert4(null);}); |
| Expect.equals("match", testVariable1(1)); |
| Expect.equals("match", testVariable2(1)); |
| Expect.equals("match", testVariable3(1)); |
| Expect.equals("match", testVariable4(1)); |
| Expect.equals("match", testParenthesized1(1)); |
| Expect.equals("match", testParenthesized2(1)); |
| Expect.equals("match", testParenthesized3(1)); |
| Expect.equals("match", testParenthesized4(1)); |
| Expect.equals("match", testList1([1])); |
| Expect.equals("match", testList2([1])); |
| Expect.equals("match", testList3([1])); |
| Expect.equals("match", testList4([1])); |
| Expect.equals("no match", testList1([1, 2])); |
| Expect.equals("no match", testList2([1, 2])); |
| Expect.equals("no match", testList3([1, 2])); |
| Expect.equals("no match", testList4([1, 2])); |
| Expect.equals("match", testMap1({"key1": 1})); |
| Expect.equals("match", testMap2({"key1": 1})); |
| Expect.equals("match", testMap3({"key1": 1})); |
| Expect.equals("match", testMap4({"key1": 1})); |
| Expect.equals("match", testMap1({"key1": 1, "key2": 2})); |
| Expect.equals("match", testMap2({"key1": 1, "key2": 2})); |
| Expect.equals("match", testMap3({"key1": 1, "key2": 2})); |
| Expect.equals("match", testMap4({"key1": 1, "key2": 2})); |
| Expect.equals("match", testRecord1((1,))); |
| Expect.equals("match", testRecord2((1,))); |
| Expect.equals("match", testRecord3((1,))); |
| Expect.equals("match", testRecord4((1,))); |
| Expect.equals("no match", testRecord1((1, name: "one"))); |
| Expect.equals("no match", testRecord2((1, name: "one"))); |
| Expect.equals("no match", testRecord3((1, name: "one"))); |
| Expect.equals("no match", testRecord4((1, name: "one"))); |
| Expect.equals("match", testObject1(Square(1))); |
| Expect.equals("match", testObject2(Square(1))); |
| Expect.equals("match", testObject3(Square(1))); |
| Expect.equals("match", testObject4(Square(1))); |
| Expect.equals("no match", testObject1(Circle(1))); |
| Expect.equals("no match", testObject2(Circle(1))); |
| Expect.equals("no match", testObject3(Circle(1))); |
| Expect.equals("no match", testObject4(Circle(1))); |
| } |