~ubuntu-branches/ubuntu/utopic/libjaudiotagger-java/utopic

« back to all changes in this revision

Viewing changes to srctest/org/jaudiotagger/tag/id3/Unicode24NullTerminatedTagTest.java

  • Committer: Bazaar Package Importer
  • Author(s): Damien Raude-Morvan
  • Date: 2011-04-28 23:52:43 UTC
  • mfrom: (3.1.4 sid)
  • Revision ID: james.westby@ubuntu.com-20110428235243-pzalvw6lncis3ukf
Tags: 2.0.3-1
* d/control: Drop Depends on default-jre per Debian Java Policy as its
  a library package.
* d/watch: Fix to directly monitor SVN tags.
* Switch to 3.0 (quilt) format.
* Bump Standards-Version to 3.9.2 (no changes needed).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
package org.jaudiotagger.tag.id3;
2
 
 
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.exceptions.InvalidAudioFrameException;
8
 
import org.jaudiotagger.audio.exceptions.ReadOnlyFileException;
9
 
import org.jaudiotagger.audio.mp3.MP3File;
10
 
import org.jaudiotagger.tag.TagException;
11
 
import org.jaudiotagger.tag.TagOptionSingleton;
12
 
import org.jaudiotagger.tag.id3.framebody.FrameBodyCOMM;
13
 
import org.jaudiotagger.tag.id3.framebody.FrameBodyWXXX;
14
 
import org.jaudiotagger.tag.id3.framebody.FrameBodyWXXXTest;
15
 
import org.jaudiotagger.tag.id3.valuepair.TextEncoding;
16
 
 
17
 
import java.io.File;
18
 
import java.io.IOException;
19
 
 
20
 
/**
21
 
 *
22
 
 */
23
 
public class Unicode24NullTerminatedTagTest extends TestCase
24
 
