package nodomain.freeyourgadget.gadgetbridge.test;
import org.junit.Test;
import nodomain.freeyourgadget.gadgetbridge.util.ArrayUtils;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
/**
* Tests ArrayUtils
*/
public class ArrayUtilsTest extends TestBase {
private static final byte[] EMPTY = new byte[0];
private static final byte[] DATA_5 = new byte[] { 1, 2, 3, 4, 5};
public ArrayUtilsTest() throws Exception {
}
@Test
public void testEqualsException1() throws Exception {
try {
ArrayUtils.equals(null, EMPTY, 0);
fail("equals should throw on bad argument");
} catch (IllegalArgumentException ex) {
// expected
}
}
@Test
public void testEqualsException2() throws Exception {
try {
ArrayUtils.equals(EMPTY, null, 0);
fail("equals should throw on bad argument");
} catch (IllegalArgumentException ex) {
// expected
}
}
@Test
public void testEqualsException5() throws Exception {
try {
ArrayUtils.equals(EMPTY, EMPTY, -1);
fail("equals should throw on bad argument");
} catch (IllegalArgumentException ex) {
// expected
}
}
@Test
public void testEqualsEmptyData() throws Exception {
assertFalse(ArrayUtils.equals(EMPTY, DATA_5, 0));
}
@Test
public void testEqualsEmptyTest() throws Exception {
// testing for 0 equal bytes may be senseless, but always true
assertTrue(ArrayUtils.equals(EMPTY, EMPTY, 0));
assertTrue(ArrayUtils.equals(DATA_5, EMPTY, 0));
}
@Test
public void testEquals1() throws Exception {
assertTrue(ArrayUtils.equals(DATA_5, b(1), 0));
}
@Test
public void testEquals2() throws Exception {
assertTrue(ArrayUtils.equals(DATA_5, b(2), 1));
}
@Test
public void testEquals5() throws Exception {
assertTrue(ArrayUtils.equals(DATA_5, b(5), 4));
}
@Test
public void testEqualsOutOfRange() throws Exception {
assertFalse(ArrayUtils.equals(DATA_5, b(5), 5));
}
@Test
public void testEquals123() throws Exception {
assertTrue(ArrayUtils.equals(DATA_5, new byte[] {1, 2, 3}, 0));
}
@Test
public void testEquals234() throws Exception {
assertTrue(ArrayUtils.equals(DATA_5, new byte[] {2, 3, 4}, 1));
}
@Test
public void testEquals345() throws Exception {
assertTrue(ArrayUtils.equals(DATA_5, new byte[] {3, 4, 5}, 2));
}
@Test
public void testEquals12345() throws Exception {
assertTrue(ArrayUtils.equals(DATA_5, DATA_5, 0));
}
@Test
public void testEqualsWrongStart() throws Exception {
assertFalse(ArrayUtils.equals(DATA_5, new byte[] {0, 2, 3}, 0));
}
@Test
public void testEqualsWrongEnd() throws Exception {
assertFalse(ArrayUtils.equals(DATA_5, new byte[] {3, 4, 6}, 2));
}
@Test
public void testStartsWith1() throws Exception {
assertTrue(ArrayUtils.startsWith(DATA_5, new byte[] {1}));
}
@Test
public void testStartsWith2() throws Exception {
assertTrue(ArrayUtils.startsWith(DATA_5, new byte[] {1, 2}));
}
@Test
public void testStartsWithAll() throws Exception {
assertTrue(ArrayUtils.startsWith(DATA_5, DATA_5.clone()));
}
@Test
public void testStartsWithEmpty() throws Exception {
assertTrue(ArrayUtils.startsWith(DATA_5, EMPTY));
}
@Test
public void testStartsWithFail1() throws Exception {
try {
ArrayUtils.startsWith(DATA_5, null);
fail("should have thrown an exception");
} catch (IllegalArgumentException ex) {
// expected
}
}
@Test
public void testStartsWithFail3() throws Exception {
assertFalse(ArrayUtils.startsWith(DATA_5, new byte[] {2, 3}));
}
@Test
public void testStartsWithFail4() throws Exception {
assertFalse(ArrayUtils.startsWith(DATA_5, new byte[] {1, 2, 3, 4, 5, 6}));
}
private byte[] b(int b) {
return new byte[] {(byte) b};
}
}