Skip to content

Commit eb38a1b

Browse files
committed
Add test for #524 (#454)
- fix typo - remove superflous endEntity - add method to avoid unnecessary char-string conversion
1 parent e2c4c0d commit eb38a1b

File tree

2 files changed

+26
-12
lines changed

2 files changed

+26
-12
lines changed

metafacture-biblio/src/main/java/org/metafacture/biblio/marc21/Marc21Encoder.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -199,24 +199,27 @@ public void literal(final String name, final String value) {
199199
private void processLeaderAsOneLiteral(final String value) {
200200
if (value.length() != Iso2709Constants.RECORD_LABEL_LENGTH) {
201201
throw new FormatException(
202-
"leader literal must contain " + Iso2709Constants.RECORD_LABEL_LENGTH + " characters:" + value);
202+
"leader literal must contain " + Iso2709Constants.RECORD_LABEL_LENGTH + " characters: " + value);
203203
}
204-
processLeaderAsSubfields(Marc21EventNames.RECORD_STATUS_LITERAL, String.valueOf(value.charAt(Iso2709Constants.RECORD_STATUS_POS)));
205-
processLeaderAsSubfields(Marc21EventNames.RECORD_TYPE_LITERAL, String.valueOf(value.charAt(Iso2709Constants.IMPL_CODES_START)));
206-
processLeaderAsSubfields(Marc21EventNames.BIBLIOGRAPHIC_LEVEL_LITERAL, String.valueOf(value.charAt(Iso2709Constants.IMPL_CODES_START + 1)));
207-
processLeaderAsSubfields(Marc21EventNames.TYPE_OF_CONTROL_LITERAL, String.valueOf(value.charAt(Iso2709Constants.IMPL_CODES_START + 2)));
208-
processLeaderAsSubfields(Marc21EventNames.CHARACTER_CODING_LITERAL, String.valueOf(value.charAt(Iso2709Constants.RECORD_STATUS_POS + Iso2709Constants.IMPL_CODES_LENGTH)));
209-
processLeaderAsSubfields(Marc21EventNames.ENCODING_LEVEL_LITERAL, String.valueOf(value.charAt(Iso2709Constants.SYSTEM_CHARS_START)));
210-
processLeaderAsSubfields(Marc21EventNames.CATALOGING_FORM_LITERAL, String.valueOf(value.charAt(Iso2709Constants.SYSTEM_CHARS_START + 1)));
211-
processLeaderAsSubfields(Marc21EventNames.MULTIPART_LEVEL_LITERAL, String.valueOf(value.charAt(Iso2709Constants.SYSTEM_CHARS_START + 2)));
204+
processLeaderAsSubfields(Marc21EventNames.RECORD_STATUS_LITERAL, value.charAt(Iso2709Constants.RECORD_STATUS_POS));
205+
processLeaderAsSubfields(Marc21EventNames.RECORD_TYPE_LITERAL, value.charAt(Iso2709Constants.IMPL_CODES_START));
206+
processLeaderAsSubfields(Marc21EventNames.BIBLIOGRAPHIC_LEVEL_LITERAL, value.charAt(Iso2709Constants.IMPL_CODES_START + 1));
207+
processLeaderAsSubfields(Marc21EventNames.TYPE_OF_CONTROL_LITERAL, value.charAt(Iso2709Constants.IMPL_CODES_START + 2));
208+
processLeaderAsSubfields(Marc21EventNames.CHARACTER_CODING_LITERAL, value.charAt(Iso2709Constants.RECORD_STATUS_POS + Iso2709Constants.IMPL_CODES_LENGTH));
209+
processLeaderAsSubfields(Marc21EventNames.ENCODING_LEVEL_LITERAL, value.charAt(Iso2709Constants.SYSTEM_CHARS_START));
210+
processLeaderAsSubfields(Marc21EventNames.CATALOGING_FORM_LITERAL, value.charAt(Iso2709Constants.SYSTEM_CHARS_START + 1));
211+
processLeaderAsSubfields(Marc21EventNames.MULTIPART_LEVEL_LITERAL, value.charAt(Iso2709Constants.SYSTEM_CHARS_START + 2));
212212
}
213213

214214
private void processLeaderAsSubfields(final String name, final String value) {
215215
if (value.length() != 1) {
216216
throw new FormatException(
217217
"literal must only contain a single character:" + name);
218218
}
219-
final char code = value.charAt(0);
219+
processLeaderAsSubfields(name, value.charAt(0));
220+
}
221+
222+
private void processLeaderAsSubfields(final String name, final char code) {
220223
switch (name) {
221224
case Marc21EventNames.RECORD_STATUS_LITERAL:
222225
requireValidCode(code, Marc21Constants.RECORD_STATUS_CODES);

metafacture-biblio/src/test/java/org/metafacture/biblio/marc21/Marc21EncoderTest.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,6 @@ public void issue454ShouldNotFailWhenProcessingEntityLeaderAsOneString() {
120120
marc21Encoder.startEntity(LEADER_ENTITY);
121121
marc21Encoder.literal(LEADER_ENTITY, "02602pam a2200529 c 4500");
122122
marc21Encoder.endEntity();
123-
marc21Encoder.endEntity();
124123
marc21Encoder.endRecord();
125124

126125
verify(receiver).process(matches("00026pam a2200025 c 4500\u001e\u001d"));
@@ -130,10 +129,22 @@ public void issue454ShouldNotFailWhenProcessingEntityLeaderAsOneString() {
130129
public void issue454ShouldNotFailWhenProcessingLeaderAsOneString() {
131130
marc21Encoder.startRecord("");
132131
marc21Encoder.literal(LEADER_ENTITY, "02602pam a2200529 c 4500");
133-
marc21Encoder.endEntity();
134132
marc21Encoder.endRecord();
135133

136134
verify(receiver).process(matches("00026pam a2200025 c 4500\u001e\u001d"));
137135
}
138136

137+
@Test
138+
public void issue524ShouldComputeValidLeader() {
139+
marc21Encoder.startRecord("");
140+
marc21Encoder.literal(LEADER_ENTITY, "00000pam a7777777 c 4444");
141+
marc21Encoder.startEntity("021a ");
142+
marc21Encoder.literal("v", "Fritz");
143+
marc21Encoder.literal("n", "Bauer");
144+
marc21Encoder.endEntity();
145+
marc21Encoder.endRecord();
146+
147+
verify(receiver).process(matches("00055pam a2200037 c 4500021001700000\u001e.*\u001d"));
148+
}
149+
139150
}

0 commit comments

Comments
 (0)