/*
* PageTestCase.java
*/
/*
* Copyright (c) 2005 by Matthias Pfisterer
*
* 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 org.tritonus.test.tritonus.lowlevel.pogg;
import junit.framework.TestCase;
import org.tritonus.lowlevel.pogg.Page;
/** Tests for classes org.tritonus.lowlevel.pogg.Page.
*/
public class PageTestCase
extends TestCase
{
/* First and last, uncontinued, pos 0, serial 0x04030201,
page 0, 1 segment, 1 packet */
private static final byte[] HEADER1 = new byte[]
{
0x4f, 0x67, 0x67, 0x53, 0, 0x06,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x02, 0x03, 0x04, 0, 0, 0, 0,
0x15, (byte) 0xed, (byte) 0xec, (byte) 0x91,
1, 17
};
/* First , uncontinued, pos -1, serial 0x04030201,
page 8, 7 segments, 1 packet */
private static final byte[] HEADER2 = new byte[]
{
0x4f, 0x67, 0x67, 0x53, 0, 0x02,
(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
0x01, 0x02, 0x03, 0x04, 8, 0, 0, 0,
0x15, (byte) 0xed, (byte) 0xec, (byte) 0x91,
7, (byte) 255, (byte) 255, (byte) 255, (byte) 255,
(byte) 255, (byte) 255, 12
};
public PageTestCase(String strName)
{
super(strName);
}
public void testSetData()
throws Exception
{
Page p = new Page();
byte[] abHeader = new byte[1024];
for (int i = 0; i < abHeader.length; i++)
{
abHeader[i] = (byte) (i + 128);
}
byte[] abBody = new byte[1024];
for (int i = 0; i < abBody.length; i++)
{
abBody[i] = (byte) i;
}
p.setData(abHeader, 0, abHeader.length,
abBody, 0, abBody.length);
checkData(p, "set data test", abHeader, abBody);
}
public void testSetDataOffset()
throws Exception
{
Page p = new Page();
byte[] abHeader = new byte[102];
for (int i = 0; i < abHeader.length; i++)
{
abHeader[i] = (byte) (i + 128);
}
byte[] abBody = new byte[1024];
for (int i = 0; i < abBody.length; i++)
{
abBody[i] = (byte) i;
}
p.setData(abHeader, 12, 88,
abBody, 511, 513);
byte[] abHeaderCompare = new byte[88];
System.arraycopy(abHeader, 12, abHeaderCompare, 0, 88);
byte[] abBodyCompare = new byte[513];
System.arraycopy(abBody, 511, abBodyCompare, 0, 513);
checkData(p, "set data offset test", abHeaderCompare, abBodyCompare);
}
public void testHeaderProperties()
throws Exception
{
checkHeaderProperties("header properties test 1", HEADER1,
0, false, 1,
true, true, 0L,
0x04030201, 0);
checkHeaderProperties("header properties test 2", HEADER2,
0, false, 1,
true, false, -1L,
0x04030201, 8);
}
private void checkHeaderProperties(
String strMessage, byte[] abHeader,
int nVersionExpected, boolean bContinuedExpected, int nPacketsExpected,
boolean bBosExpected, boolean bEosExpected, long lGranulePosExpected,
int nSerialNoExpected, int nPageNoExpected)
throws Exception
{
Page p = new Page();
byte[] abData = new byte[12];
p.setData(abHeader, 0, abHeader.length,
abData, 0, abData.length);
assertEquals(constructErrorMessage(strMessage, "version"),
nVersionExpected, p.getVersion());
assertEquals(constructErrorMessage(strMessage, "continued flag"),
bContinuedExpected, p.isContinued());
assertEquals(constructErrorMessage(strMessage, "packets"),
nPacketsExpected, p.getPackets());
assertEquals(constructErrorMessage(strMessage, "bos flag"),
bBosExpected, p.isBos());
assertEquals(constructErrorMessage(strMessage, "eos flag"),
bEosExpected, p.isEos());
assertEquals(constructErrorMessage(strMessage, "granulepos"),
lGranulePosExpected, p.getGranulePos());
assertEquals(constructErrorMessage(strMessage, "serialno"),
nSerialNoExpected, p.getSerialNo());
assertEquals(constructErrorMessage(strMessage, "pageno"),
nPageNoExpected, p.getPageNo());
}
private void checkData(Page p, String strMessage,
byte[] abHeaderExpected, byte[] abBodyExpected)
throws Exception
{
assertTrue(constructErrorMessage(strMessage, "header content"),
equals(abHeaderExpected, p.getHeader()));
assertTrue(constructErrorMessage(strMessage, "body content"),
equals(abBodyExpected, p.getBody()));
}
private static boolean equals(byte[] b1, byte[] b2)
{
if (b1 == null && b2 == null)
return true;
if (b1 != null)
return equals(b1, 0, b2, 0, b1.length);
return false;
}
private static boolean equals(byte[] b1, int nOffset1,
byte[] b2, int nOffset2,
int nLength)
{
if (b1 == null && b2 == null)
return true;
if (nOffset1 + nLength > b1.length || nOffset2 + nLength > b2.length)
return false;
for (int i = 0; i < nLength; i++)
{
if (b1[nOffset1 + i] != b2[nOffset2 + i])
return false;
}
return true;
}
private static String constructErrorMessage(String s1, String s2)
{
return s1 + ": " + s2;
}
}
/*** PageTestCase.java ***/