mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-11 10:58:26 +00:00
Adding tests with generic records.
This commit is contained in:
parent
0ee608625d
commit
026dc4c813
@ -2219,6 +2219,40 @@ public class Exhaustiveness extends TestRunner {
|
||||
record Root(Base b1, Base b2, Base b3) {}
|
||||
}
|
||||
""");
|
||||
doTest(base,
|
||||
new String[0],
|
||||
"""
|
||||
package test;
|
||||
public class Test {
|
||||
private int test(Root<Base> r) {
|
||||
return switch (r) {
|
||||
case Root(R1 _, _, _) -> 0;
|
||||
case Root(R2 _, R1 _, _) -> 0;
|
||||
case Root(R2 _, R2 _, R1 _) -> 0;
|
||||
case Root(R2 _, R2(R1 _, R1 _), R2(R1 _, R1 _)) -> 0;
|
||||
case Root(R2 _, R2(R1 _, R1 _), R2(R1 _, R2 _)) -> 0;
|
||||
case Root(R2 _, R2(R1 _, R1 _), R2(R2 _, R1 _)) -> 0;
|
||||
case Root(R2 _, R2(R1 _, R1 _), R2(R2 _, R2 _)) -> 0;
|
||||
case Root(R2 _, R2(R1 _, R2 _), R2(R1 _, R1 _)) -> 0;
|
||||
case Root(R2 _, R2(R1 _, R2 _), R2(R1 _, R2 _)) -> 0;
|
||||
case Root(R2 _, R2(R1 _, R2 _), R2(R2 _, R1 _)) -> 0;
|
||||
case Root(R2 _, R2(R1 _, R2 _), R2(R2 _, R2 _)) -> 0;
|
||||
case Root(R2 _, R2(R2 _, R1 _), R2(R1 _, R1 _)) -> 0;
|
||||
case Root(R2 _, R2(R2 _, R1 _), R2(R1 _, R2 _)) -> 0;
|
||||
case Root(R2 _, R2(R2 _, R1 _), R2(R2 _, R1 _)) -> 0;
|
||||
case Root(R2 _, R2(R2 _, R1 _), R2(R2 _, R2 _)) -> 0;
|
||||
case Root(R2 _, R2(R2 _, R2 _), R2(R1 _, R1 _)) -> 0;
|
||||
case Root(R2 _, R2(R2 _, R2 _), R2(R1 _, R2 _)) -> 0;
|
||||
case Root(R2 _, R2(R2 _, R2 _), R2(R2 _, R1 _)) -> 0;
|
||||
case Root(R2 _, R2(R2 _, R2 _), R2 _) -> 0; //functionally equivalent to: Root(R2 _, R2(R2 _, R2 _), R2(R2 _, R2 _))
|
||||
};
|
||||
}
|
||||
sealed interface Base {}
|
||||
record R1() implements Base {}
|
||||
record R2(Base b1, Base b2) implements Base {}
|
||||
record Root<T>(T b1, T b2, T b3) {}
|
||||
}
|
||||
""");
|
||||
}
|
||||
|
||||
@Test //JDK-8364991
|
||||
@ -2250,6 +2284,33 @@ public class Exhaustiveness extends TestRunner {
|
||||
record Root(R2 b2, R2 b3) {}
|
||||
}
|
||||
""");
|
||||
doTest(base,
|
||||
new String[0],
|
||||
"""
|
||||
package test;
|
||||
public class Test {
|
||||
private int test1(Root<R2<Base>> r) {
|
||||
return switch (r) {
|
||||
case Root(R2(R1 _), R2(R1 _)) -> 0;
|
||||
case Root(R2(R1 _), R2(R2 _)) -> 0;
|
||||
case Root(R2(R2 _), R2(R1 _)) -> 0;
|
||||
case Root(R2(R2 _), R2 _) -> 0;
|
||||
};
|
||||
}
|
||||
private int test2(Root<R2<Base>> r) {
|
||||
return switch (r) {
|
||||
case Root(R2(R1 _), R2(R1 _)) -> 0;
|
||||
case Root(R2(R2 _), R2(R1 _)) -> 0;
|
||||
case Root(R2(R1 _), R2(R2 _)) -> 0;
|
||||
case Root(R2 _, R2(R2 _)) -> 0;
|
||||
};
|
||||
}
|
||||
sealed interface Base {}
|
||||
record R1() implements Base {}
|
||||
record R2<T>(T b1) implements Base {}
|
||||
record Root<T>(T b2, T b3) {}
|
||||
}
|
||||
""");
|
||||
}
|
||||
|
||||
@Test //JDK-8364991
|
||||
@ -2274,6 +2335,26 @@ public class Exhaustiveness extends TestRunner {
|
||||
""",
|
||||
"Test.java:4:16: compiler.err.not.exhaustive",
|
||||
"1 error");
|
||||
doTest(base,
|
||||
new String[0],
|
||||
"""
|
||||
package test;
|
||||
public class Test {
|
||||
private int test(Root<R2<Base>> r) {
|
||||
return switch (r) {
|
||||
case Root(R2 _, R2(R1 _)) -> 0;
|
||||
case Root(R2(R1 _), R2(R2 _)) -> 0;
|
||||
case Root(R2(R2 _), R2 _) -> 0;
|
||||
};
|
||||
}
|
||||
sealed interface Base {}
|
||||
record R1() implements Base {}
|
||||
record R2<T>(T b) implements Base {}
|
||||
record Root<T>(T b2, T b3) {}
|
||||
}
|
||||
""",
|
||||
"Test.java:4:16: compiler.err.not.exhaustive",
|
||||
"1 error");
|
||||
}
|
||||
|
||||
private void doTest(Path base, String[] libraryCode, String testCode, String... expectedErrors) throws IOException {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user