/* * PacketTestCase.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 java.util.Arrays; import junit.framework.TestCase; import org.tritonus.lowlevel.pogg.Packet; /** Tests for classes org.tritonus.lowlevel.pogg.Packet. */ public class PacketTestCase extends TestCase { public PacketTestCase(String strName) { super(strName); } // public void testClear() // throws Exception // { // Packet p = new Packet(); // p.clear(); // checkPacket(p, "clear test", false, false, 0, 0, null); // } public void testClear() throws Exception { Packet p = new Packet(); p.setData(new byte[3], 0, 3); p.setFlags(true, true, 99, 100); p.clear(); checkPacket(p, "clear test", false, false, 0, 0, null); } public void testSetData() throws Exception { Packet p = new Packet(); byte[] abData = new byte[1024]; for (int i = 0; i < abData.length; i++) { abData[i] = (byte) i; } p.setData(abData, 0, abData.length); checkPacket(p, "set data test", false, false, 0, 0, abData); } public void testSetDataTruncated() throws Exception { Packet p = new Packet(); byte[] abData = new byte[1024]; for (int i = 0; i < abData.length; i++) { abData[i] = (byte) i; } p.setData(abData, 0, abData.length / 2); byte[] abCompare = new byte[abData.length / 2]; System.arraycopy(abData, 0, abCompare, 0, abData.length / 2); checkPacket(p, "set data truncated test", false, false, 0, 0, abCompare); } public void testSetFlags() throws Exception { checkFlags("set flags test 1", true, false, 65555L, 0); checkFlags("set flags test 2", false, true, 0, 0); checkFlags("set flags test 3", false, false, Long.MAX_VALUE, 0); checkFlags("set flags test 4", true, true, Long.MIN_VALUE, 0); } private void checkFlags(String strMessage, boolean bBos, boolean bEos, long lGranulePos, long lPacketNo) throws Exception { Packet p = new Packet(); byte[] abData = new byte[0]; p.setData(abData, 0, abData.length); p.setFlags(bBos, bEos, lGranulePos, lPacketNo); checkPacket(p, strMessage, bBos, bEos, lGranulePos, lPacketNo, abData); } private void checkPacket(Packet p, String strMessage, boolean bBosExpected, boolean bEosExpected, long lGranulePosExpected, long lPacketNoExpected, byte[] abDataExpected) throws Exception { 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, "packetno"), lPacketNoExpected, p.getPacketNo()); System.out.println("data: " + p.getData()); assertTrue(constructErrorMessage(strMessage, "data content"), equals(abDataExpected, p.getData())); } private static boolean equals(Packet p1, Packet p2) { return Arrays.equals(p1.getData(), p2.getData()) && p1.isBos() == p2.isBos() && p1.isEos() == p2.isEos() && p1.getGranulePos() == p2.getGranulePos() && p1.getPacketNo() == p2.getPacketNo(); } 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; } } /*** PacketTestCase.java ***/