package org.marketcetera.util.unicode; import org.apache.commons.lang.ArrayUtils; import org.junit.Test; import org.marketcetera.util.test.TestCaseBase; import static org.junit.Assert.*; import static org.marketcetera.util.unicode.Signature.*; /** * @author tlerios@marketcetera.com * @since 0.6.0 * @version $Id: SignatureTest.java 16154 2012-07-14 16:34:05Z colin $ */ /* $License$ */ public class SignatureTest extends TestCaseBase { private static void single (Signature[] allCandidates, Signature signature, int length) { assertNotNull(signature.getMark()); assertEquals(length,signature.getLength()); byte[] data=signature.getMark(); assertTrue(signature.prefixMatch(data)); Signature[] candidates=new Signature[] {signature}; assertEquals(signature,getPrefixMatch(candidates,data)); assertEquals(signature,getPrefixMatch(allCandidates,data)); data=ArrayUtils.addAll(data,new byte[] {(byte)0x01,(byte)0x02}); assertTrue(signature.prefixMatch(data)); assertEquals(signature,getPrefixMatch(candidates,data)); assertEquals(signature,getPrefixMatch(allCandidates,data)); data[0]=(byte)0x01; assertEquals((length==0),signature.prefixMatch(data)); assertEquals((length==0)?signature:null,getPrefixMatch (candidates,data)); assertEquals(NONE,getPrefixMatch(allCandidates,data)); data=new byte[] {(byte)0x01}; assertEquals((length==0),signature.prefixMatch(data)); assertEquals((length==0)?signature:null,getPrefixMatch (candidates,data)); assertEquals(NONE,getPrefixMatch(allCandidates,data)); data=new byte[] {(byte)0x00,(byte)0x00}; assertEquals((length==0),signature.prefixMatch(data)); assertEquals((length==0)?signature:null,getPrefixMatch (candidates,data)); assertEquals(NONE,getPrefixMatch(allCandidates,data)); } private static void multi (Signature signature, int length) { single(new Signature[] { NONE,UTF8,UTF16BE,UTF16LE,UTF32BE,UTF32LE},signature,length); single(new Signature[] { UTF8,UTF16BE,UTF16LE,UTF32BE,UTF32LE,NONE},signature,length); single(new Signature[] { UTF16LE,UTF32LE,UTF16BE,UTF32BE,UTF8,NONE},signature,length); } @Test public void all() { multi(NONE,0); multi(UTF8,3); multi(UTF16BE,2); multi(UTF16LE,2); multi(UTF32BE,4); multi(UTF32LE,4); } @Test public void multiMatch() { byte[] data=UTF8.getMark(); assertNull(getPrefixMatch(Signature.EMPTY_ARRAY,data)); assertNull(getPrefixMatch(new Signature[] {UTF16BE,UTF16LE,UTF32BE,UTF32LE},data)); assertEquals(NONE,getPrefixMatch(new Signature[] {NONE,UTF16BE,UTF16LE,UTF32BE,UTF32LE},data)); } @Test public void longestSignature() { assertEquals(4,Signature.getLongestLength()); } }