/*
* 11/19/2004 : 1.0 moved to LGPL.
* 01/01/2004 : Initial version by E.B javalayer@javazoom.net
*-----------------------------------------------------------------------
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as published
* by the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*----------------------------------------------------------------------
*/
package javazoom.jl.decoder;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.Properties;
import junit.framework.TestCase;
/**
* Bitstream unit test.
* It matches test.mp3 properties to test.mp3.properties expected results.
* As we don't ship test.mp3, you have to generate your own test.mp3.properties
* Uncomment out = System.out; in setUp() method to generated it on stdout from
* your own MP3 file.
* @since 0.4
*/
public class BitstreamTest extends TestCase
{
private String basefile = null;
private String name = null;
private String filename = null;
private PrintStream out = null;
private Properties props = null;
private FileInputStream mp3in = null;
private Bitstream in = null;
/**
* Constructor for BitstreamTest.
* @param arg0
*/
public BitstreamTest(String arg0)
{
super(arg0);
}
/*
* @see TestCase#setUp()
*/
protected void setUp() throws Exception
{
super.setUp();
props = new Properties();
InputStream pin = getClass().getClassLoader().getResourceAsStream("test.mp3.properties");
props.load(pin);
basefile = (String) props.getProperty("basefile");
name = (String) props.getProperty("filename");
filename = basefile + name;
mp3in = new FileInputStream(filename);
in = new Bitstream(mp3in);
//out = System.out;
}
/*
* @see TestCase#tearDown()
*/
protected void tearDown() throws Exception
{
super.tearDown();
in.close();
mp3in.close();
}
public void testStream()
{
try
{
InputStream id3in = in.getRawID3v2();
int size = id3in.available();
Header header = in.readFrame();
if (out != null)
{
out.println("--- "+filename+" ---");
out.println("ID3v2Size="+size);
out.println("version="+header.version());
out.println("version_string="+header.version_string());
out.println("layer="+header.layer());
out.println("frequency="+header.frequency());
out.println("frequency_string="+header.sample_frequency_string());
out.println("bitrate="+header.bitrate());
out.println("bitrate_string="+header.bitrate_string());
out.println("mode="+header.mode());
out.println("mode_string="+header.mode_string());
out.println("slots="+header.slots());
out.println("vbr="+header.vbr());
out.println("vbr_scale="+header.vbr_scale());
out.println("max_number_of_frames="+header.max_number_of_frames(mp3in.available()));
out.println("min_number_of_frames="+header.min_number_of_frames(mp3in.available()));
out.println("ms_per_frame="+header.ms_per_frame());
out.println("frames_per_second="+(float) ((1.0 / (header.ms_per_frame())) * 1000.0));
out.println("total_ms="+header.total_ms(mp3in.available()));
out.println("SyncHeader="+header.getSyncHeader());
out.println("checksums="+header.checksums());
out.println("copyright="+header.copyright());
out.println("original="+header.original());
out.println("padding="+header.padding());
out.println("framesize="+header.calculate_framesize());
out.println("number_of_subbands="+header.number_of_subbands());
}
assertEquals("ID3v2Size",Integer.parseInt((String)props.getProperty("ID3v2Size")),size);
assertEquals("version",Integer.parseInt((String)props.getProperty("version")),header.version());
assertEquals("version_string",(String)props.getProperty("version_string"),header.version_string());
assertEquals("layer",Integer.parseInt((String)props.getProperty("layer")),header.layer());
assertEquals("frequency",Integer.parseInt((String)props.getProperty("frequency")),header.frequency());
assertEquals("frequency_string",(String)props.getProperty("frequency_string"),header.sample_frequency_string());
assertEquals("bitrate",Integer.parseInt((String)props.getProperty("bitrate")),header.bitrate());
assertEquals("bitrate_string",(String)props.getProperty("bitrate_string"),header.bitrate_string());
assertEquals("mode",Integer.parseInt((String)props.getProperty("mode")),header.mode());
assertEquals("mode_string",(String)props.getProperty("mode_string"),header.mode_string());
assertEquals("slots",Integer.parseInt((String)props.getProperty("slots")),header.slots());
assertEquals("vbr",Boolean.valueOf((String)props.getProperty("vbr")),new Boolean(header.vbr()));
assertEquals("vbr_scale",Integer.parseInt((String)props.getProperty("vbr_scale")),header.vbr_scale());
assertEquals("max_number_of_frames",Integer.parseInt((String)props.getProperty("max_number_of_frames")),header.max_number_of_frames(mp3in.available()));
assertEquals("min_number_of_frames",Integer.parseInt((String)props.getProperty("min_number_of_frames")),header.min_number_of_frames(mp3in.available()));
assertTrue("ms_per_frame",Float.parseFloat((String)props.getProperty("ms_per_frame"))==header.ms_per_frame());
assertTrue("frames_per_second",Float.parseFloat((String)props.getProperty("frames_per_second"))==(float) ((1.0 / (header.ms_per_frame())) * 1000.0));
assertTrue("total_ms",Float.parseFloat((String)props.getProperty("total_ms"))==header.total_ms(mp3in.available()));
assertEquals("SyncHeader",Integer.parseInt((String)props.getProperty("SyncHeader")),header.getSyncHeader());
assertEquals("checksums",Boolean.valueOf((String)props.getProperty("checksums")),new Boolean(header.checksums()));
assertEquals("copyright",Boolean.valueOf((String)props.getProperty("copyright")),new Boolean(header.copyright()));
assertEquals("original",Boolean.valueOf((String)props.getProperty("original")),new Boolean(header.original()));
assertEquals("padding",Boolean.valueOf((String)props.getProperty("padding")),new Boolean(header.padding()));
assertEquals("framesize",Integer.parseInt((String)props.getProperty("framesize")),header.calculate_framesize());
assertEquals("number_of_subbands",Integer.parseInt((String)props.getProperty("number_of_subbands")),header.number_of_subbands());
in.closeFrame();
}
catch (BitstreamException e)
{
assertTrue("BitstreamException : "+e.getMessage(),false);
}
catch (IOException e)
{
assertTrue("IOException : "+e.getMessage(),false);
}
}
}