{
25
 
    /**
26
 
     * Constructor
27
 
     *
28
 
     * @param arg0
29
 
     */
30
 
    public Unicode24NullTerminatedTagTest(String arg0)
31
 
    {
32
 
        super(arg0);
33
 
    }
34
 
 
35
 
    /**
36
 
     * Command line entrance.
37
 
     *
38
 
     * @param args
39
 
     */
40
 
    public static void main(String[] args)
41
 
    {
42
 
        junit.textui.TestRunner.run(Unicode24NullTerminatedTagTest.suite());
43
 
    }
44
 
 
45
 
    /////////////////////////////////////////////////////////////////////////
46
 
    // TestCase classes to override
47
 
    /////////////////////////////////////////////////////////////////////////
48
 
 
49
 
    /**
50
 
     *
51
 
     */
52
 
    protected void setUp()
53
 
    {
54
 
        TagOptionSingleton.getInstance().setToDefault();
55
 
    }
56
 
 
57
 
    /**
58
 
     *
59
 
     */
60
 
    protected void tearDown()
61
 
    {
62
 
    }
63
 
 
64
 
    /**
65
 
     *
66
 
     */
67
 
//    protected void runTest()
68
 
//    {
69
 
//    }
70
 
 
71
 
    /**
72
 
     * Builds the Test Suite.
73
 
     *
74
 
     * @return the Test Suite.
75
 
     */
76
 
    public static Test suite()
77
 
    {
78
 
        return new TestSuite(Unicode24NullTerminatedTagTest.class);
79
 
    }
80
 
 
81
 
    /////////////////////////////////////////////////////////////////////////
82
 
    // Tests
83
 
    /////////////////////////////////////////////////////////////////////////
84
 
 
85
 
    /**
86
 
     *
87
 
     */
88
 
    public void testUTF8WithNullTerminator() throws IOException, TagException, ReadOnlyFileException, InvalidAudioFrameException, RuntimeException
89
 
    {
90
 
        MP3File mp3File = new MP3File(AbstractTestCase.copyAudioToTmp("testV24-comments-utf8.mp3"));
91
 
        AbstractID3v2Tag id3v2Tag = mp3File.getID3v2Tag();
92
 
        assertNotNull(id3v2Tag);
93
 
        AbstractID3v2Frame frame = (AbstractID3v2Frame) id3v2Tag.getFrame("COMM");
94
 
        assertNotNull(frame);
95
 
        AbstractTagFrameBody frameBody = frame.getBody();
96
 
        assertTrue(frameBody instanceof FrameBodyCOMM);
97
 
        FrameBodyCOMM commFrameBody = (FrameBodyCOMM) frameBody;
98
 
 
99
 
        //String borodin = "\u0411\u043e\u0440\u043e\u0434\u0438\u043d";
100
 
        byte UTF8_ENCODING = (byte) TextEncoding.UTF_8;
101
 
        String language = "eng";
102
 
        String comment = "some comment here";
103
 
        String description = "cc";
104
 
        assertEquals(UTF8_ENCODING, commFrameBody.getTextEncoding());
105
 
        assertEquals(language, commFrameBody.getLanguage());
106
 
        assertEquals(description, commFrameBody.getDescription());
107
 
        assertEquals(comment, commFrameBody.getText());
108
 
 
109
 
        ID3v24Frame newFrame = new ID3v24Frame(ID3v24Frames.FRAME_ID_COMMENT);
110
 
        FrameBodyCOMM targetFrameBody = (FrameBodyCOMM) newFrame.getBody();
111
 
        targetFrameBody.setTextEncoding(UTF8_ENCODING);
112
 
        targetFrameBody.setLanguage(language);
113
 
        targetFrameBody.setDescription(description);
114
 
        targetFrameBody.setText(comment);
115
 
        assertEquals(UTF8_ENCODING, targetFrameBody.getTextEncoding());
116
 
        assertEquals(language, targetFrameBody.getLanguage());
117
 
        assertEquals(description, targetFrameBody.getDescription());
118
 
        assertEquals(comment, targetFrameBody.getText());
119
 
 
120
 
        assertEquals(targetFrameBody, commFrameBody);
121
 
    }
122
 
 
123
 
    /**
124
 
     * Create a String that only contains text within IS8859 charset so should be
125
 
     * as ISO_88859
126
 
     *
127
 
     * @throws Exception
128
 
     */
129
 
    public void testCreateISO8859EncodedNullTerminatedString() throws Exception
130
 
    {
131
 
        File testFile = AbstractTestCase.copyAudioToTmp("testV1.mp3");
132
 
        MP3File mp3File = new MP3File(testFile);
133
 
 
134
 
        ID3v24Frame frame = new ID3v24Frame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
135
 
        Exception exceptionCaught = null;
136
 
        FrameBodyWXXX fb = null;
137
 
        try
138
 
        {
139
 
            fb = FrameBodyWXXXTest.getInitialisedBody();
140
 
            frame.setBody(fb);
141
 
        }
142
 
        catch (Exception e)
143
 
        {
144
 
            exceptionCaught = e;
145
 
        }
146
 
 
147
 
        assertNull(exceptionCaught);
148
 
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, fb.getIdentifier());
149
 
        assertEquals(TextEncoding.ISO_8859_1, fb.getTextEncoding());
150
 
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_STRING, fb.getDescription());
151
 
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, fb.getUrlLink());
152
 
 
153
 
        //Create and Save
154
 
        ID3v24Tag tag = new ID3v24Tag();
155
 
        tag.setFrame(frame);
156
 
        mp3File.setID3v2Tag(tag);
157
 
        mp3File.save();
158
 
 
159
 
        //Reload, should be written as UTF16 because of the text
160
 
        mp3File = new MP3File(testFile);
161
 
        frame = (ID3v24Frame) mp3File.getID3v2Tag().getFrame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
162
 
        FrameBodyWXXX body = (FrameBodyWXXX) frame.getBody();
163
 
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, body.getIdentifier());
164
 
        assertEquals(TextEncoding.ISO_8859_1, body.getTextEncoding());
165
 
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_STRING, body.getDescription());
166
 
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, body.getUrlLink());
167
 
 
168
 
    }
169
 
 
170
 
    /**
171
 
     * Can explictly uses UTF-16 even if not required
172
 
     * as UTf16 by default
173
 
     *
174
 
     * @throws Exception
175
 
     */
176
 
    public void testCreateUTF16EncodedNullTerminatedString() throws Exception
