/* * Copyright 2009, Mahmood Ali. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * * Neither the name of Mahmood Ali. nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.notnoop.apns.internal; import org.junit.Assert; import org.junit.Test; public class UtilitiesTest { @Test public void testEncodeAndDecode() { String encodedHex = "a1b2d4"; byte[] decoded = Utilities.decodeHex(encodedHex); String encoded = Utilities.encodeHex(decoded); Assert.assertEquals(encodedHex.toLowerCase(), encoded.toLowerCase()); } @Test public void testParsingBytes() { Assert.assertEquals(0xFF00FF00, Utilities.parseBytes(0xFF, 0, 0xFF, 0)); Assert.assertEquals(0x00FF00FF, Utilities.parseBytes(0, 0xFF, 0, 0xFF)); Assert.assertEquals(0xDEADBEEF, Utilities.parseBytes(0xDE, 0xAD, 0xBE, 0xEF)); Assert.assertEquals(0x0EADBEEF, Utilities.parseBytes(0x0E, 0xAD, 0xBE, 0xEF)); Assert.assertTrue(Utilities.parseBytes(0xF0, 0,0,0) < 0); Assert.assertTrue(Utilities.parseBytes(0x80, 0,0,0) < 0); Assert.assertTrue(Utilities.parseBytes(0x70, 0,0,0) > 0); } @Test public void testEncodingUTF8() { String m = "esemény"; // See http://en.wikipedia.org/wiki/Unicode_equivalence#Example // // Oh the joy as different platforms choose to normalize Unicode differently ... but both are valid. // // This is intended to fix a problem under jdk 6, I was not able to reproduce it with jdk 7u51 on OSX Mavericks // (Java seems to also use expected_NFC here). byte[] expected_NFC = { 'e', 's', 'e', 'm', (byte)0x00C3, (byte)0x00A9, 'n', 'y' }; byte[] expected_NFD = { 'e', 's', 'e', 'm', (byte)0x00cc, (byte)0x0081, (byte)0x0061, 'n', 'y' }; final byte[] bytes = Utilities.toUTF8Bytes(m); if (bytes.length == 8) { Assert.assertArrayEquals(expected_NFC, bytes); } else { Assert.assertArrayEquals(expected_NFD, bytes); } } }