From 69f4698ca0cdff32471846c47e2672c13cd7c1c3 Mon Sep 17 00:00:00 2001 From: Nathan Rauh Date: Tue, 5 Mar 2024 14:39:14 -0600 Subject: [PATCH 1/3] Reenable TCK test covering multiple streams after switching from Streamable to List Signed-off-by: Nathan Rauh --- .../framework/read/only/AsciiCharacters.java | 3 +- .../data/standalone/entity/EntityTests.java | 70 +++++++++---------- 2 files changed, 37 insertions(+), 36 deletions(-) diff --git a/tck/src/main/java/ee/jakarta/tck/data/framework/read/only/AsciiCharacters.java b/tck/src/main/java/ee/jakarta/tck/data/framework/read/only/AsciiCharacters.java index 52bdb8eb1..95028c4be 100644 --- a/tck/src/main/java/ee/jakarta/tck/data/framework/read/only/AsciiCharacters.java +++ b/tck/src/main/java/ee/jakarta/tck/data/framework/read/only/AsciiCharacters.java @@ -16,6 +16,7 @@ package ee.jakarta.tck.data.framework.read.only; import java.util.Collection; +import java.util.List; import java.util.Optional; import java.util.Set; import java.util.stream.Stream; @@ -64,7 +65,7 @@ Stream findByHexadecimalIgnoreCaseBetweenAndHexadecimalNotIn(Str Page findByNumericValueBetween(int min, int max, PageRequest pagination); -// Streamable findByNumericValueLessThanEqualAndNumericValueGreaterThanEqual(int max, int min); + List findByNumericValueLessThanEqualAndNumericValueGreaterThanEqual(int max, int min); AsciiCharacter[] findFirst3ByNumericValueGreaterThanEqualAndHexadecimalEndsWith(long minValue, String lastHexDigit, Sort sort); diff --git a/tck/src/main/java/ee/jakarta/tck/data/standalone/entity/EntityTests.java b/tck/src/main/java/ee/jakarta/tck/data/standalone/entity/EntityTests.java index 04fbb958f..dca5f1030 100644 --- a/tck/src/main/java/ee/jakarta/tck/data/standalone/entity/EntityTests.java +++ b/tck/src/main/java/ee/jakarta/tck/data/standalone/entity/EntityTests.java @@ -812,7 +812,7 @@ public void testFirstCursoredPageOf8AndNextPages() { strategy = "Request the first CursoredPage of 6 results, expecting to find all 6, " + "then request the next CursoredPage and the CursoredPage after that, " + "expecting to find all results.") - public void testFirstKeysetAwareSliceOf6AndNextSlices() { + public void testFirstCursoredPageWithoutTotalOf6AndNextPages() { PageRequest first6 = PageRequest.of(NaturalNumber.class).size(6).withoutTotal(); CursoredPage slice; @@ -969,8 +969,8 @@ public void testIgnoreCase() { } @Assertion(id = "133", - strategy = "Request a CursoredPage of 7 results after the keyset of the 20th result, expecting to find the next 7 results. " + - "Then request the CursoredPage before the keyset of the first entry of the page, expecting to find the previous 7 results. " + + strategy = "Request a CursoredPage of 7 results after the cursor of the 20th result, expecting to find the next 7 results. " + + "Then request the CursoredPage before the cursor of the first entry of the page, expecting to find the previous 7 results. " + "Then request the CursoredPage after the last entry of the original slice, expecting to find the next 7.") public void testCursoredPageOf7FromCursor() { // The query for this test returns 1-35 and 49 in the following order: @@ -1081,10 +1081,10 @@ public void testCursoredPageOfNothing() { } @Assertion(id = "133", - strategy = "Request a CursoredPage of 9 results after the keyset of the 20th result, expecting to find the next 9 results. " + - "Then request the CursoredPage before the keyset of the first entry of the slice, expecting to find the previous 9 results. " + + strategy = "Request a CursoredPage of 9 results after the cursor of the 20th result, expecting to find the next 9 results. " + + "Then request the CursoredPage before the cursor of the first entry of the slice, expecting to find the previous 9 results. " + "Then request the CursoredPage after the last entry of the original slice, expecting to find the next 9.") - public void testKeysetAwareSliceOf9FromCursor() { + public void testCursoredPageWithoutTotalOf9FromCursor() { // The query for this test returns composite natural numbers under 64 in the following order: // // 49 50 51 52 54 55 56 57 58 60 62 63 36 38 39 40 42 44 45 46 48 25 26 27 28 30 32 33 34 35 16 18 20 21 22 24 09 10 12 14 15 04 06 08 @@ -1145,7 +1145,7 @@ public void testKeysetAwareSliceOf9FromCursor() { } @Assertion(id = "133", strategy = "Request a CursoredPage of results where none match the query, expecting an empty CursoredPage with 0 results.") - public void testKeysetAwareSliceOfNothing() { + public void testCursoredPageWithoutTotalOfNothing() { // There are no numbers larger than 30 which have a square root that rounds down to 3. PageRequest pagination = PageRequest.of(NaturalNumber.class).size(33).afterKeyset(30L).withoutTotal(); @@ -1454,34 +1454,34 @@ public void testStaticMetamodelDescendingSortsPreGenerated() { assertEquals('d', found[1].getThisCharacter()); assertEquals('T', found[2].getThisCharacter()); } -// -// @Assertion(id = "133", strategy = "Use a repository method that returns Streamable and verify the results.") -// public void testStreamable() { -// Streamable chars = characters.findByNumericValueLessThanEqualAndNumericValueGreaterThanEqual(109, 101); -// -// assertEquals(Arrays.toString(new Character[] { Character.valueOf('e'), -// Character.valueOf('f'), -// Character.valueOf('g'), -// Character.valueOf('h'), -// Character.valueOf('i'), -// Character.valueOf('j'), -// Character.valueOf('k'), -// Character.valueOf('l'), -// Character.valueOf('m') }), -// Arrays.toString(chars.stream().map(ch -> ch.getThisCharacter()).sorted().toArray())); -// -// assertEquals(101 + 102 + 103 + 104 + 105 + 106 + 107 + 108 + 109, -// chars.stream().mapToInt(AsciiCharacter::getNumericValue).sum()); -// -// Set sorted = new TreeSet<>(); -// chars.forEach(ch -> sorted.add(ch.getHexadecimal())); -// assertEquals(new TreeSet<>(Set.of("65", "66", "67", "68", "69", "6a", "6b", "6c", "6d")), -// sorted); -// -// Streamable empty = characters.findByNumericValueLessThanEqualAndNumericValueGreaterThanEqual(115, 120); -// assertEquals(false, empty.iterator().hasNext()); -// assertEquals(0L, empty.stream().count()); -// } + + @Assertion(id = "133", strategy = "Obtain multiple streams from the same List result of a repository method.") + public void testStreamsFromList() { + List chars = characters.findByNumericValueLessThanEqualAndNumericValueGreaterThanEqual(109, 101); + + assertEquals(Arrays.toString(new Character[] { Character.valueOf('e'), + Character.valueOf('f'), + Character.valueOf('g'), + Character.valueOf('h'), + Character.valueOf('i'), + Character.valueOf('j'), + Character.valueOf('k'), + Character.valueOf('l'), + Character.valueOf('m') }), + Arrays.toString(chars.stream().map(ch -> ch.getThisCharacter()).sorted().toArray())); + + assertEquals(101 + 102 + 103 + 104 + 105 + 106 + 107 + 108 + 109, + chars.stream().mapToInt(AsciiCharacter::getNumericValue).sum()); + + Set sorted = new TreeSet<>(); + chars.forEach(ch -> sorted.add(ch.getHexadecimal())); + assertEquals(new TreeSet<>(Set.of("65", "66", "67", "68", "69", "6a", "6b", "6c", "6d")), + sorted); + + List empty = characters.findByNumericValueLessThanEqualAndNumericValueGreaterThanEqual(115, 120); + assertEquals(false, empty.iterator().hasNext()); + assertEquals(0L, empty.stream().count()); + } @Assertion(id = "133", strategy = "Request the third Page of 10 results, expecting to find all 10. " + From 14658275b099a3b86741f9fd1ca72e80072e4e1a Mon Sep 17 00:00:00 2001 From: Nathan Rauh Date: Tue, 5 Mar 2024 14:57:37 -0600 Subject: [PATCH 2/3] Update TCK tests to have repository method return types that are supported by the spec --- .../tck/data/framework/read/only/AsciiCharacters.java | 3 +-- .../jakarta/tck/data/framework/read/only/IdOperations.java | 7 +++---- .../tck/data/framework/read/only/PositiveIntegers.java | 2 +- .../jakarta/tck/data/standalone/persistence/Catalog.java | 6 +++--- .../standalone/persistence/PersistenceEntityTests.java | 7 ++++--- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/tck/src/main/java/ee/jakarta/tck/data/framework/read/only/AsciiCharacters.java b/tck/src/main/java/ee/jakarta/tck/data/framework/read/only/AsciiCharacters.java index 95028c4be..955dfce38 100644 --- a/tck/src/main/java/ee/jakarta/tck/data/framework/read/only/AsciiCharacters.java +++ b/tck/src/main/java/ee/jakarta/tck/data/framework/read/only/AsciiCharacters.java @@ -15,7 +15,6 @@ */ package ee.jakarta.tck.data.framework.read.only; -import java.util.Collection; import java.util.List; import java.util.Optional; import java.util.Set; @@ -50,7 +49,7 @@ public interface AsciiCharacters extends DataRepository, I Optional find(@By("thisCharacter") char ch, @By("hexadecimal") String hex); - Collection findByHexadecimalContainsAndIsControlNot(String substring, boolean isPrintable); + List findByHexadecimalContainsAndIsControlNot(String substring, boolean isPrintable); Stream findByHexadecimalIgnoreCaseBetweenAndHexadecimalNotIn(String minHex, String maxHex, diff --git a/tck/src/main/java/ee/jakarta/tck/data/framework/read/only/IdOperations.java b/tck/src/main/java/ee/jakarta/tck/data/framework/read/only/IdOperations.java index 6dec72b30..028ba5f9f 100644 --- a/tck/src/main/java/ee/jakarta/tck/data/framework/read/only/IdOperations.java +++ b/tck/src/main/java/ee/jakarta/tck/data/framework/read/only/IdOperations.java @@ -15,8 +15,7 @@ */ package ee.jakarta.tck.data.framework.read.only; -import java.util.ArrayList; -import java.util.Collection; +import java.util.List; import java.util.stream.Stream; import jakarta.data.Limit; @@ -31,11 +30,11 @@ public interface IdOperations { Stream findByIdBetween(long minimum, long maximum, Sort sort); - Collection findByIdGreaterThanEqual(long minimum, + List findByIdGreaterThanEqual(long minimum, Limit limit, Order sorts); T[] findByIdLessThan(long exclusiveMax, Sort primarySort, Sort secondarySort); - ArrayList findByIdLessThanEqual(long maximum, Order sorts); + List findByIdLessThanEqual(long maximum, Order sorts); } \ No newline at end of file diff --git a/tck/src/main/java/ee/jakarta/tck/data/framework/read/only/PositiveIntegers.java b/tck/src/main/java/ee/jakarta/tck/data/framework/read/only/PositiveIntegers.java index 9442a582f..a7e02276c 100644 --- a/tck/src/main/java/ee/jakarta/tck/data/framework/read/only/PositiveIntegers.java +++ b/tck/src/main/java/ee/jakarta/tck/data/framework/read/only/PositiveIntegers.java @@ -45,7 +45,7 @@ CursoredPage findByFloorOfSquareRootNotAndIdLessThanOrderByBitsRe long eclusiveMax, PageRequest pagination); - Iterable findByIsOddTrueAndIdLessThanEqualOrderByIdDesc(long max); + List findByIsOddTrueAndIdLessThanEqualOrderByIdDesc(long max); List findByIsOddFalseAndIdBetween(long min, long max); diff --git a/tck/src/main/java/ee/jakarta/tck/data/standalone/persistence/Catalog.java b/tck/src/main/java/ee/jakarta/tck/data/standalone/persistence/Catalog.java index acd0bb9e3..34f7b2038 100644 --- a/tck/src/main/java/ee/jakarta/tck/data/standalone/persistence/Catalog.java +++ b/tck/src/main/java/ee/jakarta/tck/data/standalone/persistence/Catalog.java @@ -77,9 +77,9 @@ public interface Catalog extends DataRepository { @OrderBy("name") Product[] findByDepartmentsContains(Department department); - LinkedList findByDepartmentsEmpty(); + Stream findByDepartmentsEmpty(); - Iterable findByIdBetween(String first, String last, Order sorts); + List findByIdBetween(String first, String last, Order sorts); List findByNameLike(String name); @@ -88,7 +88,7 @@ public interface Catalog extends DataRepository { @OrderBy(value = "price", descending = true) Stream findByPriceNotNullAndPriceLessThanEqual(double maxPrice); - Collection findByPriceNull(); + List findByPriceNull(); EntityManager getEntityManager(); diff --git a/tck/src/main/java/ee/jakarta/tck/data/standalone/persistence/PersistenceEntityTests.java b/tck/src/main/java/ee/jakarta/tck/data/standalone/persistence/PersistenceEntityTests.java index 3790b39d5..35a9f6769 100644 --- a/tck/src/main/java/ee/jakarta/tck/data/standalone/persistence/PersistenceEntityTests.java +++ b/tck/src/main/java/ee/jakarta/tck/data/standalone/persistence/PersistenceEntityTests.java @@ -92,10 +92,11 @@ public void testEmpty() { catalog.save(Product.of("book", 15.98, "TEST-PROD-42")); catalog.save(Product.of("baseball cap", 10.99, "TEST-PROD-43", Department.SPORTING_GOODS, Department.CLOTHING)); - LinkedList found = catalog.findByDepartmentsEmpty(); + Stream found = catalog.findByDepartmentsEmpty(); - assertEquals(1, found.size()); - assertEquals("book", found.getFirst().getName()); + assertEquals(List.of("book"), + found.map(Product::getName) + .collect(Collectors.toList())); assertEquals(3L, catalog.deleteByProductNumLike("TEST-PROD-%")); } From 7d87a646cdc2518f5fdc2b98736f9495245a7434 Mon Sep 17 00:00:00 2001 From: Nathan Rauh Date: Tue, 5 Mar 2024 16:03:00 -0600 Subject: [PATCH 3/3] remove unused imports --- .../ee/jakarta/tck/data/standalone/persistence/Catalog.java | 2 -- .../tck/data/standalone/persistence/PersistenceEntityTests.java | 1 - 2 files changed, 3 deletions(-) diff --git a/tck/src/main/java/ee/jakarta/tck/data/standalone/persistence/Catalog.java b/tck/src/main/java/ee/jakarta/tck/data/standalone/persistence/Catalog.java index 34f7b2038..3d69e7522 100644 --- a/tck/src/main/java/ee/jakarta/tck/data/standalone/persistence/Catalog.java +++ b/tck/src/main/java/ee/jakarta/tck/data/standalone/persistence/Catalog.java @@ -15,8 +15,6 @@ */ package ee.jakarta.tck.data.standalone.persistence; -import java.util.Collection; -import java.util.LinkedList; import java.util.List; import java.util.Optional; import java.util.stream.Stream; diff --git a/tck/src/main/java/ee/jakarta/tck/data/standalone/persistence/PersistenceEntityTests.java b/tck/src/main/java/ee/jakarta/tck/data/standalone/persistence/PersistenceEntityTests.java index 35a9f6769..6c749e124 100644 --- a/tck/src/main/java/ee/jakarta/tck/data/standalone/persistence/PersistenceEntityTests.java +++ b/tck/src/main/java/ee/jakarta/tck/data/standalone/persistence/PersistenceEntityTests.java @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; -import java.util.LinkedList; import java.util.List; import java.util.Optional; import java.util.Set;