177
 
    {
178
 
        File testFile = AbstractTestCase.copyAudioToTmp("testV1.mp3");
179
 
        MP3File mp3File = new MP3File(testFile);
180
 
 
181
 
        ID3v24Frame frame = new ID3v24Frame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
182
 
        Exception exceptionCaught = null;
183
 
        FrameBodyWXXX fb = null;
184
 
        try
185
 
        {
186
 
            fb = FrameBodyWXXXTest.getInitialisedBody();
187
 
            fb.setTextEncoding(TextEncoding.UTF_16);
188
 
            frame.setBody(fb);
189
 
        }
190
 
        catch (Exception e)
191
 
        {
192
 
            exceptionCaught = e;
193
 
        }
194
 
 
195
 
        assertNull(exceptionCaught);
196
 
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, fb.getIdentifier());
197
 
        assertEquals(TextEncoding.UTF_16, fb.getTextEncoding());
198
 
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_STRING, fb.getDescription());
199
 
 
200
 
        //Create and Save
201
 
        ID3v24Tag tag = new ID3v24Tag();
202
 
        tag.setFrame(frame);
203
 
        mp3File.setID3v2Tag(tag);
204
 
        mp3File.save();
205
 
 
206
 
        //Reload, should be written as UTF16 because of the text
207
 
        mp3File = new MP3File(testFile);
208
 
        frame = (ID3v24Frame) mp3File.getID3v2Tag().getFrame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
209
 
        FrameBodyWXXX body = (FrameBodyWXXX) frame.getBody();
210
 
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, body.getIdentifier());
211
 
        assertEquals(TextEncoding.UTF_16, body.getTextEncoding());
212
 
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_STRING, body.getDescription());
213
 
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, body.getUrlLink());
214
 
 
215
 
    }
216
 
 
217
 
 
218
 
    /**
219
 
     * Create a String that contains text outside of the IS8859 charset should be written
220
 
     * as UTf16 by default
221
 
     *
222
 
     * @throws Exception
223
 
     */
224
 
    public void testCreateUTF16AutoEncodedNullTerminatedString() throws Exception
225
 
    {
226
 
        File testFile = AbstractTestCase.copyAudioToTmp("testV1.mp3");
227
 
        MP3File mp3File = new MP3File(testFile);
228
 
 
229
 
        ID3v24Frame frame = new ID3v24Frame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
230
 
        Exception exceptionCaught = null;
231
 
        FrameBodyWXXX fb = null;
232
 
        try
233
 
        {
234
 
            fb = FrameBodyWXXXTest.getUnicodeRequiredInitialisedBody();
235
 
            frame.setBody(fb);
236
 
        }
237
 
        catch (Exception e)
238
 
        {
239
 
            exceptionCaught = e;
240
 
        }
241
 
 
242
 
        assertNull(exceptionCaught);
243
 
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, fb.getIdentifier());
244
 
        assertEquals(TextEncoding.ISO_8859_1, fb.getTextEncoding());
245
 
        assertEquals(FrameBodyWXXXTest.WXXX_UNICODE_REQUIRED_TEST_STRING, fb.getDescription());
246
 
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, fb.getUrlLink());
247
 
 
248
 
        //Create and Save
249
 
        ID3v24Tag tag = new ID3v24Tag();
250
 
        tag.setFrame(frame);
251
 
        mp3File.setID3v2Tag(tag);
252
 
        mp3File.save();
253
 
 
254
 
        //Reload, should be written as UTF16 because of the text
255
 
        mp3File = new MP3File(testFile);
256
 
        frame = (ID3v24Frame) mp3File.getID3v2Tag().getFrame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
257
 
        FrameBodyWXXX body = (FrameBodyWXXX) frame.getBody();
258
 
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, body.getIdentifier());
259
 
        assertEquals(TextEncoding.UTF_16, body.getTextEncoding());
260
 
        assertEquals(FrameBodyWXXXTest.WXXX_UNICODE_REQUIRED_TEST_STRING, body.getDescription());
261
 
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, body.getUrlLink());
262
 
 
263
 
    }
264
 
 
265
 
    /**
266
 
     * Strings can bbe written to UTF16BE if text encoding explicitly set
267
 
     *
268
 
     * @throws Exception
269
 
     */
