1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.tika.parser.mp3;
18
19 import java.io.ByteArrayInputStream;
20 import java.io.InputStream;
21
22 import junit.framework.TestCase;
23
24 import org.apache.tika.metadata.Metadata;
25 import org.apache.tika.parser.AutoDetectParser;
26 import org.apache.tika.parser.Parser;
27 import org.apache.tika.sax.BodyContentHandler;
28 import org.xml.sax.ContentHandler;
29
30
31
32
33 public class Mp3ParserTest extends TestCase {
34
35
36
37
38 public void testMp3ParsingID3v1() throws Exception {
39 Parser parser = new AutoDetectParser();
40 ContentHandler handler = new BodyContentHandler();
41 Metadata metadata = new Metadata();
42
43 InputStream stream = Mp3ParserTest.class.getResourceAsStream(
44 "/test-documents/testMP3id3v1.mp3");
45 try {
46 parser.parse(stream, handler, metadata);
47 } finally {
48 stream.close();
49 }
50
51 assertEquals("audio/mpeg", metadata.get(Metadata.CONTENT_TYPE));
52 assertEquals("Test Title", metadata.get(Metadata.TITLE));
53 assertEquals("Test Artist", metadata.get(Metadata.AUTHOR));
54
55 String content = handler.toString();
56 assertTrue(content.contains("Test Title"));
57 assertTrue(content.contains("Test Artist"));
58 assertTrue(content.contains("Test Album"));
59 assertTrue(content.contains("2008"));
60 assertTrue(content.contains("Test Comment"));
61 assertTrue(content.contains("Rock"));
62
63 assertEquals("MPEG 3 Layer III Version 1", metadata.get("version"));
64 assertEquals("44100", metadata.get("samplerate"));
65 assertEquals("2", metadata.get("channels"));
66 }
67
68
69
70
71
72 public void testMp3ParsingID3v2() throws Exception {
73 Parser parser = new AutoDetectParser();
74 ContentHandler handler = new BodyContentHandler();
75 Metadata metadata = new Metadata();
76
77 InputStream stream = Mp3ParserTest.class.getResourceAsStream(
78 "/test-documents/testMP3id3v2.mp3");
79 try {
80 parser.parse(stream, handler, metadata);
81 } finally {
82 stream.close();
83 }
84
85 assertEquals("audio/mpeg", metadata.get(Metadata.CONTENT_TYPE));
86 assertEquals("Test Title", metadata.get(Metadata.TITLE));
87 assertEquals("Test Artist", metadata.get(Metadata.AUTHOR));
88
89 String content = handler.toString();
90 assertTrue(content.contains("Test Title"));
91 assertTrue(content.contains("Test Artist"));
92 assertTrue(content.contains("Test Album"));
93 assertTrue(content.contains("2008"));
94 assertTrue(content.contains("Test Comment"));
95 assertTrue(content.contains("Rock"));
96
97 assertEquals("MPEG 3 Layer III Version 1", metadata.get("version"));
98 assertEquals("44100", metadata.get("samplerate"));
99 assertEquals("2", metadata.get("channels"));
100 }
101
102
103
104
105
106 public void testMp3ParsingID3v1v2() throws Exception {
107 Parser parser = new AutoDetectParser();
108 ContentHandler handler = new BodyContentHandler();
109 Metadata metadata = new Metadata();
110
111 InputStream stream = Mp3ParserTest.class.getResourceAsStream(
112 "/test-documents/testMP3id3v1_v2.mp3");
113 try {
114 parser.parse(stream, handler, metadata);
115 } finally {
116 stream.close();
117 }
118
119 assertEquals("audio/mpeg", metadata.get(Metadata.CONTENT_TYPE));
120 assertEquals("Test Title", metadata.get(Metadata.TITLE));
121 assertEquals("Test Artist", metadata.get(Metadata.AUTHOR));
122
123 String content = handler.toString();
124 assertTrue(content.contains("Test Title"));
125 assertTrue(content.contains("Test Artist"));
126 assertTrue(content.contains("Test Album"));
127 assertTrue(content.contains("2008"));
128 assertTrue(content.contains("Test Comment"));
129 assertTrue(content.contains("Rock"));
130
131 assertEquals("MPEG 3 Layer III Version 1", metadata.get("version"));
132 assertEquals("44100", metadata.get("samplerate"));
133 assertEquals("2", metadata.get("channels"));
134 }
135
136 public void testID3v2Frame() throws Exception {
137 byte[] empty = new byte[] {
138 0x49, 0x44, 0x33, 3, 1, 0,
139 0, 0, 0, 0
140 };
141
142 assertEquals(11, ID3v2Frame.getInt(new byte[] {0,0,0,0x0b}));
143 assertEquals(257, ID3v2Frame.getInt(new byte[] {0,0,1,1}));
144
145 ID3v2Frame f = (ID3v2Frame)
146 ID3v2Frame.createFrameIfPresent(new ByteArrayInputStream(empty));
147 assertEquals(3, f.getMajorVersion());
148 assertEquals(1, f.getMinorVersion());
149 assertEquals(0, f.getFlags());
150 assertEquals(0, f.getLength());
151 assertEquals(0, f.getData().length);
152 }
153 }