/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
package org.mozilla.android.sync.test;
import static org.junit.Assert.fail;
import org.junit.Before;
import org.junit.Test;
import org.mozilla.gecko.sync.setup.InvalidSyncKeyException;
import org.mozilla.gecko.sync.setup.activities.ActivityUtils;
public class TestSyncKeyVerification {
private int[] mutateIndices;
private final String validBasicKey = "abcdefghijkmnpqrstuvwxyz23"; // 26 char, valid characters.
char[] invalidChars = new char[] { '1', 'l', 'o', '0' };
@Before
public void setUp() {
// Generate indicies to mutate.
mutateIndices = generateMutationArray();
}
@Test
public void testValidKey() {
try {
ActivityUtils.validateSyncKey(validBasicKey);
} catch (InvalidSyncKeyException e) {
fail("Threw unexpected InvalidSyncKeyException.");
}
}
@Test
public void testHyphenationSuccess() {
StringBuilder sb = new StringBuilder();
int prev = 0;
for (int i : mutateIndices) {
sb.append(validBasicKey.substring(prev, i));
sb.append("-");
prev = i;
}
sb.append(validBasicKey.substring(prev));
String hString = sb.toString();
try {
ActivityUtils.validateSyncKey(hString);
} catch (InvalidSyncKeyException e) {
fail("Failed validation with hypenation.");
}
}
@Test
public void testCapitalizationSuccess() {
char[] mutatedKey = validBasicKey.toCharArray();
for (int i : mutateIndices) {
mutatedKey[i] = Character.toUpperCase(validBasicKey.charAt(i));
}
String mKey = new String(mutatedKey);
try {
ActivityUtils.validateSyncKey(mKey);
} catch (InvalidSyncKeyException e) {
fail("Failed validation with uppercasing.");
}
}
@Test (expected = InvalidSyncKeyException.class)
public void testInvalidCharFailure() throws InvalidSyncKeyException {
char[] mutatedKey = validBasicKey.toCharArray();
for (int i : mutateIndices) {
mutatedKey[i] = invalidChars[i % invalidChars.length];
}
ActivityUtils.validateSyncKey(mutatedKey.toString());
}
private int[] generateMutationArray() {
// Hardcoded; change if desired?
return new int[] { 2, 4, 5, 9, 16 };
}
}