270
 
    public void testCreateUTF16BEEncodedNullTerminatedString() throws Exception
271
 
    {
272
 
        File testFile = AbstractTestCase.copyAudioToTmp("testV1.mp3");
273
 
        MP3File mp3File = new MP3File(testFile);
274
 
 
275
 
        ID3v24Frame frame = new ID3v24Frame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
276
 
        Exception exceptionCaught = null;
277
 
        FrameBodyWXXX fb = null;
278
 
        try
279
 
        {
280
 
            fb = FrameBodyWXXXTest.getUnicodeRequiredInitialisedBody();
281
 
            fb.setTextEncoding(TextEncoding.UTF_16BE);
282
 
            frame.setBody(fb);
283
 
        }
284
 
        catch (Exception e)
285
 
        {
286
 
            exceptionCaught = e;
287
 
        }
288
 
 
289
 
        assertNull(exceptionCaught);
290
 
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, fb.getIdentifier());
291
 
        assertEquals(TextEncoding.UTF_16BE, fb.getTextEncoding());
292
 
        assertEquals(FrameBodyWXXXTest.WXXX_UNICODE_REQUIRED_TEST_STRING, fb.getDescription());
293
 
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, fb.getUrlLink());
294
 
 
295
 
        //Create and Save
296
 
        ID3v24Tag tag = new ID3v24Tag();
297
 
        tag.setFrame(frame);
298
 
        mp3File.setID3v2Tag(tag);
299
 
        mp3File.save();
300
 
 
301
 
        //Reload, should be written as UTF16BE
302
 
        mp3File = new MP3File(testFile);
303
 
        frame = (ID3v24Frame) mp3File.getID3v2Tag().getFrame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
304
 
        FrameBodyWXXX body = (FrameBodyWXXX) frame.getBody();
305
 
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, body.getIdentifier());
306
 
        assertEquals(TextEncoding.UTF_16BE, body.getTextEncoding());
307
 
        assertEquals(FrameBodyWXXXTest.WXXX_UNICODE_REQUIRED_TEST_STRING, body.getDescription());
308
 
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, body.getUrlLink());
309
 
 
310
 
    }
311
 
 
312
 
    /**
313
 
     * Strings can bbe written to UTF8 if text encoding explicitly set
314
 
     *
315
 
     * @throws Exception
316
 
     */
317
 
    public void testCreateUTF8EncodedNullTerminatedString() throws Exception
318
 
    {
319
 
        File testFile = AbstractTestCase.copyAudioToTmp("testV1.mp3");
320
 
        MP3File mp3File = new MP3File(testFile);
321
 
 
322
 
        ID3v24Frame frame = new ID3v24Frame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
323
 
        Exception exceptionCaught = null;
324
 
        FrameBodyWXXX fb = null;
325
 
        try
326
 
        {
327
 
            fb = FrameBodyWXXXTest.getUnicodeRequiredInitialisedBody();
328
 
            fb.setTextEncoding(TextEncoding.UTF_8);
329
 
            frame.setBody(fb);
330
 
        }
331
 
        catch (Exception e)
332
 
        {
333
 
            exceptionCaught = e;
334
 
        }
335
 
 
336
 
        assertNull(exceptionCaught);
337
 
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, fb.getIdentifier());
338
 
        assertEquals(TextEncoding.UTF_8, fb.getTextEncoding());
339
 
        assertEquals(FrameBodyWXXXTest.WXXX_UNICODE_REQUIRED_TEST_STRING, fb.getDescription());
340
 
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, fb.getUrlLink());
341
 
 
342
 
        //Create and Save
343
 
        ID3v24Tag tag = new ID3v24Tag();
344
 
        tag.setFrame(frame);
345
 
        mp3File.setID3v2Tag(tag);
346
 
        mp3File.save();
347
 
 
348
 
        //Reload, should be written as UTF8
349
 
        mp3File = new MP3File(testFile);
350
 
        frame = (ID3v24Frame) mp3File.getID3v2Tag().getFrame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
351
 
        FrameBodyWXXX body = (FrameBodyWXXX) frame.getBody();
352
 
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, body.getIdentifier());
353
 
        assertEquals(TextEncoding.UTF_8, body.getTextEncoding());
