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 LCCallNumber} 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.ExerciseLCCallNumber}
*
* @author Tod Olson, University of Chicago
*
*/
public class LCCallNumberTests
{
/**
* array of call numbers for use as test data.
*/
static ArrayList<String> callNums;
@Before
public void setup()
{
initCallNums();
}
static String[][] shelfArray= {
{"BF 1999 1973", "BF1999 .A63880"},
{"BF1999 .A63880", "BF1999 Aarons"},
{"BF1999 .B34", "BF1999 Aarons"},
{"BF1999 .B34", "BF1999 C78"},
};
@Test
public void examineShelfKeyOrder()
{
for (String[] pair: shelfArray)
{
LCCallNumber call1 = new LCCallNumber(pair[0]);
LCCallNumber call2 = new LCCallNumber(pair[1]);
String key1 = call1.getShelfKey();
String key2 = call2.getShelfKey();
if (key1.compareTo(key2) >= 0)
System.out.println("shelfKey order problem: "+ key1 + " - > - " + key2);
assertTrue(key1.compareTo(key2) < 0);
}
}
@Test
public void exerciseShelfKey()
{
String prevShelfKey = "";
for (String callnum : callNums)
{
LCCallNumber call = new LCCallNumber(callnum);
if (callnum.equals("QA76")) break;
String shelfKey = call.getShelfKey();
if (shelfKey.compareTo(prevShelfKey) < 0)
System.out.println("shelfKey order problem: "+ prevShelfKey + " - > - " + shelfKey);
assertTrue(shelfKey.compareTo(prevShelfKey) >= 0);
prevShelfKey = shelfKey;
}
}
@Test
public void exercisePatterns()
{
for (String callnum : callNums)
{
Matcher m = LCCallNumber.classPattern.matcher(callnum);
if (!m.matches())
System.out.println("pattern problem: "+ callnum);
assertTrue(m.matches());
}
}
@SuppressWarnings("unused")
@Test
public void exerciseClass()
{
for (String callnum : callNums)
{
LCCallNumber call = new LCCallNumber(callnum);
String classification = call.getClassification();
String classDigits = call.getClassDigits();
String classDecimal = call.getClassDecimal();
String cutter = call.getCutter();
String cutterSuffix = call.getClassSuffix();
String shelfKey = call.getShelfKey();
}
}
private static void initCallNums()
{
callNums = new ArrayList<String>();
callNums.add("A1 B2 .C33");
callNums.add("A1 B2 C33");
callNums.add("A1 B2.C33");
callNums.add("A1 B2C33");
callNums.add("AB9 L3");
callNums.add("BF199");
callNums.add("BF199.");
callNums.add("BF199.A1J7");
callNums.add("G3841 .C2 1935 .M3");
callNums.add("HC241.25 .I4 D47");
callNums.add("HD 38.25.F8 R87 1989");
callNums.add("HD38.25.F8 R87 1989");
callNums.add("HE5.215 .N9/PT.A");
callNums.add("HF 5549.5.T7 B294 1992");
callNums.add("LD6329 1903 35TH");
callNums.add("LD6353 1886");
callNums.add("M1 .L33");
callNums.add("M1 L33");
callNums.add("M5 .L");
callNums.add("M5 L3 1902");
// callNums.add("M5 L3 1902V");
callNums.add("M5 L3 1902 V.2");
callNums.add("M5 L3 1902 V2");
callNums.add("M5 .L3 1902 V2 TANEYTOWN");
callNums.add("M211 .M93 BMW240");
callNums.add("M211 .M93 K.240");
callNums.add("M211 .M93 K.240 1988 .A1");
callNums.add("M211 .M93 K.240 1988 A1");
callNums.add("M453 .Z29 Q1 L V.2");
callNums.add("M857 .K93 H2 OP.79");
callNums.add("M857 .M93 S412B M");
callNums.add("M1001 .H");
callNums.add("M1001 .M9 1900Z");
callNums.add("M1001 .M9 K.173D B");
callNums.add("M1001 .M9 K.551 1900Z M");
callNums.add("M1001 .M939 S.3,13 2001");
callNums.add("ML410 .M8 L25 .M95 1995");
callNums.add("ML410 .M8 L25 M95 1995");
callNums.add("ML410 .M9 P29 1941 M");
callNums.add("MT37 2003M384");
callNums.add("MT130 .M93 K96 .W83 1988");
callNums.add("MT130 .M93 K96 W83 1988");
callNums.add("PQ2678.K26 P54");
callNums.add("PQ8550.21.R57 V5 1992");
callNums.add("PR92 .L33 1990");
callNums.add("PR919 .L33 1990");
callNums.add("PR9199 .A39");
callNums.add("PR9199.48 .B3");
callNums.add("PS153 .G38 B73 2012");
// incomplete or local
callNums.add("QA76");
callNums.add("M1");
callNums.add("XXKD671.G53 2012");
callNums.add("BF1999.A63880 1978");
callNums.add("BF1999 Aarons");
// Non-LC
callNums.add("Sony PDX10");
callNums.add("RCA Jz(1)");
// Lower case input
callNums.add("bq1270");
callNums.add("l666 15th A8");
}
}