Skip to content

Commit c5dc7e7

Browse files
committed
fix
1 parent 8010174 commit c5dc7e7

File tree

2 files changed

+66
-43
lines changed

2 files changed

+66
-43
lines changed

mypy/test/testtypes.py

Lines changed: 65 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -766,18 +766,19 @@ def test_type_vars(self) -> None:
766766
self.assert_join(self.fx.t, self.fx.s, self.fx.o)
767767

768768
def test_none(self) -> None:
769-
# Any type t joined with None results in t.
770-
for t in [
771-
NoneType(),
772-
self.fx.a,
773-
self.fx.o,
774-
UnboundType("x"),
775-
self.fx.t,
776-
self.tuple(),
777-
self.callable(self.fx.a, self.fx.b),
778-
self.fx.anyt,
779-
]:
780-
self.assert_join(t, NoneType(), t)
769+
with state.strict_optional_set(False):
770+
# Any type t joined with None results in t.
771+
for t in [
772+
NoneType(),
773+
self.fx.a,
774+
self.fx.o,
775+
UnboundType("x"),
776+
self.fx.t,
777+
self.tuple(),
778+
self.callable(self.fx.a, self.fx.b),
779+
self.fx.anyt,
780+
]:
781+
self.assert_join(t, NoneType(), t)
781782

782783
def test_unbound_type(self) -> None:
783784
self.assert_join(UnboundType("x"), UnboundType("x"), self.fx.anyt)
@@ -798,11 +799,15 @@ def test_unbound_type(self) -> None:
798799