354
 
        assertEquals(FrameBodyWXXXTest.WXXX_UNICODE_REQUIRED_TEST_STRING, body.getDescription());
355
 
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, body.getUrlLink());
356
 
 
357
 
    }
358
 
}
 
1
package org.jaudiotagger.tag.id3;
 
2
 
 
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.exceptions.InvalidAudioFrameException;
 
8
import org.jaudiotagger.audio.exceptions.ReadOnlyFileException;
 
9
import org.jaudiotagger.audio.mp3.MP3File;
 
10
import org.jaudiotagger.tag.TagException;
 
11
import org.jaudiotagger.tag.TagOptionSingleton;
 
12
import org.jaudiotagger.tag.id3.framebody.FrameBodyCOMM;
 
13
import org.jaudiotagger.tag.id3.framebody.FrameBodyWXXX;
 
14
import org.jaudiotagger.tag.id3.framebody.FrameBodyWXXXTest;
 
15
import org.jaudiotagger.tag.id3.valuepair.TextEncoding;
 
16
 
 
17
import java.io.File;
 
18
import java.io.IOException;
 
19
 
 
20
/**
 
21
 *
 
22
 */
 
23
public class Unicode24NullTerminatedTagTest extends TestCase
 
24
{
 
25
    /**
 
26
     * Constructor
 
27
     *
 
28
     * @param arg0
 
29
     */
 
30
    public Unicode24NullTerminatedTagTest(String arg0)
 
31
    {
 
32
        super(arg0);
 
33
    }
 
34
 
 
35
    /**
 
36
     * Command line entrance.
 
37
     *
 
38
     * @param args
 
39
     */
 
40
    public static void main(String[] args)
 
41
    {
 
42
        junit.textui.TestRunner.run(Unicode24NullTerminatedTagTest.suite());
 
43
    }
 
44
 
 
45
    /////////////////////////////////////////////////////////////////////////
 
46
    // TestCase classes to override
 
47
    /////////////////////////////////////////////////////////////////////////
 
48
 
 
49
    /**
 
50
     *
 
51
     */
 
52
    protected void setUp()
 
53
    {
 
54
        TagOptionSingleton.getInstance().setToDefault();
 
55
    }
 
56
 
 
57
    /**
 
58
     *
 
59
     */
 
60
    protected void tearDown()
 
61
    {
 
62
    }
 
63
 
 
64
    /**
 
65
     *
 
66
     */
 
67
//    protected void runTest()
 
68
//    {
 
69
//    }
 
70
 
 
71
    /**
 
72
     * Builds the Test Suite.
 
73
     *
 
74
     * @return the Test Suite.
 
75
     */
 
76
    public static Test suite()
 
77
    {
 
78
        return new TestSuite(Unicode24NullTerminatedTagTest.class);
 
79
    }
 
80
 
 
81
    /////////////////////////////////////////////////////////////////////////
 
82
    // Tests
 
83
    /////////////////////////////////////////////////////////////////////////
 
84
 
 
85
    /**
 
86
     *
 
87
     */
 
88
    public void testUTF8WithNullTerminator() throws IOException, TagException, ReadOnlyFileException, InvalidAudioFrameException, RuntimeException
 
89
    {
 
90
        MP3File mp3File = new MP3File(AbstractTestCase.copyAudioToTmp("testV24-comments-utf8.mp3"));
 
91
        AbstractID3v2Tag id3v2Tag = mp3File.getID3v2Tag();
 
92
        assertNotNull(id3v2Tag);
 
93
        AbstractID3v2Frame frame = (AbstractID3v2Frame) id3v2Tag.getFrame("COMM");
 
94
        assertNotNull(frame);
 
95
        AbstractTagFrameBody frameBody = frame.getBody();
 
96
        assertTrue(frameBody instanceof FrameBodyCOMM);
 
97
        FrameBodyCOMM commFrameBody = (FrameBodyCOMM) frameBody;
 
98
 
 
99
        //String borodin = "\u0411\u043e\u0440\u043e\u0434\u0438\u043d";
 
100
        byte UTF8_ENCODING = (byte) TextEncoding.UTF_8;
 
101
        String language = "eng";
 
102
        String comment = "some comment here";
 
103
        String description = "cc";
 
104
        assertEquals(UTF8_ENCODING, commFrameBody.getTextEncoding());
 
105
        assertEquals(language, commFrameBody.getLanguage());
 
106
        assertEquals(description, commFrameBody.getDescription());
 
107
        assertEquals(comment, commFrameBody.getText());
 
108
 
 
109
        ID3v24Frame newFrame = new ID3v24Frame(ID3v24Frames.FRAME_ID_COMMENT);
 
110
        FrameBodyCOMM targetFrameBody = (FrameBodyCOMM) newFrame.getBody();
 
111
        targetFrameBody.setTextEncoding(UTF8_ENCODING);
 
112
        targetFrameBody.setLanguage(language);
 
113
        targetFrameBody.setDescription(description);
 
114
        targetFrameBody.setText(comment);
 
115
        assertEquals(UTF8_ENCODING, targetFrameBody.getTextEncoding());
 
116
        assertEquals(language, targetFrameBody.getLanguage());
 
117
        assertEquals(description, targetFrameBody.getDescription());
 
118
        assertEquals(comment, targetFrameBody.getText());
 
119
 
 
120
        assertEquals(targetFrameBody, commFrameBody);
 
121
    }
 
122
 
 
123
    /**
 
124
     * Create a String that only contains text within IS8859 charset so should be
 
125
     * as ISO_88859
 
126
     *
 
127
     * @throws Exception
 
128
     */
 
129
    public void testCreateISO8859EncodedNullTerminatedString() throws Exception
 
130
    {
 
131
        File testFile = AbstractTestCase.copyAudioToTmp("testV1.mp3");
 
132
        MP3File mp3File = new MP3File(testFile);
 
133
 
 
134
        ID3v24Frame frame = new ID3v24Frame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
 
135
        Exception exceptionCaught = null;
 
136
        FrameBodyWXXX fb = null;
 
137
        try
 
138
        {
 
139
            fb = FrameBodyWXXXTest.getInitialisedBody();
 
140
            frame.setBody(fb);
 
141
        }
 
142
        catch (Exception e)
 
143
        {
 
144
            exceptionCaught = e;
 
145
        }
 
146
 
 
147
        assertNull(exceptionCaught);
 
148
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, fb.getIdentifier());
 
149
        assertEquals(TextEncoding.ISO_8859_1, fb.getTextEncoding());
 
150
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_STRING, fb.getDescription());
 
