Link to code: TestTerm.java
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Random;
import org.junit.Test;
public class TestTerm {
private Random rng = new Random(1234);
private String[] myNames = { "bhut jolokia", "capsaicin", "carolina reaper", "chipotle", "habanero", "jalapeno",
"jalapeno membrane" };
private double[] myWeights = { 855000, 16000000, 2200000, 3500, 100000, 3500, 10000 };
public Term[] getTerms() {
Term[] terms = new Term[myNames.length];
for (int i = 0; i < terms.length; i++)
terms[i] = new Term(myNames[i], myWeights[i]);
return terms;
}
public int indexOf(Term[] arr, Term item) {
for (int i = 0; i < arr.length; i++)
if (arr[i].equals(item))
return i;
return -1;
}
public void shuffle(Object[] arr) {
for (int i = 0; i < arr.length; i++) {
int ind = rng.nextInt(arr.length);
Object temp = arr[i];
arr[i] = arr[ind];
arr[ind] = temp;
}
}
/**
* This test checks if Term throws a NullPointerException when constructed
* with a null argument
*/
@Test(timeout = 10000)
public void testConstructorException() {
try {
Term test = new Term(null, 1);
fail("No exception thrown for null String");
} catch (NullPointerException e) {
} catch (Throwable e) {
fail("Wrong exception thrown");
}
try {
Term test = new Term("test", -1);
fail("No exception thrown for invalid weight");
} catch (IllegalArgumentException e) {
} catch (Throwable e) {
fail("Wrong exception thrown");
}
}
/**
* Tests that sorting terms without comparator is the same as sorting
* lexicographically
*/
@Test(timeout = 10000)
public void testNativeSortingOrder() {
Term[] terms = getTerms();
Term[] sorted = terms.clone();
for (int i = 0; i < 10; i++) {
shuffle(terms);
Arrays.sort(terms);
assertArrayEquals(sorted, terms);
}
}
/**
* Tests WeightOrder sorts correctly
*/
@Test(timeout = 10000)
public void testWeightSortingOrder() {
Term[] terms = getTerms();
Term[] sorted = { terms[3], terms[5], terms[6], terms[4], terms[0], terms[2], terms[1] };
for (int i = 0; i < 10; i++) {
// preserve chipotle and jalapeno's order
shuffle(terms);
if (indexOf(terms, sorted[0]) > indexOf(terms, sorted[1])) {
int temp = indexOf(terms, sorted[0]);
terms[indexOf(terms, sorted[1])] = sorted[0];
terms[temp] = sorted[1];
}
Arrays.sort(terms, new Term.WeightOrder());
assertArrayEquals(sorted, terms);
}
}
/**
* Tests ReverseWeightSortingOrder
*/
@Test(timeout = 10000)
public void testReverseWeightSortingOrder() {
Term[] terms = getTerms();
Term[] sorted = { terms[1], terms[2], terms[0], terms[4], terms[6], terms[3], terms[5] };
for (int i = 0; i < 10; i++) {
// preserve chipotle and jalapeno's order
shuffle(terms);
if (indexOf(terms, sorted[5]) > indexOf(terms, sorted[6])) {
int temp = indexOf(terms, sorted[5]);
terms[indexOf(terms, sorted[6])] = sorted[5];
terms[temp] = sorted[6];
}
Arrays.sort(terms, new Term.ReverseWeightOrder());
assertArrayEquals(sorted, terms);
}
}
/**
* This test checks that toString returns the expected value
*/
@Test(timeout = 10000)
public void testToString() {
Term[] terms = getTerms();
for (Term t : terms) {
assertTrue("weight missing", t.toString().contains(String.format("%.1f", t.getWeight())));
assertTrue("word missing", t.toString().contains(t.getWord()));
assertTrue("no tab", t.toString().contains("\t"));
}
}
}