package org.marketcetera.util.unicode; import org.apache.commons.lang.ArrayUtils; import org.junit.Test; import org.marketcetera.util.except.I18NException; import org.marketcetera.util.test.TestCaseBase; import static org.junit.Assert.*; import static org.marketcetera.util.test.UnicodeData.*; import static org.marketcetera.util.unicode.DecodingStrategy.*; /** * @author tlerios@marketcetera.com * @since 0.6.0 * @version $Id: DecodingStrategyTest.java 16154 2012-07-14 16:34:05Z colin $ */ /* $License$ */ public class DecodingStrategyTest extends TestCaseBase { private static void common (DecodingStrategy strategy, byte[] data, SignatureCharset sc) throws Exception { if (sc==null) { assertNull(strategy.getPrefixMatch(data)); try { strategy.decode(data); fail(); } catch (I18NException ex) { assertEquals(ex.getDetail(),Messages.NO_SIGNATURE_MATCHES, ex.getI18NBoundMessage()); } return; } data=ArrayUtils.addAll(sc.getSignature().getMark(),data); assertEquals(sc,strategy.getPrefixMatch(data)); assertEquals(COMBO,strategy.decode(data)); } private static void single (DecodingStrategy strategy, int length, byte[] data, SignatureCharset sc) throws Exception { assertNotNull(strategy.getSerializations()); assertEquals(length,strategy.getSerializations().length); assertNull(strategy.decode(null)); common(strategy,COMBO_UTF8,SignatureCharset.UTF8_UTF8); common(strategy,COMBO_UTF16BE,SignatureCharset.UTF16BE_UTF16BE); common(strategy,COMBO_UTF16LE,SignatureCharset.UTF16LE_UTF16LE); common(strategy,COMBO_UTF32BE,SignatureCharset.UTF32BE_UTF32BE); common(strategy,COMBO_UTF32LE,SignatureCharset.UTF32LE_UTF32LE); common(strategy,data,sc); } @Test public void all() throws Exception { single(UTF8_DEFAULT,4, COMBO_UTF8,SignatureCharset.NONE_UTF8); single(UTF16_DEFAULT,3, COMBO_UTF16BE,SignatureCharset.NONE_UTF16BE); single(UTF32_DEFAULT,3, COMBO_UTF32BE,SignatureCharset.NONE_UTF32BE); single(SIG_REQ,5, COMBO_UTF32BE,null); } }