151
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, fb.getUrlLink());
 
152
 
 
153
        //Create and Save
 
154
        ID3v24Tag tag = new ID3v24Tag();
 
155
        tag.setFrame(frame);
 
156
        mp3File.setID3v2Tag(tag);
 
157
        mp3File.save();
 
158
 
 
159
        //Reload, should be written as UTF16 because of the text
 
160
        mp3File = new MP3File(testFile);
 
161
        frame = (ID3v24Frame) mp3File.getID3v2Tag().getFrame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
 
162
        FrameBodyWXXX body = (FrameBodyWXXX) frame.getBody();
 
163
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, body.getIdentifier());
 
164
        assertEquals(TextEncoding.ISO_8859_1, body.getTextEncoding());
 
165
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_STRING, body.getDescription());
 
166
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, body.getUrlLink());
 
167
 
 
168
    }
 
169
 
 
170
    /**
 
171
     * Can explictly uses UTF-16 even if not required
 
172
     * as UTf16 by default
 
173
     *
 
174
     * @throws Exception
 
175
     */
 
176
    public void testCreateUTF16EncodedNullTerminatedString() throws Exception
 
177
    {
 
178
        File testFile = AbstractTestCase.copyAudioToTmp("testV1.mp3");
 
179
        MP3File mp3File = new MP3File(testFile);
 
180
 
 
181
        ID3v24Frame frame = new ID3v24Frame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
 
182
        Exception exceptionCaught = null;
 
183
        FrameBodyWXXX fb = null;
 
184
        try
 
185
        {
 
186
            fb = FrameBodyWXXXTest.getInitialisedBody();
 
187
            fb.setTextEncoding(TextEncoding.UTF_16);
 
188
            frame.setBody(fb);
 
189
        }
 
190
        catch (Exception e)
 
191
        {
 
192
            exceptionCaught = e;
 
193
        }
 
194
 
 
195
        assertNull(exceptionCaught);
 
196
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, fb.getIdentifier());
 
