package org.phenoscape.io;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import junit.framework.Assert;
import org.apache.xmlbeans.XmlException;
import org.junit.Test;
import org.obo.datamodel.impl.OBOSessionImpl;
import org.phenoscape.model.Character;
import org.phenoscape.model.DataSet;
import org.phenoscape.model.MultipleState;
import org.phenoscape.model.MultipleState.MODE;
import org.phenoscape.model.State;
import org.phenoscape.model.Taxon;
public class TestWritePolymorphismsInBrandNewFile {
@Test
public void testWritingPolymorphisms() throws IOException, XmlException {
final DataSet data = new DataSet();
final Character character = new Character();
final State state0 = new State();
state0.setSymbol("0");
state0.setLabel("zero");
final State state1 = new State();
state1.setSymbol("1");
state1.setLabel("one");
character.addState(state0);
character.addState(state1);
data.addCharacter(character);
final Taxon taxon = new Taxon();
taxon.setPublicationName("taxon");
data.addTaxon(taxon);
final Set<State> states = new HashSet<State>();
states.addAll(character.getStates());
final MultipleState multiState = new MultipleState(states, MODE.POLYMORPHIC);
data.setStateForTaxon(taxon, character, multiState);
final NeXMLWriter writer = new NeXMLWriter(UUID.randomUUID().toString());
writer.setDataSet(data);
final StringWriter output = new StringWriter();
writer.write(output);
output.close();
final String text = output.getBuffer().toString();
System.out.println(text);
final StringReader input = new StringReader(text);
final NeXMLReader reader = new NeXMLReader(input, new OBOSessionImpl());
final DataSet newData = reader.getDataSet();
final Character newCharacter = newData.getCharacters().get(0);
final Taxon newTaxon = newData.getTaxa().get(0);
final State newState = reader.getDataSet().getStateForTaxon(newTaxon, newCharacter);
Assert.assertNotNull(newState);
Assert.assertEquals(MultipleState.class, newState.getClass());
}
}