Use MARC-8 encoding
[marc4j.git] / src / org / marc4j / test / RecordTest.java
1 package org.marc4j.test;\r
2 \r
3 import java.io.InputStream;\r
4 import java.util.List;\r
5 \r
6 import junit.framework.Test;\r
7 import junit.framework.TestCase;\r
8 import junit.framework.TestSuite;\r
9 import junit.textui.TestRunner;\r
10 \r
11 import org.marc4j.MarcReader;\r
12 import org.marc4j.MarcStreamReader;\r
13 import org.marc4j.marc.ControlField;\r
14 import org.marc4j.marc.DataField;\r
15 import org.marc4j.marc.MarcFactory;\r
16 import org.marc4j.marc.Record;\r
17 import org.marc4j.marc.VariableField;\r
18 \r
19 public class RecordTest extends TestCase {\r
20 \r
21     Record record = null;\r
22 \r
23     public void setUp() throws Exception {\r
24         InputStream input = getClass().getResourceAsStream(\r
25                 "resources/summerland.mrc");\r
26         assertTrue("No test data", input != null);\r
27         MarcReader reader = new MarcStreamReader(input, "MARC-8");\r
28         while (reader.hasNext()) {\r
29             record = reader.next();\r
30         }\r
31         input.close();\r
32     }\r
33 \r
34     public void testGetFields() {\r
35         String cn = record.getControlNumber();\r
36         assertEquals("12883376", cn);\r
37 \r
38         ControlField cf = record.getControlNumberField();\r
39         assertEquals("001", cf.getTag());\r
40         assertEquals("12883376", cf.getData());\r
41 \r
42         List<VariableField> fieldList = record.getVariableFields();\r
43         assertEquals(15, fieldList.size());\r
44 \r
45         List<ControlField> controlList = record.getControlFields();\r
46         assertEquals(3, controlList.size());\r
47 \r
48         List<DataField> dataList = record.getDataFields();\r
49         assertEquals(12, dataList.size());\r
50 \r
51         VariableField field = record.getVariableField("245");\r
52         assertEquals("245", field.getTag());\r
53 \r
54         fieldList = record.getVariableFields("650");\r
55         assertEquals(3, fieldList.size());\r
56 \r
57         String[] fields = { "245", "260", "300" };\r
58         fieldList = record.getVariableFields(fields);\r
59         assertEquals(3, fieldList.size());\r
60     }\r
61 \r
62     @SuppressWarnings("rawtypes")\r
63     public void testFind() throws Exception {\r
64         VariableField field = record.getVariableField("245");\r
65         assertEquals(true, field.find("Summerland"));\r
66         assertEquals(true, field.find("Sum*erland"));\r
67         assertEquals(true, field.find("[Cc]habo[a-z]"));\r
68 \r
69         field = record.getVariableField("008");\r
70         assertEquals(true, field.find("eng"));\r
71 \r
72         List result = record.find("Summerland");\r
73         assertEquals(1, result.size());\r
74         field = (VariableField) result.get(0);\r
75         assertEquals("245", field.getTag());\r
76 \r
77         result = record.find("Chabon");\r
78         assertEquals(2, result.size());\r
79 \r
80         result = record.find("100", "Chabon");\r
81         assertEquals(1, result.size());\r
82 \r
83         String[] tags = { "100", "260", "300" };\r
84         result = record.find(tags, "Chabon");\r
85         assertEquals(1, result.size());\r
86 \r
87         result = record.find("040", "DLC");\r
88         assertTrue(result.size() > 0);\r
89 \r
90         DataField df = (DataField) result.get(0);\r
91         String agency = df.getSubfield('a').getData();\r
92         assertTrue(agency.matches("DLC"));\r
93 \r
94     }\r
95 \r
96     public void testCreateRecord() throws Exception {\r
97         MarcFactory factory = MarcFactory.newInstance();\r
98         Record record = factory.newRecord("00000cam a2200000 a 4500");\r
99         assertEquals("00000cam a2200000 a 4500", record.getLeader().marshal());\r
100 \r
101         record.addVariableField(factory.newControlField("001", "12883376"));\r
102 \r
103         DataField df = factory.newDataField("245", '1', '0');\r
104         df.addSubfield(factory.newSubfield('a', "Summerland /"));\r
105         df.addSubfield(factory.newSubfield('c', "Michael Chabon."));\r
106         record.addVariableField(df);\r
107     }\r
108 \r
109     public void tearDown() {\r
110         record = null;\r
111     }\r
112 \r
113     public static Test suite() {\r
114         return new TestSuite(RecordTest.class);\r
115     }\r
116 \r
117     public static void main(String args[]) {\r
118         TestRunner.run(suite());\r
119     }\r
120 }\r