197
        assertEquals(TextEncoding.UTF_16, fb.getTextEncoding());
 
198
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_STRING, fb.getDescription());
 
199
 
 
200
        //Create and Save
 
201
        ID3v24Tag tag = new ID3v24Tag();
 
202
        tag.setFrame(frame);
 
203
        mp3File.setID3v2Tag(tag);
 
204
        mp3File.save();
 
205
 
 
206
        //Reload, should be written as UTF16 because of the text
 
207
        mp3File = new MP3File(testFile);
 
208
        frame = (ID3v24Frame) mp3File.getID3v2Tag().getFrame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
 
209
        FrameBodyWXXX body = (FrameBodyWXXX) frame.getBody();
 
210
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, body.getIdentifier());
 
211
        assertEquals(TextEncoding.UTF_16, body.getTextEncoding());
 
212
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_STRING, body.getDescription());
 
213
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, body.getUrlLink());
 
214
 
 
215
    }
 
216
 
 
217
 
 
218
    /**
 
219
     * Create a String that contains text outside of the IS8859 charset should be written
 
220
     * as UTf16 by default
 
221
     *
 
222
     * @throws Exception
 
223
     */
 
224
    public void testCreateUTF16AutoEncodedNullTerminatedString() throws Exception
 
225
    {
 
226
        File testFile = AbstractTestCase.copyAudioToTmp("testV1.mp3");
 
227
        MP3File mp3File = new MP3File(testFile);
 
228
 
 
229
        ID3v24Frame frame = new ID3v24Frame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
 
230
        Exception exceptionCaught = null;
 
231
        FrameBodyWXXX fb = null;
 
232
        try
 
233
        {
 
234
            fb = FrameBodyWXXXTest.getUnicodeRequiredInitialisedBody();
 
235
            frame.setBody(fb);
 
236
        }
 
237
        catch (Exception e)
 
238
        {
 
239
            exceptionCaught = e;
 
240
        }
 
241
 
 
242
        assertNull(exceptionCaught);
 
243
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, fb.getIdentifier());
 
244
        assertEquals(TextEncoding.ISO_8859_1, fb.getTextEncoding());
 
245
        assertEquals(FrameBodyWXXXTest.WXXX_UNICODE_REQUIRED_TEST_STRING, fb.getDescription());
 
246
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, fb.getUrlLink());
 
247
 
 
248
        //Create and Save
 
249
        ID3v24Tag tag = new ID3v24Tag();
 
250
        tag.setFrame(frame);
 
251
        mp3File.setID3v2Tag(tag);
 
252
        mp3File.save();
 
253
 
 
254
        //Reload, should be written as UTF16 because of the text
 
255
        mp3File = new MP3File(testFile);
 
256
        frame = (ID3v24Frame) mp3File.getID3v2Tag().getFrame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
 
257
        FrameBodyWXXX body = (FrameBodyWXXX) frame.getBody();
 
258
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, body.getIdentifier());
 
259
        assertEquals(TextEncoding.UTF_16, body.getTextEncoding());
 
260
        assertEquals(FrameBodyWXXXTest.WXXX_UNICODE_REQUIRED_TEST_STRING, body.getDescription());
 
261
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, body.getUrlLink());
 
262
 
 
263
    }
 
264
 
 
265
    /**
 
266
     * Strings can bbe written to UTF16BE if text encoding explicitly set
 
267
     *
 
268
     * @throws Exception
 
269
     */
 
270
    public void testCreateUTF16BEEncodedNullTerminatedString() throws Exception
 
