// 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. /// Test that the appropriate errors are generated if a nullable type is used in /// an object pattern. import 'package:expect/expect.dart'; typedef A = int?; bool nullableWithoutField(x) { // This is fine because all the implementation needs to do is a type test. switch (x) { case A(): return true; default: return false; } } bool potentiallyNullableWithoutField(x) { // This is fine because all the implementation needs to do is a type test. switch (x) { case T(): return true; default: return false; } } bool nonNullableTypeArgument(x) { // This is fine error because `isEven` *can* be called on `int`. switch (x) { case T(isEven: true): return true; default: return false; } } bool nullableWithObjectFields(x) { // This is fine because the fields `hashCode` and `runtimeType` are defined on // `null`. switch (x) { case A(:var runtimeType, :var hashCode): Expect.equals(x.runtimeType, runtimeType); Expect.equals(x.hashCode, hashCode); return true; default: return false; } } main() { Expect.equals(true, nullableWithoutField(null)); Expect.equals(true, nullableWithoutField(0)); Expect.equals(false, nullableWithoutField('')); Expect.equals(true, potentiallyNullableWithoutField(null)); Expect.equals(true, potentiallyNullableWithoutField(0)); Expect.equals(false, potentiallyNullableWithoutField('')); Expect.equals(false, potentiallyNullableWithoutField(null)); Expect.equals(true, potentiallyNullableWithoutField(0)); Expect.equals(false, potentiallyNullableWithoutField('')); Expect.equals(false, potentiallyNullableWithoutField(null)); Expect.equals(false, potentiallyNullableWithoutField(0)); Expect.equals(false, potentiallyNullableWithoutField('')); Expect.equals(false, nonNullableTypeArgument(null)); Expect.equals(true, nonNullableTypeArgument(0)); Expect.equals(false, nonNullableTypeArgument(1)); Expect.equals(false, nonNullableTypeArgument('')); Expect.equals(false, nonNullableTypeArgument(null)); Expect.equals(false, nonNullableTypeArgument(0)); Expect.equals(false, nonNullableTypeArgument(1)); Expect.equals(false, nonNullableTypeArgument('')); Expect.equals(true, nullableWithObjectFields(null)); Expect.equals(true, nullableWithObjectFields(0)); Expect.equals(false, nullableWithObjectFields('')); }