いまさらなのかもしれないですがString#toLowerCase()は実行環境のロケール依存なのでちゃんと引数にLocale.ENGLISHを渡してあげると思った通りの結果が出ますよという話です。日本語環境だけで動かすと気づかないですよね…
testTr()だけfailedになります。トルコ語環境以外でも起きるかもしれません
package example;
import static org.junit.Assert.*;
import java.util.Locale;
import org.junit.Test;
public class LocaleTestCase {
@Test
public void testJa() {
Locale.setDefault(Locale.JAPANESE);
String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
String lower = "abcdefghijklmnopqrstuvwxyz";
assertEquals(lower, upper.toLowerCase());
}
@Test
public void testTr() {
Locale tr = new Locale("tr");
Locale.setDefault(tr);
String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
String lower = "abcdefghijklmnopqrstuvwxyz";
// iが一致しない
assertEquals(lower, upper.toLowerCase());
}
@Test
public void testTr2() {
Locale tr = new Locale("tr");
Locale.setDefault(tr);
String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
String lower = "abcdefghijklmnopqrstuvwxyz";
assertEquals(lower, upper.toLowerCase(Locale.ENGLISH));
}
}