Test proper detection of character set encodings
b/5564857
Change-Id: Id231f1d3e59fb2d8a05d2fff95ea1e050b6f68a9
diff --git a/tests/tests/media/res/raw/big5_1.mp3 b/tests/tests/media/res/raw/big5_1.mp3
new file mode 100644
index 0000000..faa3eb4
--- /dev/null
+++ b/tests/tests/media/res/raw/big5_1.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/big5_2.mp3 b/tests/tests/media/res/raw/big5_2.mp3
new file mode 100644
index 0000000..a69da4f
--- /dev/null
+++ b/tests/tests/media/res/raw/big5_2.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/cp1251_3.mp3 b/tests/tests/media/res/raw/cp1251_3.mp3
new file mode 100644
index 0000000..179a1a5
--- /dev/null
+++ b/tests/tests/media/res/raw/cp1251_3.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/cp1251_4.mp3 b/tests/tests/media/res/raw/cp1251_4.mp3
new file mode 100644
index 0000000..3df1d32
--- /dev/null
+++ b/tests/tests/media/res/raw/cp1251_4.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/cp1251_5.mp3 b/tests/tests/media/res/raw/cp1251_5.mp3
new file mode 100644
index 0000000..46df442
--- /dev/null
+++ b/tests/tests/media/res/raw/cp1251_5.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/cp1251_6.mp3 b/tests/tests/media/res/raw/cp1251_6.mp3
new file mode 100644
index 0000000..545834d
--- /dev/null
+++ b/tests/tests/media/res/raw/cp1251_6.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/cp1251_v1.mp3 b/tests/tests/media/res/raw/cp1251_v1.mp3
new file mode 100644
index 0000000..173d970
--- /dev/null
+++ b/tests/tests/media/res/raw/cp1251_v1.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/cp1251_v1v2.mp3 b/tests/tests/media/res/raw/cp1251_v1v2.mp3
new file mode 100644
index 0000000..abffa92
--- /dev/null
+++ b/tests/tests/media/res/raw/cp1251_v1v2.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/gb18030_1.mp3 b/tests/tests/media/res/raw/gb18030_1.mp3
new file mode 100644
index 0000000..dc63de5
--- /dev/null
+++ b/tests/tests/media/res/raw/gb18030_1.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/gb18030_2.mp3 b/tests/tests/media/res/raw/gb18030_2.mp3
new file mode 100644
index 0000000..6109c97
--- /dev/null
+++ b/tests/tests/media/res/raw/gb18030_2.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/gb18030_3.mp3 b/tests/tests/media/res/raw/gb18030_3.mp3
new file mode 100644
index 0000000..4fcb22f
--- /dev/null
+++ b/tests/tests/media/res/raw/gb18030_3.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/gb18030_4.mp3 b/tests/tests/media/res/raw/gb18030_4.mp3
new file mode 100644
index 0000000..fedffd7
--- /dev/null
+++ b/tests/tests/media/res/raw/gb18030_4.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/gb18030_5.mp3 b/tests/tests/media/res/raw/gb18030_5.mp3
new file mode 100644
index 0000000..70f76ce
--- /dev/null
+++ b/tests/tests/media/res/raw/gb18030_5.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/gb18030_6.mp3 b/tests/tests/media/res/raw/gb18030_6.mp3
new file mode 100644
index 0000000..b4817b2
--- /dev/null
+++ b/tests/tests/media/res/raw/gb18030_6.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/gb18030_7.mp3 b/tests/tests/media/res/raw/gb18030_7.mp3
new file mode 100644
index 0000000..7932596
--- /dev/null
+++ b/tests/tests/media/res/raw/gb18030_7.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/gb18030_8.mp3 b/tests/tests/media/res/raw/gb18030_8.mp3
new file mode 100644
index 0000000..f5f54de
--- /dev/null
+++ b/tests/tests/media/res/raw/gb18030_8.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/hebrew.mp3 b/tests/tests/media/res/raw/hebrew.mp3
new file mode 100644
index 0000000..59d76d8
--- /dev/null
+++ b/tests/tests/media/res/raw/hebrew.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/hebrew2.mp3 b/tests/tests/media/res/raw/hebrew2.mp3
new file mode 100644
index 0000000..d48cad2
--- /dev/null
+++ b/tests/tests/media/res/raw/hebrew2.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/iso88591_1.ogg b/tests/tests/media/res/raw/iso88591_1.ogg
new file mode 100644
index 0000000..c20bf34
--- /dev/null
+++ b/tests/tests/media/res/raw/iso88591_1.ogg
Binary files differ
diff --git a/tests/tests/media/res/raw/shiftjis1.mp3 b/tests/tests/media/res/raw/shiftjis1.mp3
new file mode 100644
index 0000000..1c50c76
--- /dev/null
+++ b/tests/tests/media/res/raw/shiftjis1.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/shiftjis2.mp3 b/tests/tests/media/res/raw/shiftjis2.mp3
new file mode 100644
index 0000000..808c597
--- /dev/null
+++ b/tests/tests/media/res/raw/shiftjis2.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/shiftjis3.mp3 b/tests/tests/media/res/raw/shiftjis3.mp3
new file mode 100644
index 0000000..820631b
--- /dev/null
+++ b/tests/tests/media/res/raw/shiftjis3.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/shiftjis4.mp3 b/tests/tests/media/res/raw/shiftjis4.mp3
new file mode 100644
index 0000000..3fbc25e
--- /dev/null
+++ b/tests/tests/media/res/raw/shiftjis4.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/shiftjis5.mp3 b/tests/tests/media/res/raw/shiftjis5.mp3
new file mode 100644
index 0000000..90520f8
--- /dev/null
+++ b/tests/tests/media/res/raw/shiftjis5.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/shiftjis6.mp3 b/tests/tests/media/res/raw/shiftjis6.mp3
new file mode 100644
index 0000000..5310936
--- /dev/null
+++ b/tests/tests/media/res/raw/shiftjis6.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/shiftjis7.mp3 b/tests/tests/media/res/raw/shiftjis7.mp3
new file mode 100644
index 0000000..6143126
--- /dev/null
+++ b/tests/tests/media/res/raw/shiftjis7.mp3
Binary files differ
diff --git a/tests/tests/media/res/raw/shiftjis8.mp3 b/tests/tests/media/res/raw/shiftjis8.mp3
new file mode 100644
index 0000000..c45c130
--- /dev/null
+++ b/tests/tests/media/res/raw/shiftjis8.mp3
Binary files differ
diff --git a/tests/tests/media/src/android/media/cts/MediaScannerTest.java b/tests/tests/media/src/android/media/cts/MediaScannerTest.java
index 2dafdc5..f873fbc 100644
--- a/tests/tests/media/src/android/media/cts/MediaScannerTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaScannerTest.java
@@ -367,6 +367,120 @@
assertTrue(new File(path2).delete());
}
+ static class MediaScanEntry {
+ MediaScanEntry(int r, String[] t) {
+ this.res = r;
+ this.tags = t;
+ }
+ int res;
+ String[] tags;
+ }
+
+ MediaScanEntry encodingtestfiles[] = {
+ new MediaScanEntry(R.raw.gb18030_1,
+ new String[] {"罗志祥", "2009年11月新歌", "罗志祥", "爱不单行(TV Version)", null} ),
+ new MediaScanEntry(R.raw.gb18030_2,
+ new String[] {"张杰", "明天过后", null, "明天过后", null} ),
+ new MediaScanEntry(R.raw.gb18030_3,
+ new String[] {"电视原声带", "格斗天王(限量精装版)(预购版)", null, "11.Open Arms.( cn808.net )", null} ),
+ new MediaScanEntry(R.raw.gb18030_4,
+ new String[] {"莫扎特", "黄金古典", "柏林爱乐乐团", "第25号交响曲", "莫扎特"} ),
+ new MediaScanEntry(R.raw.gb18030_5,
+ new String[] {"光良", "童话", "光良", "02.童话", "鍏夎壇"} ),
+ new MediaScanEntry(R.raw.gb18030_6,
+ new String[] {"张韶涵", "潘朵拉", "張韶涵", "隐形的翅膀", "王雅君"} ),
+ new MediaScanEntry(R.raw.gb18030_7,
+ new String[] {"五月天", "后青春期的诗", null, "突然好想你", null} ),
+ new MediaScanEntry(R.raw.gb18030_8,
+ new String[] {"周杰伦", "Jay", null, "反方向的钟", null} ),
+ new MediaScanEntry(R.raw.big5_1,
+ new String[] {"蘇永康", "So I Sing 08 Live", "蘇永康", "囍帖街", null} ),
+ new MediaScanEntry(R.raw.big5_2,
+ new String[] {"蘇永康", "So I Sing 08 Live", "蘇永康", "從不喜歡孤單一個 - 蘇永康/吳雨霏", null} ),
+ new MediaScanEntry(R.raw.cp1251_v1,
+ new String[] {"Екатерина Железнова", "Корабль игрушек", null, "Раз, два, три", null} ),
+ new MediaScanEntry(R.raw.cp1251_v1v2,
+ new String[] {"Мельница", "Перевал", null, "Королевна", null} ),
+ new MediaScanEntry(R.raw.cp1251_3,
+ new String[] {"Тату (tATu)", "200 По Встречной [Limited edi", null, "Я Сошла С Ума", null} ),
+ new MediaScanEntry(R.raw.cp1251_4,
+ new String[] {"Александр Розенбаум", "Философия любви", null, "Разговор в гостинице (Как жить без веры)", "А.Розенбаум"} ),
+ new MediaScanEntry(R.raw.cp1251_5,
+ new String[] {"Александр Розенбаум", "Философия любви", null, "Четвертиночка", "А.Розенбаум"} ),
+ new MediaScanEntry(R.raw.cp1251_6,
+ new String[] {"Александр Розенбаум", "Философия ремесла", null, "Ну, вот...", "А.Розенбаум"} ),
+ new MediaScanEntry(R.raw.shiftjis1,
+ new String[] {"", "", null, "中島敦「山月記」(第1回)", null} ),
+ new MediaScanEntry(R.raw.shiftjis2,
+ new String[] {"音人", "SoundEffects", null, "ファンファーレ", null} ),
+ new MediaScanEntry(R.raw.shiftjis3,
+ new String[] {"音人", "SoundEffects", null, "シンキングタイム", null} ),
+ new MediaScanEntry(R.raw.shiftjis4,
+ new String[] {"音人", "SoundEffects", null, "出題", null} ),
+ new MediaScanEntry(R.raw.shiftjis5,
+ new String[] {"音人", "SoundEffects", null, "時報", null} ),
+ new MediaScanEntry(R.raw.shiftjis6,
+ new String[] {"音人", "SoundEffects", null, "正解", null} ),
+ new MediaScanEntry(R.raw.shiftjis7,
+ new String[] {"音人", "SoundEffects", null, "残念", null} ),
+ new MediaScanEntry(R.raw.shiftjis8,
+ new String[] {"音人", "SoundEffects", null, "間違い", null} ),
+ new MediaScanEntry(R.raw.iso88591_1,
+ new String[] {"Mozart", "Best of Mozart", null, "Overtüre (Die Hochzeit des Figaro)", null} ),
+ new MediaScanEntry(R.raw.hebrew,
+ new String[] {"אריק סיני", "", null, "לי ולך", null } ),
+ new MediaScanEntry(R.raw.hebrew2,
+ new String[] {"הפרוייקט של עידן רייכל", "Untitled - 11-11-02 (9)", null, "בואי", null } )
+ };
+
+ public void testEncodingDetection() throws Exception {
+ for (int i = 0; i< encodingtestfiles.length; i++) {
+ MediaScanEntry entry = encodingtestfiles[i];
+ String path = mFileDir + "/" + "encodingtest" + i + ".mp3";
+ writeFile(entry.res, path);
+ }
+
+ startMediaScanAndWait();
+
+ String columns[] = {
+ MediaStore.Audio.Media.ARTIST,
+ MediaStore.Audio.Media.ALBUM,
+ MediaStore.Audio.Media.ALBUM_ARTIST,
+ MediaStore.Audio.Media.TITLE,
+ MediaStore.Audio.Media.COMPOSER
+ };
+ ContentResolver res = mContext.getContentResolver();
+ for (int i = 0; i< encodingtestfiles.length; i++) {
+ MediaScanEntry entry = encodingtestfiles[i];
+ String path = mFileDir + "/" + "encodingtest" + i + ".mp3";
+ Cursor c = res.query(MediaStore.Audio.Media.getContentUri("external"), columns,
+ MediaStore.Audio.Media.DATA + "=?", new String[] {path}, null);
+ assertNotNull("null cursor", c);
+ assertEquals("wrong number or results", 1, c.getCount());
+ assertTrue("failed to move cursor", c.moveToFirst());
+
+ for (int j =0; j < 5; j++) {
+ String expected = entry.tags[j];
+ if ("".equals(expected)) {
+ // empty entry in the table means an unset id3 tag that is filled in by
+ // the media scanner, e.g. by using "<unknown>". Since this may be localized,
+ // don't check it for any particular value.
+ assertNotNull("unexpected null entry " + i + " field " + j + "(" + path + ")",
+ c.getString(j));
+ } else {
+ assertEquals("mismatch on entry " + i + " field " + j + "(" + path + ")",
+ expected, c.getString(j));
+ }
+ }
+ // clean up
+ new File(path).delete();
+ res.delete(MediaStore.Audio.Media.getContentUri("external"),
+ MediaStore.Audio.Media.DATA + "=?", new String[] {path});
+
+ c.close();
+ }
+ }
+
private void startMediaScanAndWait() throws InterruptedException {
ScannerNotificationReceiver finishedReceiver = new ScannerNotificationReceiver(
Intent.ACTION_MEDIA_SCANNER_FINISHED);