package org.solrmarc.callnum;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.regex.Matcher;
import org.junit.Before;
import org.junit.Test;
/**
* Exercise the {@code DeweyCallNumber} class from the command line.
* Illustrates parsing a shelf key construction.
* Useful for debugging during development.
*
* <p>From the root of the solrmarc distribution:
* <p>{@code java -cp lib/solrmarc/build org.solrmarc.callnum.ExerciseDeweyCallNumber}
*
* @author Tod Olson, University of Chicago
*
*/
public class DeweyCallNumberTests
{
/**
* array of call numbers for use as test data.
*/
ArrayList<String> validCallNums;
ArrayList<String> invalidCallNums;
@Before
public void setup()
{
initCallNums();
}
@Test
public void exercisePatterns()
{
for (String callnum : validCallNums)
{
Matcher m = DeweyCallNumber.classPattern.matcher(callnum);
assertTrue(m.matches());
}
for (String callnum : invalidCallNums)
{
Matcher m = DeweyCallNumber.classPattern.matcher(callnum);
assertTrue(!m.matches());
}
}
@SuppressWarnings("unused")
@Test
public void exerciseClass()
{
for (String callnum : validCallNums)
{
DeweyCallNumber call = new DeweyCallNumber(callnum);
String classification = call.getClassification();
String classDigits = call.getClassDigits();
String classDecimal = call.getClassDecimal();
String cutter = call.getCutter();
String cutterSuffix = call.getSuffix();
String shelfKey = call.getShelfKey();
}
}
@Test
public void exerciseShelfKey()
{
String prevShelfKey = "";
for (String callnum : validCallNums)
{
DeweyCallNumber call = new DeweyCallNumber(callnum);
String shelfKey = call.getShelfKey();
if (shelfKey.compareTo(prevShelfKey) < 0)
System.out.println("shelfKey order problem: "+ prevShelfKey + " - > - " + shelfKey);
assertTrue(shelfKey.compareTo(prevShelfKey) >= 0);
prevShelfKey = shelfKey;
}
prevShelfKey = "";
for (String callnum : invalidCallNums)
{
DeweyCallNumber call = new DeweyCallNumber(callnum);
String shelfKey = call.getShelfKey();
if (shelfKey.compareTo(prevShelfKey) < 0)
System.out.println("shelfKey order problem: "+ prevShelfKey + " - > - " + shelfKey);
assertTrue(shelfKey.compareTo(prevShelfKey) >= 0);
prevShelfKey = shelfKey;
}
}
private void initCallNums()
{
validCallNums = new ArrayList<String>();
validCallNums.add("1 .I39"); // one digit no fraction
validCallNums.add("1.23 .I39"); // one digit fraction
validCallNums.add("11 .I39"); // two digits no fraction
validCallNums.add("11.34 .I39"); // two digits fraction
validCallNums.add("11.34567 .I39"); // two digits fraction
validCallNums.add("111 .I39"); // no fraction in class
validCallNums.add("111 I39"); // no fraction no period before cutter
validCallNums.add("111Q39"); // no fraction, no period or space before cutter
validCallNums.add("111.12 .I39"); // fraction in class, space period
validCallNums.add("111.123 I39"); // space but no period before cutter
validCallNums.add("111.134Q39"); // no period or space before cutter
validCallNums.add("322.44 .F816 V.1 1974"); // cutterSuffix - volume and year
validCallNums.add("322.45 .R513 1957"); // cutterSuffix year
validCallNums.add("323 .A512RE NO.23-28"); // cutterSuffix no.
validCallNums.add("323 .A778 ED.2"); // cutterSuffix ed
validCallNums.add("323.09 .K43 V.1"); // cutterSuffix volume
validCallNums.add("324.54 .I39 F"); // letter with space
validCallNums.add("324.548 .C425R"); // letter without space
validCallNums.add("324.6 .A75CUA"); // letters without space
invalidCallNums = new ArrayList<String>();
invalidCallNums.add("");
invalidCallNums.add("MC1 259");
invalidCallNums.add("T1 105");
}
}