271
    {
 
272
        File testFile = AbstractTestCase.copyAudioToTmp("testV1.mp3");
 
273
        MP3File mp3File = new MP3File(testFile);
 
274
 
 
275
        ID3v24Frame frame = new ID3v24Frame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
 
276
        Exception exceptionCaught = null;
 
277
        FrameBodyWXXX fb = null;
 
278
        try
 
279
        {
 
280
            fb = FrameBodyWXXXTest.getUnicodeRequiredInitialisedBody();
 
281
            fb.setTextEncoding(TextEncoding.UTF_16BE);
 
282
            frame.setBody(fb);
 
283
        }
 
284
        catch (Exception e)
 
285
        {
 
286
            exceptionCaught = e;
 
287
        }
 
288
 
 
289
        assertNull(exceptionCaught);
 
290
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, fb.getIdentifier());
 
291
        assertEquals(TextEncoding.UTF_16BE, fb.getTextEncoding());
 
292
        assertEquals(FrameBodyWXXXTest.WXXX_UNICODE_REQUIRED_TEST_STRING, fb.getDescription());
 
293
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, fb.getUrlLink());
 
294
 
 
295
        //Create and Save
 
296
        ID3v24Tag tag = new ID3v24Tag();
 
297
        tag.setFrame(frame);
 
298
        mp3File.setID3v2Tag(tag);
 
299
        mp3File.save();
 
300
 
 
301
        //Reload, should be written as UTF16BE
 
302
        mp3File = new MP3File(testFile);
 
303
        frame = (ID3v24Frame) mp3File.getID3v2Tag().getFrame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
 
304
        FrameBodyWXXX body = (FrameBodyWXXX) frame.getBody();
 
305
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, body.getIdentifier());
 
306
        assertEquals(TextEncoding.UTF_16BE, body.getTextEncoding());
 
307
        assertEquals(FrameBodyWXXXTest.WXXX_UNICODE_REQUIRED_TEST_STRING, body.getDescription());
 
308
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, body.getUrlLink());
 
309
 
 
310
    }
 
311
 
 
312
    /**
 
313
     * Strings can bbe written to UTF8 if text encoding explicitly set
 
314
     *
 
315
     * @throws Exception
 
316
     */
 
317
    public void testCreateUTF8EncodedNullTerminatedString() throws Exception
 
318
    {
 
319
        File testFile = AbstractTestCase.copyAudioToTmp("testV1.mp3");
 
320
        MP3File mp3File = new MP3File(testFile);
 
321
 
 
322
        ID3v24Frame frame = new ID3v24Frame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
 
323
        Exception exceptionCaught = null;
 
324
        FrameBodyWXXX fb = null;
 
325
        try
 
326
        {
 
327
            fb = FrameBodyWXXXTest.getUnicodeRequiredInitialisedBody();
 
328
            fb.setTextEncoding(TextEncoding.UTF_8);
 
329
            frame.setBody(fb);
 
330
        }
 
331
        catch (Exception e)
 
332
        {
 
333
            exceptionCaught = e;
 
334
        }
 
335
 
 
336
        assertNull(exceptionCaught);
 
337
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, fb.getIdentifier());
 
338
        assertEquals(TextEncoding.UTF_8, fb.getTextEncoding());
 
339
        assertEquals(FrameBodyWXXXTest.WXXX_UNICODE_REQUIRED_TEST_STRING, fb.getDescription());
 
340
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, fb.getUrlLink());
 
341
 
 
342
        //Create and Save
 
343
        ID3v24Tag tag = new ID3v24Tag();
 
344
        tag.setFrame(frame);
 
345
        mp3File.setID3v2Tag(tag);
 
346
        mp3File.save();
 
347
 
 
348
        //Reload, should be written as UTF8
 
349
        mp3File = new MP3File(testFile);
 
350
        frame = (ID3v24Frame) mp3File.getID3v2Tag().getFrame(ID3v24Frames.FRAME_ID_USER_DEFINED_URL);
 
351
        FrameBodyWXXX body = (FrameBodyWXXX) frame.getBody();
 
352
        assertEquals(ID3v24Frames.FRAME_ID_USER_DEFINED_URL, body.getIdentifier());
 
353
        assertEquals(TextEncoding.UTF_8, body.getTextEncoding());
 
354
        assertEquals(FrameBodyWXXXTest.WXXX_UNICODE_REQUIRED_TEST_STRING, body.getDescription());
 
355
        assertEquals(FrameBodyWXXXTest.WXXX_TEST_URL, body.getUrlLink());
 
356
 
 
357
    }
 
358
}