1
package org.jaudiotagger.tag.id3;
3
import junit.framework.Test;
4
import junit.framework.TestCase;
5
import junit.framework.TestSuite;
6
import org.jaudiotagger.AbstractTestCase;
7
import org.jaudiotagger.audio.AudioFile;
8
import org.jaudiotagger.audio.AudioFileIO;
9
import org.jaudiotagger.audio.mp3.MP3File;
10
import org.jaudiotagger.tag.TagFieldKey;
11
import org.jaudiotagger.tag.TagOptionSingleton;
12
import org.jaudiotagger.tag.id3.framebody.*;
19
public class ID3v22TagTest extends TestCase
26
public ID3v22TagTest(String arg0)
32
* Command line entrance.
36
public static void main(String[] args)
38
junit.textui.TestRunner.run(ID3v22TagTest.suite());
41
/////////////////////////////////////////////////////////////////////////
42
// TestCase classes to override
43
/////////////////////////////////////////////////////////////////////////
48
protected void setUp()
50
TagOptionSingleton.getInstance().setToDefault();
56
protected void tearDown()
64
// protected void runTest()
69
* Builds the Test Suite.
71
* @return the Test Suite.
73
public static Test suite()
75
return new TestSuite(ID3v22TagTest.class);
78
/////////////////////////////////////////////////////////////////////////
80
/////////////////////////////////////////////////////////////////////////
83
public void testCreateIDv22Tag()
85
ID3v22Tag v2Tag = new ID3v22Tag();
86
assertEquals((byte) 2, v2Tag.getRelease());
87
assertEquals((byte) 2, v2Tag.getMajorVersion());
88
assertEquals((byte) 0, v2Tag.getRevision());
91
public void testCreateID3v22FromID3v11()
93
ID3v11Tag v11Tag = ID3v11TagTest.getInitialisedTag();
94
ID3v22Tag v2Tag = new ID3v22Tag(v11Tag);
95
assertNotNull(v11Tag);
97
assertEquals(ID3v11TagTest.ARTIST, ((FrameBodyTPE1) ((ID3v22Frame) v2Tag.getFrame(ID3v22Frames.FRAME_ID_V2_ARTIST)).getBody()).getText());
98
assertEquals(ID3v11TagTest.ALBUM, ((FrameBodyTALB) ((ID3v22Frame) v2Tag.getFrame(ID3v22Frames.FRAME_ID_V2_ALBUM)).getBody()).getText());
99
assertEquals(ID3v11TagTest.COMMENT, ((FrameBodyCOMM) ((ID3v22Frame) v2Tag.getFrame(ID3v22Frames.FRAME_ID_V2_COMMENT)).getBody()).getText());
100
assertEquals(ID3v11TagTest.TITLE, ((FrameBodyTIT2) ((ID3v22Frame) v2Tag.getFrame(ID3v22Frames.FRAME_ID_V2_TITLE)).getBody()).getText());
101
assertEquals(ID3v11TagTest.TRACK_VALUE, ((FrameBodyTRCK) ((ID3v22Frame) v2Tag.getFrame(ID3v22Frames.FRAME_ID_V2_TRACK)).getBody()).getText());
102
assertTrue(((FrameBodyTCON) ((ID3v22Frame) v2Tag.getFrame(ID3v22Frames.FRAME_ID_V2_GENRE)).getBody()).getText().endsWith(ID3v11TagTest.GENRE_VAL));
104
//TODO:Note confusingly V22 YEAR Frame shave v2 identifier but use TDRC behind the scenes, is confusing
105
assertEquals(ID3v11TagTest.YEAR, ((FrameBodyTDRC) ((ID3v22Frame) v2Tag.getFrame(ID3v22Frames.FRAME_ID_V2_TYER)).getBody()).getText());
107
assertEquals((byte) 2, v2Tag.getRelease());
108
assertEquals((byte) 2, v2Tag.getMajorVersion());
109
assertEquals((byte) 0, v2Tag.getRevision());
112
public void testCreateIDv22TagAndSave()
114
Exception exception = null;
117
File testFile = AbstractTestCase.copyAudioToTmp("testV1.mp3");
118
MP3File mp3File = new MP3File(testFile);
119
ID3v22Tag v2Tag = new ID3v22Tag();
120
v2Tag.setTitle("fred");
121
v2Tag.setArtist("artist");
122
v2Tag.setAlbum("album");
124
assertEquals((byte) 2, v2Tag.getRelease());
125
assertEquals((byte) 2, v2Tag.getMajorVersion());
126
assertEquals((byte) 0, v2Tag.getRevision());
127
mp3File.setID3v2Tag(v2Tag);
130
//Read using new Interface
131
AudioFile v22File = AudioFileIO.read(testFile);
132
assertEquals("fred", v22File.getTag().getFirstTitle());
133
assertEquals("artist", v22File.getTag().getFirstArtist());
134
assertEquals("album", v22File.getTag().getFirstAlbum());
136
//Read using old Interface
137
mp3File = new MP3File(testFile);
138
v2Tag = (ID3v22Tag) mp3File.getID3v2Tag();
139
ID3v22Frame frame = (ID3v22Frame) v2Tag.getFrame(ID3v22Frames.FRAME_ID_V2_TITLE);
140
assertEquals("fred", ((AbstractFrameBodyTextInfo) frame.getBody()).getText());
147
assertNull(exception);
150
public void testv22TagWithUnnneccessaryTrailingNulls()
152
File orig = new File("testdata", "test24.mp3");
158
Exception exception = null;
161
File testFile = AbstractTestCase.copyAudioToTmp("test24.mp3");
162
AudioFile af = AudioFileIO.read(testFile);
163
MP3File m = (MP3File) af;
165
//Read using new Interface getFirst method with key
166
assertEquals("Listen to images:", af.getTag().getFirst(TagFieldKey.TITLE) + ":");
167
assertEquals("Clean:", af.getTag().getFirst(TagFieldKey.ALBUM) + ":");
168
assertEquals("Cosmo Vitelli:", af.getTag().getFirst(TagFieldKey.ARTIST) + ":");
169
assertEquals("Electronica/Dance:", af.getTag().getFirst(TagFieldKey.GENRE) + ":");
170
assertEquals("2003:", af.getTag().getFirst(TagFieldKey.YEAR) + ":");
171
assertEquals("1/11:", af.getTag().getFirst(TagFieldKey.TRACK) + ":");
173
//Read using new Interface getFirst method with String
174
assertEquals("Listen to images:", af.getTag().getFirst(ID3v22Frames.FRAME_ID_V2_TITLE) + ":");
175
assertEquals("Clean:", af.getTag().getFirst(ID3v22Frames.FRAME_ID_V2_ALBUM) + ":");
176
assertEquals("Cosmo Vitelli:", af.getTag().getFirst(ID3v22Frames.FRAME_ID_V2_ARTIST) + ":");
177
assertEquals("Electronica/Dance:", af.getTag().getFirst(ID3v22Frames.FRAME_ID_V2_GENRE) + ":");
178
assertEquals("2003:", af.getTag().getFirst(ID3v22Frames.FRAME_ID_V2_TYER) + ":");
179
assertEquals("1/11:", af.getTag().getFirst(ID3v22Frames.FRAME_ID_V2_TRACK) + ":");
181
//Read using new Interface getFirst methods for common fields
182
assertEquals("Listen to images:", af.getTag().getFirstTitle() + ":");
183
assertEquals("Cosmo Vitelli:", af.getTag().getFirstArtist() + ":");
184
assertEquals("Clean:", af.getTag().getFirstAlbum() + ":");
185
assertEquals("Electronica/Dance:", af.getTag().getFirstGenre() + ":");
186
assertEquals("2003:", af.getTag().getFirstYear() + ":");
187
assertEquals("1/11:", af.getTag().getFirstTrack() + ":");
189
//Read using old Interface
190
ID3v22Tag v2Tag = (ID3v22Tag) m.getID3v2Tag();
191
ID3v22Frame frame = (ID3v22Frame) v2Tag.getFrame(ID3v22Frames.FRAME_ID_V2_TITLE);
192
assertEquals("Listen to images\0:", ((AbstractFrameBodyTextInfo) frame.getBody()).getText() + ":");
193
frame = (ID3v22Frame) v2Tag.getFrame(ID3v22Frames.FRAME_ID_V2_ARTIST);
194
assertEquals("Cosmo Vitelli\0:", ((AbstractFrameBodyTextInfo) frame.getBody()).getText() + ":");
195
frame = (ID3v22Frame) v2Tag.getFrame(ID3v22Frames.FRAME_ID_V2_ALBUM);
196
assertEquals("Clean\0:", ((AbstractFrameBodyTextInfo) frame.getBody()).getText() + ":");
197
frame = (ID3v22Frame) v2Tag.getFrame(ID3v22Frames.FRAME_ID_V2_GENRE);
198
assertEquals("Electronica/Dance\0:", ((AbstractFrameBodyTextInfo) frame.getBody()).getText() + ":");
199
frame = (ID3v22Frame) v2Tag.getFrame(ID3v22Frames.FRAME_ID_V2_TYER);
200
assertEquals("2003\0:", ((AbstractFrameBodyTextInfo) frame.getBody()).getText() + ":");
201
frame = (ID3v22Frame) v2Tag.getFrame(ID3v22Frames.FRAME_ID_V2_TRACK);
202
assertEquals("1/11\0:", ((AbstractFrameBodyTextInfo) frame.getBody()).getText() + ":");
209
assertNull(exception);