package com.berryworks.edireader;
import com.berryworks.edireader.tokenizer.Token;
import com.berryworks.edireader.tokenizer.TokenImpl;
import com.berryworks.edireader.util.sax.ContextAwareSaxAdapter;
import org.junit.Assert;
import org.junit.Test;
import org.xml.sax.SAXException;
import java.io.IOException;
public class StandardReaderTest {
private StandardReader reader;
@Test
public void segmentElement_simple() throws SAXException {
reader = new DefaultStandardReader();
final MyContentHandler handler = new MyContentHandler();
reader.setContentHandler(handler);
// ...|abc||123^^^||
reader.parseSegmentElement(new MyToken(Token.TokenType.SIMPLE, "abc"));
reader.parseSegmentElement(new MyToken(Token.TokenType.EMPTY, null));
reader.parseSegmentElement(new MyToken(Token.TokenType.SUB_ELEMENT, "123", true, false));
reader.parseSegmentElement(new MyToken(Token.TokenType.SUB_EMPTY, null, false, false));
reader.parseSegmentElement(new MyToken(Token.TokenType.SUB_EMPTY, null, false, false));
reader.parseSegmentElement(new MyToken(Token.TokenType.SUB_EMPTY, null, false, true));
reader.parseSegmentElement(new MyToken(Token.TokenType.EMPTY, null));
Assert.assertEquals("start(element, abc) end(element) start(element, null) start(subelement, 123) end(subelement) end(element)", handler.getLog());
}
private class DefaultStandardReader extends StandardReader {
@Override
protected Token recognizeBeginning() throws IOException, SAXException {
return null;
}
@Override
protected Token parseInterchange(Token t) throws SAXException, IOException {
return null;
}
}
private class MyToken extends TokenImpl {
private boolean isFirst;
private boolean isLast;
public MyToken(TokenType type, String value) {
this(type, value, false, false);
}
public MyToken(TokenType type, String value, boolean isFirst, boolean isLast) {
super(null);
setType(type);
if (value != null)
for (char c : value.toCharArray()) {
append(c);
}
this.isFirst = isFirst;
this.isLast = isLast;
}
@Override
public boolean isFirst() {
return isFirst;
}
@Override
public boolean isLast() {
return isLast;
}
}
private class MyContentHandler extends ContextAwareSaxAdapter {
private String name;
private String data;
private String log = "";
@Override
public void start(String uri, String name, String data, EDIAttributes attributes) throws SAXException {
this.name = name;
this.data = data;
log += "start(" + name + ", " + data + ") ";
}
@Override
public void end(String uri, String name) throws SAXException {
this.name = name;
log += "end(" + name + ") ";
}
public String getLog() {
return log.trim();
}
}
}