799800
def test_any_type(self) -> None:
800801
# Join against 'Any' type always results in 'Any'.
802+
with state.strict_optional_set(False):
803+
self.assert_join(NoneType(), self.fx.anyt, self.fx.anyt)
804+
801805
for t in [
802806
self.fx.anyt,
803807
self.fx.a,
804808
self.fx.o,
805-
NoneType(),
809+
# TODO: fix this is not currently symmetric
810+
# NoneType(),
806811
UnboundType("x"),
807812
self.fx.t,
808813
self.tuple(),
@@ -834,7 +839,11 @@ def test_other_mixed_types(self) -> None:
834839
self.assert_join(t1, t2, self.fx.o)
835840

836841
def test_simple_generics(self) -> None:
837-
self.assert_join(self.fx.ga, self.fx.nonet, self.fx.ga)
842+
with state.strict_optional_set(False):
843+
self.assert_join(self.fx.ga, self.fx.nonet, self.fx.ga)
844+
with state.strict_optional_set(True):
845+
self.assert_join(self.fx.ga, self.fx.nonet, UnionType([self.fx.ga, NoneType()]))
846+
838847
self.assert_join(self.fx.ga, self.fx.anyt, self.fx.anyt)
839848

840849
for t in [
@@ -1105,22 +1114,22 @@ def test_class_subtyping(self) -> None:
11051114
self.assert_meet(self.fx.a, self.fx.o, self.fx.a)
11061115
self.assert_meet(self.fx.a, self.fx.b, self.fx.b)
11071116
self.assert_meet(self.fx.b, self.fx.o, self.fx.b)
1108-
self.assert_meet(self.fx.a, self.fx.d, NoneType())
1109-
self.assert_meet(self.fx.b, self.fx.c, NoneType())
1117+
self.assert_meet(self.fx.a, self.fx.d, UninhabitedType())
1118+
self.assert_meet(self.fx.b, self.fx.c, UninhabitedType())
11101119

11111120
def test_tuples(self) -> None:
11121121
self.assert_meet(self.tuple(), self.tuple(), self.tuple())
11131122
self.assert_meet(self.tuple(self.fx.a), self.tuple(self.fx.a), self.tuple(self.fx.a))
11141123
self.assert_meet(
11151124
self.tuple(self.fx.b, self.fx.c),
11161125
self.tuple(self.fx.a, self.fx.d),
1117-
self.tuple(self.fx.b, NoneType()),
1126+
self.tuple(self.fx.b, UninhabitedType()),
11181127
)
11191128

11201129
self.assert_meet(
11211130
self.tuple(self.fx.a, self.fx.a), self.fx.std_tuple, self.tuple(self.fx.a, self.fx.a)
11221131
)
1123-
self.assert_meet(self.tuple(self.fx.a), self.tuple(self.fx.a, self.fx.a), NoneType())
1132+
self.assert_meet(self.tuple(self.fx.a), self.tuple(self.fx.a, self.fx.a), UninhabitedType())
11241133

11251134
def test_function_types(self) -> None:
11261135
self.assert_meet(
@@ -1143,23 +1152,36 @@ def test_function_types(self) -> None:
11431152
def test_type_vars(self) -> None:
11441153
self.assert_meet(self.fx.t, self.fx.t, self.fx.t)
11451154
self.assert_meet(self.fx.s, self.fx.s, self.fx.s)
1146-
self.assert_meet(self.fx.t, self.fx.s, NoneType())
1155+
self.assert_meet(self.fx.t, self.fx.s, UninhabitedType())
11471156

11481157
def test_none(self) -> None:
11491158
self.assert_meet(NoneType(), NoneType(), NoneType())
11501159

11511160
self.assert_meet(NoneType(), self.fx.anyt, NoneType())
11521161

11531162
# Any type t joined with None results in None, unless t is Any.
1154-
for t in [
1155-
self.fx.a,
1156-
self.fx.o,
1157-
UnboundType("x"),
1158-
self.fx.t,
1159-
self.tuple(),
1160-
self.callable(self.fx.a, self.fx.b),
1161-
]:
1162-
self.assert_meet(t, NoneType(), NoneType())
1163+
with state.strict_optional_set(False):
1164+
for t in [
1165+
self.fx.a,
1166+
self.fx.o,
1167+
UnboundType("x"),
1168+
self.fx.t,
1169+
self.tuple(),
1170+
self.callable(self.fx.a, self.fx.b),
1171+
]:
1172+
self.assert_meet(t, NoneType(), NoneType())
1173+
1174+
with state.strict_optional_set(True):
1175+
self.assert_meet(self.fx.o, NoneType(), NoneType())
1176+
for t in [
1177+
self.fx.a,
1178+
# TODO: fix this is not currently symmetric
1179+
# UnboundType("x"),
1180+
self.fx.t,
1181+
self.tuple(),
1182+
self.callable(self.fx.a, self.fx.b),
1183+
]:
1184+
self.assert_meet(t, NoneType(), UninhabitedType())
11631185

11641186
def test_unbound_type(self) -> None:
11651187
self.assert_meet(UnboundType("x"), UnboundType("x"), self.fx.anyt)
@@ -1197,28 +1219,28 @@ def test_simple_generics(self) -> None:
11971219
self.assert_meet(self.fx.ga, self.fx.ga, self.fx.ga)
11981220
self.assert_meet(self.fx.ga, self.fx.o, self.fx.ga)
11991221
self.assert_meet(self.fx.ga, self.fx.gb, self.fx.gb)
1200-
self.assert_meet(self.fx.ga, self.fx.gd, self.fx.nonet)
1201-
self.assert_meet(self.fx.ga, self.fx.g2a, self.fx.nonet)
1222+
self.assert_meet(self.fx.ga, self.fx.gd, UninhabitedType())
1223+
self.assert_meet(self.fx.ga, self.fx.g2a, UninhabitedType())
12021224

1203-
self.assert_meet(self.fx.ga, self.fx.nonet, self.fx.nonet)
1225+
self.assert_meet(self.fx.ga, self.fx.nonet, UninhabitedType())
12041226
self.assert_meet(self.fx.ga, self.fx.anyt, self.fx.ga)
12051227

12061228
for t in [self.fx.a, self.fx.t, self.tuple(), self.callable(self.fx.a, self.fx.b)]:
1207-
self.assert_meet(t, self.fx.ga, self.fx.nonet)
1229+
self.assert_meet(t, self.fx.ga, UninhabitedType())
12081230

12091231
def test_generics_with_multiple_args(self) -> None:
12101232
self.assert_meet(self.fx.hab, self.fx.hab, self.fx.hab)
12111233
self.assert_meet(self.fx.hab, self.fx.haa, self.fx.hab)
1212-
self.assert_meet(self.fx.hab, self.fx.had, self.fx.nonet)
1234+
self.assert_meet(self.fx.hab, self.fx.had, UninhabitedType())
12131235
self.assert_meet(self.fx.hab, self.fx.hbb, self.fx.hbb)
12141236

12151237
def test_generics_with_inheritance(self) -> None:
12161238
self.assert_meet(self.fx.gsab, self.fx.gb, self.fx.gsab)
1217-
self.assert_meet(self.fx.gsba, self.fx.gb, self.fx.nonet)
1239+
self.assert_meet(self.fx.gsba, self.fx.gb, UninhabitedType())
12181240

12191241
def test_generics_with_inheritance_and_shared_supertype(self) -> None:
1220-
self.assert_meet(self.fx.gsba, self.fx.gs2a, self.fx.nonet)
1221-
self.assert_meet(self.fx.gsab, self.fx.gs2a, self.fx.nonet)
1242+
self.assert_meet(self.fx.gsba, self.fx.gs2a, UninhabitedType())
1243+
self.assert_meet(self.fx.gsab, self.fx.gs2a, UninhabitedType())
12221244

12231245
def test_generic_types_and_dynamic(self) -> None:
12241246
self.assert_meet(self.fx.gdyn, self.fx.ga, self.fx.ga)
@@ -1232,33 +1254,33 @@ def test_callables_with_dynamic(self) -> None:
12321254

12331255
def test_meet_interface_types(self) -> None:
12341256
self.assert_meet(self.fx.f, self.fx.f, self.fx.f)
1235-
self.assert_meet(self.fx.f, self.fx.f2, self.fx.nonet)
1257+
self.assert_meet(self.fx.f, self.fx.f2, UninhabitedType())
12361258
self.assert_meet(self.fx.f, self.fx.f3, self.fx.f3)
12371259

12381260
def test_meet_interface_and_class_types(self) -> None:
12391261
self.assert_meet(self.fx.o, self.fx.f, self.fx.f)
1240-
self.assert_meet(self.fx.a, self.fx.f, self.fx.nonet)
1262+
self.assert_meet(self.fx.a, self.fx.f, UninhabitedType())
12411263

12421264
self.assert_meet(self.fx.e, self.fx.f, self.fx.e)
12431265

12441266
def test_meet_class_types_with_shared_interfaces(self) -> None:
12451267
# These have nothing special with respect to meets, unlike joins. These
12461268
# are for completeness only.
1247-
self.assert_meet(self.fx.e, self.fx.e2, self.fx.nonet)
1248-
self.assert_meet(self.fx.e2, self.fx.e3, self.fx.nonet)
1269+
self.assert_meet(self.fx.e, self.fx.e2, UninhabitedType())
1270+
self.assert_meet(self.fx.e2, self.fx.e3, UninhabitedType())
12491271

12501272
def test_meet_with_generic_interfaces(self) -> None:
12511273
fx = InterfaceTypeFixture()
12521274
self.assert_meet(fx.gfa, fx.m1, fx.m1)
12531275
self.assert_meet(fx.gfa, fx.gfa, fx.gfa)
1254-
self.assert_meet(fx.gfb, fx.m1, fx.nonet)
1276+
self.assert_meet(fx.gfb, fx.m1, UninhabitedType())
12551277

12561278
def test_type_type(self) -> None:
12571279
self.assert_meet(self.fx.type_a, self.fx.type_b, self.fx.type_b)
12581280
self.assert_meet(self.fx.type_b, self.fx.type_any, self.fx.type_b)
12591281
self.assert_meet(self.fx.type_b, self.fx.type_type, self.fx.type_b)
1260-
self.assert_meet(self.fx.type_b, self.fx.type_c, self.fx.nonet)
1261-
self.assert_meet(self.fx.type_c, self.fx.type_d, self.fx.nonet)
1282+
self.assert_meet(self.fx.type_b, self.fx.type_c, self.fx.type_never)
1283+
self.assert_meet(self.fx.type_c, self.fx.type_d, self.fx.type_never)
12621284
self.assert_meet(self.fx.type_type, self.fx.type_any, self.fx.type_any)
12631285
self.assert_meet(self.fx.type_b, self.fx.anyt, self.fx.type_b)
12641286

mypy/test/typefixture.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ def make_type_var(
216216
self.type_d = TypeType.make_normalized(self.d)
217217
self.type_t = TypeType.make_normalized(self.t)
218218
self.type_any = TypeType.make_normalized(self.anyt)
219+
self.type_never = TypeType.make_normalized(UninhabitedType())
219220

220221
self._add_bool_dunder(self.bool_type_info)
221222
self._add_bool_dunder(self.ai)

0 commit comments

Comments
 (0)