/* * Copyright 2005-2015 by BerryWorks Software, LLC. All rights reserved. */ package com.berryworks.edireader.tokenizer; import com.berryworks.edireader.EDISyntaxException; import org.junit.Test; import java.io.*; import java.util.List; import static org.junit.Assert.*; public class TestEDITokenizer { private Tokenizer tokenizer; @Test public void testNextToken() throws Exception { tokenizer = new EDITokenizer(new StringReader( "abc-def-ghi!j--kl-mnop!q-123-123x!")); assertNotNull(tokenizer); tokenizer.setTerminator('!'); tokenizer.setDelimiter('-'); assertEquals(0, tokenizer.getCharCount()); assertEquals(0, tokenizer.getSegmentCharCount()); Token token; // abc-def-ghi!j--kl-mnop!q-123-123x! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_START, token.getType()); assertEquals("abc00", token.getElementId()); assertEquals(0, token.getIndex()); assertEquals("abc", token.getValue()); assertEquals("abc", token.getSegmentType()); assertEquals(4, tokenizer.getCharCount()); assertEquals(4, tokenizer.getSegmentCharCount()); assertTrue(tokenizer.hasMoreTokens()); // abc-def-ghi!j--kl-mnop!q-123-123x! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals("abc01", token.getElementId()); assertEquals(1, token.getIndex()); assertEquals("def", token.getValue()); assertEquals("abc", token.getSegmentType()); assertEquals(8, tokenizer.getCharCount()); assertEquals(8, tokenizer.getSegmentCharCount()); // abc-def-ghi!j--kl-mnop!q-123-123x! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals("abc02", token.getElementId()); assertEquals(2, token.getIndex()); assertEquals("ghi", token.getValue()); assertEquals("abc", token.getSegmentType()); assertEquals(11, tokenizer.getCharCount()); assertEquals(11, tokenizer.getSegmentCharCount()); // abc-def-ghi!j--kl-mnop!q-123-123x! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_END, token.getType()); assertEquals(2, token.getIndex()); assertEquals("abc", token.getSegmentType()); assertEquals(12, tokenizer.getCharCount()); assertEquals(12, tokenizer.getSegmentCharCount()); // abc-def-ghi!j--kl-mnop!q-123-123x! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_START, token.getType()); assertEquals(0, token.getIndex()); assertEquals("j00", token.getElementId()); assertEquals("j", token.getValue()); assertEquals("j", token.getSegmentType()); assertEquals(14, tokenizer.getCharCount()); assertEquals(2, tokenizer.getSegmentCharCount()); // abc-def-ghi!j--kl-mnop!q-123-123x! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.EMPTY, token.getType()); assertEquals("j01", token.getElementId()); assertEquals(1, token.getIndex()); assertEquals("j", token.getSegmentType()); assertEquals(15, tokenizer.getCharCount()); assertEquals(3, tokenizer.getSegmentCharCount()); // abc-def-ghi!j--kl-mnop!q-123-123x! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals("j02", token.getElementId()); assertEquals(2, token.getIndex()); assertEquals("kl", token.getValue()); assertEquals("j", token.getSegmentType()); assertEquals(18, tokenizer.getCharCount()); assertEquals(6, tokenizer.getSegmentCharCount()); // abc-def-ghi!j--kl-mnop!q-123-123x! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals("j03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals("mnop", token.getValue()); assertEquals("j", token.getSegmentType()); assertEquals(22, tokenizer.getCharCount()); assertEquals(10, tokenizer.getSegmentCharCount()); // abc-def-ghi!j--kl-mnop!q-123-123x! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_END, token.getType()); assertEquals(3, token.getIndex()); assertEquals("j", token.getSegmentType()); assertEquals(23, tokenizer.getCharCount()); assertEquals(11, tokenizer.getSegmentCharCount()); // abc-def-ghi!j--kl-mnop!q-123-123x! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_START, token.getType()); assertEquals("q00", token.getElementId()); assertEquals(0, token.getIndex()); assertEquals("q", token.getValue()); assertEquals("q", token.getSegmentType()); assertEquals(25, tokenizer.getCharCount()); assertEquals(2, tokenizer.getSegmentCharCount()); // abc-def-ghi!j--kl-mnop!q-123-123x! // ^ int i = tokenizer.nextIntValue(); assertEquals(i, 123); assertEquals(29, tokenizer.getCharCount()); assertEquals(6, tokenizer.getSegmentCharCount()); // abc-def-ghi!j--kl-mnop!q-123-123x! // ^ try { tokenizer.nextIntValue(); fail("did not throw exception as expected for nextIntValue()"); } catch (EDISyntaxException e) { assertEquals(33, tokenizer.getCharCount()); assertEquals(10, tokenizer.getSegmentCharCount()); } // abc-def-ghi!j--kl-mnop!q-123-123x! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_END, token.getType()); assertEquals("q", token.getSegmentType()); assertEquals(34, tokenizer.getCharCount()); assertEquals(11, tokenizer.getSegmentCharCount()); assertFalse(tokenizer.hasMoreTokens()); // abc-def-ghi!j--kl-mnop!q-123-123x! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.END_OF_DATA, token.getType()); assertEquals(36, tokenizer.getCharCount()); assertFalse(tokenizer.hasMoreTokens()); } @Test public void testSubElements() throws Exception { tokenizer = new EDITokenizer(new StringReader( "abc-def.ghij..k-l.m!abc-..n.o-p-q...-r...!")); assertNotNull(tokenizer); tokenizer.setTerminator('!'); tokenizer.setDelimiter('-'); tokenizer.setSubDelimiter('.'); Token token; // abc-def.ghij..k-l.m! ... // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SEGMENT_START, token.getType()); assertEquals(0, token.getIndex()); assertEquals(0, token.getIndex()); assertEquals("abc", token.getValue()); assertEquals(4, tokenizer.getCharCount()); assertEquals(4, tokenizer.getSegmentCharCount()); // abc-def.ghij..k-l.m! ... // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals("abc01", token.getElementId()); assertEquals(1, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("def", token.getValue()); assertEquals("abc", token.getSegmentType()); assertTrue(token.isFirst()); assertFalse(token.isLast()); assertEquals(0, token.getSubIndex()); assertEquals(8, tokenizer.getCharCount()); assertEquals(8, tokenizer.getSegmentCharCount()); // abc-def.ghij..k-l.m! ... // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals("abc01", token.getElementId()); assertEquals(1, token.getIndex()); assertEquals(1, token.getSubIndex()); assertEquals("ghij", token.getValue()); assertFalse(token.isFirst()); assertFalse(token.isLast()); assertEquals(13, tokenizer.getCharCount()); assertEquals(13, tokenizer.getSegmentCharCount()); // abc-def.ghij..k-l.m! ... // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals(1, token.getIndex()); assertEquals(2, token.getSubIndex()); assertFalse(token.isFirst()); assertFalse(token.isLast()); assertEquals(14, tokenizer.getCharCount()); assertEquals(14, tokenizer.getSegmentCharCount()); // abc-def.ghij..k-l.m! ... // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals(1, token.getIndex()); assertEquals(3, token.getSubIndex()); assertEquals("k", token.getValue()); assertFalse(token.isFirst()); assertTrue(token.isLast()); assertEquals(3, token.getSubIndex()); assertEquals(16, tokenizer.getCharCount()); assertEquals(16, tokenizer.getSegmentCharCount()); // abc-def.ghij..k-l.m! ... // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals(2, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("l", token.getValue()); assertTrue(token.isFirst()); assertFalse(token.isLast()); assertEquals(0, token.getSubIndex()); assertEquals(18, tokenizer.getCharCount()); assertEquals(18, tokenizer.getSegmentCharCount()); // ... -l.m!abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals(2, token.getIndex()); assertEquals(1, token.getSubIndex()); assertEquals("m", token.getValue()); assertFalse(token.isFirst()); assertTrue(token.isLast()); assertEquals(1, token.getSubIndex()); assertEquals(19, tokenizer.getCharCount()); assertEquals(19, tokenizer.getSegmentCharCount()); // ... -l.m!abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SEGMENT_END, token.getType()); assertEquals(2, token.getIndex()); assertEquals(20, tokenizer.getCharCount()); assertEquals(20, tokenizer.getSegmentCharCount()); // ... -l.m!abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SEGMENT_START, token.getType()); assertEquals(0, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("abc", token.getValue()); assertEquals(24, tokenizer.getCharCount()); assertEquals(4, tokenizer.getSegmentCharCount()); // ... -l.m!abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals(1, token.getIndex()); assertEquals(0, token.getSubIndex()); assertTrue(token.isFirst()); assertFalse(token.isLast()); assertEquals(25, tokenizer.getCharCount()); assertEquals(5, tokenizer.getSegmentCharCount()); // ... abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals(1, token.getIndex()); assertEquals(1, token.getSubIndex()); assertFalse(token.isFirst()); assertFalse(token.isLast()); assertEquals(26, tokenizer.getCharCount()); assertEquals(6, tokenizer.getSegmentCharCount()); // ... abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals(1, token.getIndex()); assertEquals(2, token.getSubIndex()); assertEquals("n", token.getValue()); assertFalse(token.isFirst()); assertFalse(token.isLast()); assertEquals(2, token.getSubIndex()); assertEquals(28, tokenizer.getCharCount()); assertEquals(8, tokenizer.getSegmentCharCount()); // ... abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals(1, token.getIndex()); assertEquals(3, token.getSubIndex()); assertEquals("o", token.getValue()); assertFalse(token.isFirst()); assertTrue(token.isLast()); assertEquals(3, token.getSubIndex()); assertEquals(30, tokenizer.getCharCount()); assertEquals(10, tokenizer.getSegmentCharCount()); // ... abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals(2, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("p", token.getValue()); assertEquals(32, tokenizer.getCharCount()); assertEquals(12, tokenizer.getSegmentCharCount()); // ... abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals(3, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("q", token.getValue()); assertTrue(token.isFirst()); assertFalse(token.isLast()); assertEquals(0, token.getSubIndex()); assertEquals(34, tokenizer.getCharCount()); assertEquals(14, tokenizer.getSegmentCharCount()); // ... abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals(3, token.getIndex()); assertEquals(1, token.getSubIndex()); assertFalse(token.isFirst()); assertFalse(token.isLast()); assertEquals(35, tokenizer.getCharCount()); assertEquals(15, tokenizer.getSegmentCharCount()); // ... abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals(3, token.getIndex()); assertEquals(2, token.getSubIndex()); assertFalse(token.isFirst()); assertFalse(token.isLast()); assertEquals(36, tokenizer.getCharCount()); assertEquals(16, tokenizer.getSegmentCharCount()); // ... abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals(3, token.getIndex()); assertEquals(3, token.getSubIndex()); assertFalse(token.isFirst()); assertTrue(token.isLast()); assertEquals(37, tokenizer.getCharCount()); assertEquals(17, tokenizer.getSegmentCharCount()); // ... abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals(4, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("r", token.getValue()); assertTrue(token.isFirst()); assertFalse(token.isLast()); assertEquals(0, token.getSubIndex()); assertEquals(39, tokenizer.getCharCount()); assertEquals(19, tokenizer.getSegmentCharCount()); // ... abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals(4, token.getIndex()); assertEquals(1, token.getSubIndex()); assertFalse(token.isFirst()); assertFalse(token.isLast()); assertEquals(40, tokenizer.getCharCount()); assertEquals(20, tokenizer.getSegmentCharCount()); // ... abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals(4, token.getIndex()); assertEquals(2, token.getSubIndex()); assertFalse(token.isFirst()); assertFalse(token.isLast()); assertEquals(41, tokenizer.getCharCount()); assertEquals(21, tokenizer.getSegmentCharCount()); // ... abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals(4, token.getIndex()); assertEquals(3, token.getSubIndex()); assertFalse(token.isFirst()); assertTrue(token.isLast()); assertEquals(41, tokenizer.getCharCount()); assertEquals(21, tokenizer.getSegmentCharCount()); // ... abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SEGMENT_END, token.getType()); assertEquals(42, tokenizer.getCharCount()); assertEquals(22, tokenizer.getSegmentCharCount()); // ... abc-..n.o-p-q...-r...! // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.END_OF_DATA, token.getType()); assertEquals(43, tokenizer.getCharCount()); } @Test public void testNextSimpleValue() throws Exception { tokenizer = new EDITokenizer(new StringReader("SEG|S1||S2||S2a||S3a^S3b|S4$")); assertNotNull(tokenizer); tokenizer.setTerminator('$'); tokenizer.setDelimiter('|'); tokenizer.setSubDelimiter('^'); Token token; String simpleValue; // SEG|S1||S2||S2a||S3a^S3b|S4$ // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SEGMENT_START, token.getType()); assertEquals(0, token.getIndex()); assertEquals("SEG", token.getValue()); // SEG|S1||S2||S2a||S3a^S3b|S4$ // ^ assertNotNull(simpleValue = tokenizer.nextSimpleValue(true)); assertEquals("S1", simpleValue); // SEG|S1||S2||S2a||S3a^S3b|S4$ // ^ try { tokenizer.nextSimpleValue(true); fail("Excepcted a syntax exception to be thrown"); } catch (EDISyntaxException e) { // ignore } // SEG|S1||S2||S2a||S3a^S3b|S4$ // ^ assertNotNull(simpleValue = tokenizer.nextSimpleValue(false)); assertEquals("S2", simpleValue); // SEG|S1||S2||S2a||S3a^S3b|S4$ // ^ assertNotNull(simpleValue = tokenizer.nextSimpleValue(false)); assertEquals("", simpleValue); // SEG|S1||S2||S2a||S3a^S3b|S4$ // ^ assertNotNull(simpleValue = tokenizer.nextSimpleValue()); assertEquals("S2a", simpleValue); // SEG|S1||S2||S2a||S3a^S3b|S4$ // ^ try { tokenizer.nextSimpleValue(); fail("Excepcted a syntax exception to be thrown"); } catch (EDISyntaxException e) { // ignore } // SEG|S1||S2||S2a||S3a^S3b|S4$ // ^ try { tokenizer.nextSimpleValue(true); fail("Excepcted a syntax exception to be thrown"); } catch (EDISyntaxException e) { // ignore } tokenizer.nextToken(); // SEG|S1||S2||S2a||S3a^S3b|S4$ // ^ assertNotNull(simpleValue = tokenizer.nextSimpleValue()); assertEquals("S4", simpleValue); // SEG|S1||S2||S2a||S3a^S3b|S4$ // ^ try { tokenizer.nextSimpleValue(true); fail("Excepcted a syntax exception to be thrown"); } catch (EDISyntaxException e) { // ignore } // SEG|S1||S2||S2a||S3a^S3b|S4$ // ^ try { tokenizer.nextSimpleValue(true); fail("Excepcted a syntax exception to be thrown"); } catch (EDISyntaxException e) { // ignore } } @Test public void testNextCompositeElements() throws Exception { tokenizer = new EDITokenizer(new StringReader( "UNB+UNOB:1+003897733:01:MFGB-PO+PARTNER ID:ZZ+970101:1050+00000000000916++ORDERS\'")); assertNotNull(tokenizer); tokenizer.setTerminator('\''); tokenizer.setDelimiter('+'); tokenizer.setSubDelimiter(':'); Token token; List<String> composite; // UNB+UNOB:1+003897733:01:MFGB-PO+PARTNER // ID:ZZ+970101:1050+00000000000916++ORDERS' // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SEGMENT_START, token.getType()); assertEquals(0, token.getIndex()); assertEquals("UNB", token.getValue()); // UNB+UNOB:1+003897733:01:MFGB-PO+PARTNER // ID:ZZ+970101:1050+00000000000916++ORDERS' // ---- - assertNotNull(composite = tokenizer.nextCompositeElement()); assertEquals(2, composite.size()); assertEquals("UNOB", composite.get(0)); assertEquals("1", composite.get(1)); // UNB+UNOB:1+003897733:01:MFGB-PO+PARTNER // ID:ZZ+970101:1050+00000000000916++ORDERS' // --------- -- ------- assertNotNull(composite = tokenizer.nextCompositeElement()); assertEquals(3, composite.size()); assertEquals("003897733", composite.get(0)); assertEquals("01", composite.get(1)); assertEquals("MFGB-PO", composite.get(2)); // UNB+UNOB:1+003897733:01:MFGB-PO+PARTNER // ID:ZZ+970101:1050+00000000000916++ORDERS' // ---------- -- assertNotNull(composite = tokenizer.nextCompositeElement()); assertEquals(2, composite.size()); assertEquals("PARTNER ID", composite.get(0)); assertEquals("ZZ", composite.get(1)); // UNB+UNOB:1+003897733:01:MFGB-PO+PARTNER // ID:ZZ+970101:1050+00000000000916++ORDERS' // ------ ---- assertNotNull(composite = tokenizer.nextCompositeElement()); assertEquals(2, composite.size()); assertEquals("970101", composite.get(0)); assertEquals("1050", composite.get(1)); // UNB+UNOB:1+003897733:01:MFGB-PO+PARTNER // ID:ZZ+970101:1050+00000000000916++ORDERS' // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals(5, token.getIndex()); assertEquals("00000000000916", token.getValue()); // UNB+UNOB:1+003897733:01:MFGB-PO+PARTNER // ID:ZZ+970101:1050+00000000000916++ORDERS' // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.EMPTY, token.getType()); assertEquals(6, token.getIndex()); // UNB+UNOB:1+003897733:01:MFGB-PO+PARTNER // ID:ZZ+970101:1050+00000000000916++ORDERS' // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals(7, token.getIndex()); assertEquals("ORDERS", token.getValue()); // UNB+UNOB:1+003897733:01:MFGB-PO+PARTNER // ID:ZZ+970101:1050+00000000000916++ORDERS' // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SEGMENT_END, token.getType()); // UNB+UNOB:1+003897733:01:MFGB-PO+PARTNER // ID:ZZ+970101:1050+00000000000916++ORDERS' // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.END_OF_DATA, token.getType()); // Now try a different style tokenizer = new EDITokenizer(new StringReader("SEG|C1^^|C2^^|C3^^|C4||C5^\n")); assertNotNull(tokenizer); tokenizer.setTerminator('\n'); tokenizer.setDelimiter('|'); tokenizer.setSubDelimiter('^'); tokenizer.setRepetitionSeparator('~'); // SEG|C1^^|C2^^|C3^^|C4||C5^\n // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SEGMENT_START, token.getType()); assertEquals(0, token.getIndex()); assertEquals("SEG", token.getValue()); assertEquals("SEG00", token.getElementId()); assertEquals("SEG", token.getSegmentType()); // SEG|C1^^|C2^^|C3^^|C4||C5^\n // ^.. composite = tokenizer.nextCompositeElement(); assertNotNull(composite); assertEquals(3, composite.size()); assertEquals("C1", composite.get(0)); assertEquals(0, composite.get(1).length()); assertEquals(0, composite.get(2).length()); // SEG|C1^^|C2^^|C3^^|C4||C5^\n // ^.. composite = tokenizer.nextCompositeElement(); assertNotNull(composite); assertEquals(3, composite.size()); assertEquals("C2", composite.get(0)); assertEquals(0, composite.get(1).length()); assertEquals(0, composite.get(2).length()); // SEG|C1^^|C2^^|C3^^|C4||C5^\n // ^.. composite = tokenizer.nextCompositeElement(); assertNotNull(composite); assertEquals(3, composite.size()); assertEquals("C3", composite.get(0)); assertEquals(0, composite.get(1).length()); assertEquals(0, composite.get(2).length()); // SEG|C1^^|C2^^|C3^^|C4||C5^\n // ^ composite = tokenizer.nextCompositeElement(); assertNotNull(composite); assertEquals(1, composite.size()); assertEquals("C4", composite.get(0)); // SEG|C1^^|C2^^|C3^^|C4||C5^\n // ^ composite = tokenizer.nextCompositeElement(); assertNotNull(composite); assertEquals(0, composite.size()); // SEG|C1^^|C2^^|C3^^|C4||C5^\n // ^ composite = tokenizer.nextCompositeElement(); assertNotNull(composite); assertEquals(2, composite.size()); assertEquals("C5", composite.get(0)); assertEquals(0, composite.get(1).length()); // SEG|C1^^|C2^^|C3^^|C4||C5^\n // ^. assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.SEGMENT_END, token.getType()); // SEG|C1^^|C2^^|C3^^|C4||C5^\n // ^ assertNotNull(token = tokenizer.nextToken()); assertEquals(Token.TokenType.END_OF_DATA, token.getType()); } /** * Test the use of a release character. The term "release character" here * refers specifically to a single character that hides nay special meaning * of the character immediately follow. This is the sytle used in EDIFACT. * * @throws Exception DOCUMENT ME! */ @Test public void testReleaseCharacter() throws Exception { tokenizer = new EDITokenizer(new StringReader("abc-def=-ghi!j-=-kl-=!!q-123!")); assertNotNull(tokenizer); tokenizer.setTerminator('!'); tokenizer.setRelease('='); tokenizer.setDelimiter('-'); Token token; // abc-def=-ghi!j-=-kl-=!!q-123! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_START, token.getType()); assertEquals(token.getElementId(), "abc00"); assertEquals(token.getIndex(), 0); assertEquals(token.getValue(), "abc"); assertEquals(token.getSegmentType(), "abc"); // abc-def=-ghi!j-=-kl-=!!q-123! // ^...... token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals("abc01", token.getElementId()); assertEquals(1, token.getIndex()); assertEquals("def-ghi", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def=-ghi!j-=-kl-=!!q-123! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_END, token.getType()); assertEquals(token.getSegmentType(), "abc"); // abc-def=-ghi!j-=-kl-=!!q-123! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_START, token.getType()); assertEquals(token.getIndex(), 0); assertEquals("j00", token.getElementId()); assertEquals("j", token.getValue()); assertEquals("j", token.getSegmentType()); // abc-def=-ghi!j-=-kl-=!!q-123! // ^.... token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals("j01", token.getElementId()); assertEquals(1, token.getIndex()); assertEquals("-kl", token.getValue()); assertEquals("j", token.getSegmentType()); // abc-def=-ghi!j-=-kl-=!!q-123! // ^. token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals("j02", token.getElementId()); assertEquals(2, token.getIndex()); assertEquals("!", token.getValue()); assertEquals("j", token.getSegmentType()); // abc-def=-ghi!j-=-kl-=!!q-123! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_END, token.getType()); assertEquals(token.getSegmentType(), "j"); // abc-def=-ghi!j-=-kl-=!!q-123! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_START, token.getType()); assertEquals("q00", token.getElementId()); assertEquals(token.getIndex(), 0); assertEquals(token.getValue(), "q"); assertEquals(token.getSegmentType(), "q"); // abc-def=-ghi!j-=-kl-=!!q-123! // ^ int i = tokenizer.nextIntValue(); assertEquals(i, 123); // abc-def=-ghi!j-=-kl-=!!q-123! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_END, token.getType()); assertEquals(token.getSegmentType(), "q"); // abc-def-ghi!j--kl-mnop!q-123-123x! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.END_OF_DATA, token.getType()); } /** * Similar to release characters, escape sequences allow an otherwise * special character to appear as normal data. Unlike release characters, * escape sequences begin and end with a special character, known as an * escape character. * * @throws Exception Description of the Exception */ @Test public void testEscapeSequences() throws Exception { tokenizer = new EDITokenizer(new StringReader("abc-def=F=ghi!")); assertNotNull(tokenizer); tokenizer.setTerminator('!'); tokenizer.setDelimiter('-'); Token token; // abc-def=F=ghi! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_START, token.getType()); assertEquals(token.getElementId(), "abc00"); assertEquals(token.getIndex(), 0); assertEquals(token.getValue(), "abc"); assertEquals(token.getSegmentType(), "abc"); // abc-def=F=ghi! // ^....... token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals("abc01", token.getElementId()); assertEquals(1, token.getIndex()); assertEquals("def=F=ghi", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def=F=ghi! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_END, token.getType()); assertEquals("abc", token.getSegmentType()); // abc-def=F=ghi! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.END_OF_DATA, token.getType()); } @Test public void testRepeatSeparator() throws Exception { tokenizer = new EDITokenizer(new StringReader("abc-def*ghi-j*j2*j3-k*l*m1:m2*:n2*:o2-p:*q**r1:r2-s!")); assertNotNull(tokenizer); tokenizer.setTerminator('!'); tokenizer.setRelease('='); tokenizer.setRepetitionSeparator('*'); tokenizer.setDelimiter('-'); tokenizer.setSubDelimiter(':'); Token token; // abc-def*ghi-j*j2*j3-k*l*m1:m2*:n2*:o2! // ^.. token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_START, token.getType()); assertEquals("abc00", token.getElementId()); assertEquals(0, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("abc", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j*j2*j3-k*l*m1:m2*:n2*:o2! // ^.. token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals("abc01", token.getElementId()); assertEquals(1, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("def", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j*j2*j3-k*l*m1:m2*:n2*:o2! // ^.. token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals(1, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("abc01", token.getElementId()); assertEquals("ghi", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j*j2*j3-k*l*m1:m2*:n2*:o2! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals(2, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("abc02", token.getElementId()); assertEquals("j", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def~ghi-j*j2*j3-... // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals(2, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("abc02", token.getElementId()); assertEquals("j2", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def~ghi-j*j2*j3-... // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals(2, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("abc02", token.getElementId()); assertEquals("j3", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j*j2*j3-k*l*m1:m2*:n2*:o2! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals("abc03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("k", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j*j2*j3-k*l*m1:m2*:n2*:o2! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals("abc03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("l", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j-k*l*m1:m2*n1:n2! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals("abc03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("m1", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j-k*l*m1:m2*... // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals("abc03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals(1, token.getSubIndex()); assertEquals("m2", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j-k*l*m1:m2*:n2*:o2! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals("abc03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j-k*l*m1:m2*:n2*:o2! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals("abc03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals(1, token.getSubIndex()); assertEquals("n2", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j-k*l*m1:m2*:n2*:o2 // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals("abc03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j-k*l*m1:m2*:n2*:o2 // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals("abc03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals(1, token.getSubIndex()); assertEquals("o2", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j-k*l*m1:m2*:n2*:o2-p:*q**r1:r2-s!! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals("abc04", token.getElementId()); assertEquals(4, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("p", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j-k*l*m1:m2*:n2*:o2-p:*q**r1:r2-s!! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals("abc04", token.getElementId()); assertEquals(4, token.getIndex()); assertEquals(1, token.getSubIndex()); assertEquals("", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j-k*l*m1:m2*:n2*:o2-p:*q**r1:r2-s!! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals("abc04", token.getElementId()); assertEquals(4, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("q", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j-k*l*m1:m2*:n2*:o2-p:*q**r1:r2-s!! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.EMPTY, token.getType()); assertEquals("abc04", token.getElementId()); assertEquals(4, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j-k*l*m1:m2*:n2*:o2-p:*q**r1:r2-s!! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals("abc04", token.getElementId()); assertEquals(4, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("r1", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j-k*l*m1:m2*:n2*:o2-p:*q**r1:r2-s!! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals("abc04", token.getElementId()); assertEquals(4, token.getIndex()); assertEquals(1, token.getSubIndex()); assertEquals("r2", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j-k*l*m1:m2*:n2*:o2-p:*q**r1:r2-s!! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals("abc05", token.getElementId()); assertEquals(5, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("s", token.getValue()); assertEquals("abc", token.getSegmentType()); // abc-def*ghi-j-k*l*m1:m2*:n2*:o2-p:*q**r1:r2-s!! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_END, token.getType()); assertEquals(token.getSegmentType(), "abc"); // abc-def*ghi-j-k*l*m1:m2*:n2*:o2! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.END_OF_DATA, token.getType()); } @Test public void testRepetitionSpecialCases() throws Exception { tokenizer = new EDITokenizer(new StringReader("PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI|\n")); assertNotNull(tokenizer); tokenizer.setTerminator('\n'); tokenizer.setRelease('='); tokenizer.setRepetitionSeparator('~'); tokenizer.setDelimiter('|'); tokenizer.setSubDelimiter('^'); Token token; //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_START, token.getType()); assertEquals("PID00", token.getElementId()); assertEquals(0, token.getIndex()); assertEquals("PID", token.getValue()); assertEquals("PID", token.getSegmentType()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals("PID01", token.getElementId()); assertEquals(1, token.getIndex()); assertEquals("1", token.getValue()); assertEquals("PID", token.getSegmentType()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals(2, token.getIndex()); assertEquals("PID02", token.getElementId()); assertEquals("HNE9133073356", token.getValue()); assertEquals("PID", token.getSegmentType()); assertTrue(token.isFirst()); assertFalse(token.isLast()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals(2, token.getIndex()); assertEquals("PID02", token.getElementId()); assertEquals("", token.getValue()); assertEquals("PID", token.getSegmentType()); assertFalse(token.isFirst()); assertFalse(token.isLast()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals(2, token.getIndex()); assertEquals("PID02", token.getElementId()); assertEquals("", token.getValue()); assertEquals("PID", token.getSegmentType()); assertFalse(token.isFirst()); assertFalse(token.isLast()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals(2, token.getIndex()); assertEquals("PID02", token.getElementId()); assertEquals("NE", token.getValue()); assertEquals("PID", token.getSegmentType()); assertFalse(token.isFirst()); assertFalse(token.isLast()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals("PID02", token.getElementId()); assertEquals(2, token.getIndex()); assertEquals("PE", token.getValue()); assertEquals("PID", token.getSegmentType()); assertFalse(token.isFirst()); assertTrue(token.isLast()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.EMPTY, token.getType()); assertEquals("PID03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("", token.getValue()); assertEquals("PID", token.getSegmentType()); assertTrue(token.isFirst()); assertFalse(token.isLast()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals("PID03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals(0, token.getSubIndex()); assertEquals("000000007", token.getValue()); assertEquals("PID", token.getSegmentType()); assertTrue(token.isFirst()); assertFalse(token.isLast()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals("PID03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals(1, token.getSubIndex()); assertEquals("", token.getValue()); assertEquals("PID", token.getSegmentType()); assertFalse(token.isFirst()); assertFalse(token.isLast()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals("PID03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals(2, token.getSubIndex()); assertEquals("", token.getValue()); assertEquals("PID", token.getSegmentType()); assertFalse(token.isFirst()); assertFalse(token.isLast()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals("PID03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals("ST01K", token.getValue()); assertEquals("PID", token.getSegmentType()); assertFalse(token.isFirst()); assertFalse(token.isLast()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals("PID03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals("MR", token.getValue()); assertEquals("PID", token.getSegmentType()); assertFalse(token.isFirst()); assertTrue(token.isLast()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals("PID03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals("00456789", token.getValue()); assertEquals("PID", token.getSegmentType()); assertTrue(token.isFirst()); assertFalse(token.isLast()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals("PID03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals("", token.getValue()); assertEquals("PID", token.getSegmentType()); assertFalse(token.isFirst()); assertFalse(token.isLast()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_EMPTY, token.getType()); assertEquals("PID03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals("", token.getValue()); assertEquals("PID", token.getSegmentType()); assertFalse(token.isFirst()); assertFalse(token.isLast()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals("PID03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals("ST01", token.getValue()); assertEquals("PID", token.getSegmentType()); assertFalse(token.isFirst()); assertFalse(token.isLast()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SUB_ELEMENT, token.getType()); assertEquals("PID03", token.getElementId()); assertEquals(3, token.getIndex()); assertEquals("PI", token.getValue()); assertEquals("PID", token.getSegmentType()); assertFalse(token.isFirst()); assertTrue(token.isLast()); //PID|1|HNE9133073356^^^NE^PE|~000000007^^^ST01K^MR~00456789^^^ST01^PI| // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_END, token.getType()); } @Test public void testRecorder() throws EDISyntaxException, IOException { tokenizer = new EDITokenizer(new StringReader("abc-def-ghi!j--kl-mnop!q-123-123x!")); assertNotNull(tokenizer); tokenizer.setTerminator('!'); tokenizer.setDelimiter('-'); assertEquals(0, tokenizer.getCharCount()); assertEquals(0, tokenizer.getSegmentCharCount()); Token token; // At this point, there should be nothing recorded. assertEquals(0, tokenizer.getRecording().length()); tokenizer.setRecorder(true); // Now let the tokenizer see some data. // // abc-def-ghi!j--kl-mnop!q-123-123x! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SEGMENT_START, token.getType()); assertEquals(token.getElementId(), "abc00"); assertEquals(token.getIndex(), 0); assertEquals(token.getValue(), "abc"); assertEquals(token.getSegmentType(), "abc"); assertEquals(4, tokenizer.getCharCount()); assertEquals(4, tokenizer.getSegmentCharCount()); // abc-def-ghi!j--kl-mnop!q-123-123x! // ^ token = tokenizer.nextToken(); assertNotNull(token); assertEquals(Token.TokenType.SIMPLE, token.getType()); assertEquals("abc01", token.getElementId()); assertEquals(1, token.getIndex()); assertEquals("def", token.getValue()); assertEquals("abc", token.getSegmentType()); assertEquals(8, tokenizer.getCharCount()); assertEquals(8, tokenizer.getSegmentCharCount()); assertEquals(8, tokenizer.getRecording().length()); // assertEquals("abc-def", tokenizer.getRecording()); } @Test public void testElementTooLong() throws Exception { tokenizer = new EDITokenizer(new StringReader( "abcdefghiiiiiiiiiiiiiiiiiiiii!jklmnop-q!")); assertNotNull(tokenizer); tokenizer.setTerminator('!'); tokenizer.setDelimiter('-'); try { tokenizer.nextToken(); } catch (EDISyntaxException e) { assertEquals(1, e.getErrorSegmentNumber()); assertEquals(1, e.getErrorElementNumber()); } } @Test public void testToString() throws Exception { tokenizer = new EDITokenizer(new StringReader( "abc")); tokenizer.nextToken(); assertEquals("tokenizer state: segmentCount=1 charCount=4 segTokenCount=1 segCharCount=4 currentToken=Token type=SEGMENT_START value=abc index=0 segment=abc buffer.limit=0 buffer.position=0", tokenizer.toString()); } @Test public void testNextSegment() throws Exception { tokenizer = new EDITokenizer(new StringReader( "a-b-c!d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-1-2-3-4-5-6-7-8-9-0!")); assertNotNull(tokenizer); tokenizer.setTerminator('!'); tokenizer.setDelimiter('-'); tokenizer.nextToken(); String segType = tokenizer.nextSegment(); assertEquals("d", segType); // Try a potential "runaway" condition where the // end of segment is not found after some number // of elements. try { tokenizer.nextSegment(); fail("failed to detect too many elements"); } catch (EDISyntaxException e) { assertEquals(2, e.getErrorSegmentNumber()); assertEquals(32, e.getErrorElementNumber()); } } @Test public void testGetBufferred() throws Exception { tokenizer = new EDITokenizer(new StringReader("abcdefghijklmnopqrstuvwxyz")); char[] returnValue; returnValue = tokenizer.getBuffered(); // Nothing has been read, so nothing is buffered assertEquals(0, returnValue.length); // Look ahead at the next 10 chars char[] lookahead = tokenizer.lookahead(10); assertEquals(10, lookahead.length); assertEquals('a', lookahead[0]); assertEquals('j', lookahead[9]); // Now the entire 26 letter sequence has been buffered returnValue = tokenizer.getBuffered(); assertEquals(26, returnValue.length); assertEquals('a', returnValue[0]); // Consume a few chars of the input char[] consumed = tokenizer.getChars(5); assertEquals(5, consumed.length); assertEquals('a', consumed[0]); assertEquals('e', consumed[consumed.length - 1]); // Those first few chars are no longer buffered returnValue = tokenizer.getBuffered(); assertEquals(21, returnValue.length); assertEquals('f', returnValue[0]); // Consume a few more ... consumed = tokenizer.getChars(7); assertEquals(7, consumed.length); assertEquals('f', consumed[0]); assertEquals('l', consumed[consumed.length - 1]); returnValue = tokenizer.getBuffered(); assertEquals(14, returnValue.length); assertEquals('m', returnValue[0]); // Consume all the rest consumed = tokenizer.getChars(14); assertEquals(14, consumed.length); assertEquals('m', consumed[0]); assertEquals('z', consumed[consumed.length - 1]); returnValue = tokenizer.getBuffered(); assertEquals(0, returnValue.length); // We've read all the data, but have not actually hit the eof assertFalse(tokenizer.isEndOfData()); // Unget a char, then get it again tokenizer.ungetChar(); returnValue = tokenizer.getBuffered(); assertEquals(1, returnValue.length); assertEquals('z', returnValue[0]); char[] chars = tokenizer.getChars(1); assertEquals(1, chars.length); assertEquals('z', chars[0]); returnValue = tokenizer.getBuffered(); assertEquals(0, returnValue.length); assertFalse(tokenizer.isEndOfData()); // Try to get another tokenizer.getChar(); // Now we have hit the end assertTrue(tokenizer.isEndOfData()); returnValue = tokenizer.getBuffered(); assertEquals(0, returnValue.length); // Once end of data has become true, it remains true, and // ungetChar no longer influences what getBuffered() returns. and // and getChar(n) throws an exception tokenizer.ungetChar(); assertTrue(tokenizer.isEndOfData()); returnValue = tokenizer.getBuffered(); assertEquals(0, returnValue.length); try { tokenizer.getChars(1); fail(""); } catch (EDISyntaxException ignore) { } } @Test public void testLookahead() throws IOException, EDISyntaxException { final String str = "abcdefghijklmnopqrstuvwxyz"; EDITokenizer tokenizer = new EDITokenizer(new StringReader(str)); char[] returnValue; returnValue = tokenizer.getBuffered(); // Nothing has been read, so nothing is buffered assertEquals(0, returnValue.length); char[] lookahead; lookahead = tokenizer.lookahead(1); assertEquals(1, lookahead.length); assertEquals('a', lookahead[0]); lookahead = tokenizer.lookahead(2); assertEquals(2, lookahead.length); assertEquals('a', lookahead[0]); assertEquals('b', lookahead[1]); lookahead = tokenizer.lookahead(4); assertEquals(4, lookahead.length); assertEquals('a', lookahead[0]); assertEquals('b', lookahead[1]); assertEquals('c', lookahead[2]); assertEquals('d', lookahead[3]); lookahead = tokenizer.lookahead(26); assertEquals(26, lookahead.length); assertEquals('a', lookahead[0]); assertEquals('b', lookahead[1]); assertEquals('c', lookahead[2]); assertEquals('d', lookahead[3]); assertEquals('z', lookahead[25]); // Now consume a char of the input char[] consumed = tokenizer.getChars(1); assertEquals(1, consumed.length); assertEquals('a', consumed[0]); // Notice that if you use lookahead to view beyond // the end of data, you see '?' chars. lookahead = tokenizer.lookahead(27); assertEquals(27, lookahead.length); assertEquals('b', lookahead[0]); assertEquals('c', lookahead[1]); assertEquals('d', lookahead[2]); assertEquals('z', lookahead[24]); assertEquals('?', lookahead[25]); assertEquals('?', lookahead[26]); // Look ahead at the next 100 chars, even though fewer than 100 actually exist lookahead = tokenizer.lookahead(100); assertEquals(100, lookahead.length);//We should get an array of that size anyway, padded with '?'s assertEquals(str.substring(1), new String(lookahead, 0, str.length() - 1)); assertEquals('b', lookahead[0]); assertEquals('c', lookahead[1]); assertEquals('?', lookahead[str.length() - 1]); assertEquals('?', lookahead[str.length()]); assertEquals('?', lookahead[99]); returnValue = tokenizer.getBuffered(); // Now the entire string has been buffered assertEquals(str.length() - 1, returnValue.length); assertEquals('b', returnValue[0]); assertEquals('z', returnValue[str.length() - 2]); // lookahead should produce exactly same result as above lookahead = tokenizer.lookahead(100); assertEquals(100, lookahead.length); assertEquals(str.substring(1), new String(lookahead, 0, str.length() - 1)); assertEquals('b', lookahead[0]); assertEquals('c', lookahead[1]); assertEquals('?', lookahead[str.length() - 1]); assertEquals('?', lookahead[str.length()]); assertEquals('?', lookahead[99]); } @Test public void testPiped() throws Exception { PipedWriter writer = new PipedWriter(); PipedReader reader = new PipedReader(); reader.connect(writer); String testData = "Hello, World"; Emitter emitter = new Emitter(writer, testData); Thread emitterThread = new Thread(emitter); emitterThread.start(); char[] buf = new char[testData.length()]; int n = reader.read(buf); assertEquals(testData.length(), n); } class Emitter implements Runnable { final Writer writer; final String testData; public Emitter(Writer writer, String testData) { this.writer = writer; this.testData = testData; } public void run() { try { writer.write(testData); writer.flush(); writer.close(); } catch (IOException e) { System.err.println("Emitter.run() threw: " + e); } } } }