ノート

[SUB-TASK] 8379818: Refactor java/nio/file/Files/StreamLinesTest.java to use JUnit

StreamLinesTest を TestNG から JUnit へ移行し,OpTestCase への依存を取り除きました。

概要#

 java/nio/file/Files/StreamLinesTest.java は,Files.lines が​返すストリームの​挙動を​確認する​テストです1。​ この​テストは​ TestNG で​実行されており,java.util.stream.OpTestCase と​ TestData と​いう​ testlibrary 側の​補助クラスにも​依存していました2

 ところで,​昨今の​ net では​(と​いうか OpenJDK 全体で)​ TestNG を​ JUnit5 へ​移行しようと​いう​動きが​あるようです。

 今回の​修正では,​この​テストを​ JUnit へ​移行し,​TestNG と​ OpTestCase への​依存を​取り​除きました3。​ 具体的には,@DataProvider と​ @Test(dataProvider = "lines") を​,JUnit の​ @ParameterizedTest と​ @MethodSource("lines") に​置き換えます。

 withData(...).expectedResult(...).exercise() で​行っていた​検証は,Files.lines の​結果を​ toList() で​受け取り,assertEquals で​期待値と​比較する​形に​しました。

try (Stream<String> s = Files.lines(p, cs)) {
    assertEquals(expected, s.toList());
}

 ​これに​より,​テストの​実行基盤は​ testng/othervm から​ junit/othervm へ​変わり,/lib/testlibrary/bootlib や​ java.base/java.util.stream.OpTestCase の​ビルド指定も​不要に​なりました。

2026/03/18 JBS で​発見#

 本件は,​既存テストを​ JUnit へ​移行する​一連の​作業の​一部と​して​ JBS で​発見しました。​ StreamLinesTest は​単純な​ TestNG テストではなく,OpTestCase を​継承していた​ため,​単に​アノテーションを​置き換えるだけでは​済みませんでした。

 まず,​データ生成側は​ Object[][] を​返す TestNG の​ DataProvider から,Stream<Arguments> を​返す JUnit の​ MethodSource へ​変更しました。​ 加えて,​説明文字列は​アサーションには​使わないため,​JUnit の​ Arguments.argumentSet に​渡して,​テスト表示名と​して​扱う​形に​しました4

static Arguments of(String description, IntFunction<String> lineGenerator,
                    IntFunction<LineSeparator> separatorGenerator, int n, Charset cs) {
    return Arguments.argumentSet(description, lineGenerator, separatorGenerator, n, cs);
}

2026/03/19-26 レビュー対応#

 レビュー中には,​まず public 修飾子が​不要であるとの​指摘を​いただき,​これを​削除しました。​ また,​Marcono12345 氏から,​説明文字列を​引数と​して​渡すより​ Arguments.argumentSet を​使う方が​適しているとの​コメントを​いただき,​その​形へ​変更しました。

 ​その​後,​Brian Burkhalter6 氏から,​import の​順序,​および​補助メソッド checkLines の​必要性に​ついて​レビューを​いただきました。

 たしかに​ List#equals が​要素数も​含めて​比較する​ため,​個別に​サイズを​確認する​処理は​冗長です。​ その​ため checkLines を​削除して,assertEquals(expected, s.toList()) へ​直接置き換えました。

2026/03/26 統合リクエスト#

 Burkhalter6 氏に​ Approve されました。​ レビューを​確認したのち,/integrate を​行い,​統合リクエストを​行いました。

2026/03/27 統合#

 同氏に​ /sponsor を​していただき,1ed1bb87 と​して​ JDK へ​統合されました。


Footnotes#

  1. 2