// Path: src/main/java/fr/eurecom/stanfordnlprestapi/enums/NlpProcess.java
// public enum NlpProcess {
//   NER,
//   POS,
//   TOKENIZE,
//   COREF,
//   DATE,
//   NUMBER,
//   GAZETTEER
// }
// 
// Path: src/main/java/fr/eurecom/stanfordnlprestapi/interfaces/Sentence.java
// public interface Sentence {
//   void addToken(final Token newToken);
// 
//   void addEntity(final Entity newEntity);
//   
//   void addCoref(final Coref newCoref);
// 
//   void nextSentence(final Sentence newNextSentence);
// 
//   List<Entity> entities();
// 
//   int index();
// 
//   int start();
// 
//   int end();
// 
//   Model rdfModel(final String tool, final NlpProcess process, final String host);
// }
// 
// Path: src/main/java/fr/eurecom/stanfordnlprestapi/interfaces/Token.java
// public interface Token {
//   void nextToken(final Token newNextToken);
// 
//   int index();
// 
//   String text();
// 
//   int start();
// 
//   int end();
// 
//   Model rdfModel(final String tool, final NlpProcess process, final String host);
// }
// 
// Path: src/main/java/fr/eurecom/stanfordnlprestapi/nullobjects/NullSentence.java
// public final class NullSentence implements Sentence {
//   static final Logger LOGGER = LoggerFactory.getLogger(NullSentence.class);
//   private static final NullSentence INSTANCE = new NullSentence();
//   
//   public static NullSentence getInstance() {
//     return NullSentence.INSTANCE;
//   }
//   
//   private NullSentence() {
//   }
// 
//   @Override
//   public void addToken(final Token newToken) {
//     throw new UnsupportedOperationException("Not implemented");
//   }
// 
//   @Override
//   public void addEntity(final Entity newEntity) {
//     throw new UnsupportedOperationException("Not implemented");
//   }
//   
//   @Override
//   public void addCoref(final Coref newCoref) {
//     throw new UnsupportedOperationException("Not implemented");
//   }
// 
//   @Override
//   public void nextSentence(final Sentence newNextSentence) {
//     throw new UnsupportedOperationException("Not implemented");
//   }
// 
//   @Override
//   public List<Entity> entities() {
//     return null;
//   }
// 
//   @Override
//   public int index() {
//     return -1;
//   }
// 
//   @Override
//   public int start() {
//     return 0;
//   }
// 
//   @Override
//   public int end() {
//     return 0;
//   }
// 
//   @Override
//   public Model rdfModel(final String tool, final NlpProcess process, final String host) {
//     return ModelFactory.createDefaultModel();
//   }
// }
// 
// Path: src/main/java/fr/eurecom/stanfordnlprestapi/nullobjects/NullToken.java
// public final class NullToken implements Token {
//   static final Logger LOGGER = LoggerFactory.getLogger(NullToken.class);
//   private static final NullToken INSTANCE = new NullToken();
// 
//   public static NullToken getInstance() {
//     return NullToken.INSTANCE;
//   }
//   
//   private NullToken() {
//   }
// 
//   @Override
//   public void nextToken(final Token newNextToken) {
//     throw new UnsupportedOperationException("Not imlpemented");
//   }
// 
//   @Override
//   public int index() {
//     return -1;
//   }
// 
//   @Override
//   public String text() {
//     return null;
//   }
// 
//   @Override
//   public int start() {
//     return 0;
//   }
// 
//   @Override
//   public int end() {
//     return 0;
//   }
// 
//   @Override
//   public Model rdfModel(final String tool, final NlpProcess process, final String host) {
//     return ModelFactory.createDefaultModel();
//   }
// }


import org.apache.jena.vocabulary.RDF;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fr.eurecom.stanfordnlprestapi.enums.NlpProcess;
import fr.eurecom.stanfordnlprestapi.interfaces.Sentence;
import fr.eurecom.stanfordnlprestapi.interfaces.Token;
import fr.eurecom.stanfordnlprestapi.nullobjects.NullSentence;
import fr.eurecom.stanfordnlprestapi.nullobjects.NullToken;
import org.apache.jena.datatypes.xsd.XSDDatatype;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.ResourceFactory;
    final Sentence sentence = new SentenceImpl("I like Natalie Portman", context, 0, 22, 0,
        NullSentence.getInstance());
    final Token token1 = new TokenImpl("I", "PRP", 0, 1, NullToken.getInstance(), context,
        sentence, 1);
    final Token token2 = new TokenImpl("I", "PRP", 0, 1, NullToken.getInstance(), context,
        sentence, 1);

    Assert.assertNotSame("The two sentences are the same", token1, token2);
    Assert.assertEquals("Issue to compute the hascode of a sentence", (long) token1.hashCode(),
        (long) token2.hashCode());
  }

  /**
   * Test {@link TokenImpl#equals(Object)} method.
   */
  @Test
  public final void testEquals() {
    final Context context = new Context("I like Natalie Portman", 0, 22);
    final Context context2 = new Context("My favorite actress is: Natalie Portman. She is very "
        + "stunning.", 0, 62);
    final Sentence sentence = new SentenceImpl("I like Natalie Portman", context, 0, 22, 0,
        NullSentence.getInstance());
    final Sentence sentence2 = new SentenceImpl("My favorite actress is: Natalie Portman.", context,
        0, 40, 1, NullSentence.getInstance());
    final Token token1 = new TokenImpl("I", "PRP", 0, 1, NullToken.getInstance(), context,
        sentence, 1);
    final Token token2 = new TokenImpl("A", "PRP", 0, 1, NullToken.getInstance(), context,
        sentence, 1);
    final Token token3 = new TokenImpl("I", "PRP", 1, 1, NullToken.getInstance(), context,
        sentence, 1);
// Path: src/main/java/fr/eurecom/stanfordnlprestapi/enums/NlpProcess.java
// public enum NlpProcess {
//   NER,
//   POS,
//   TOKENIZE,
//   COREF,
//   DATE,
//   NUMBER,
//   GAZETTEER
// }
// 
// Path: src/main/java/fr/eurecom/stanfordnlprestapi/interfaces/Sentence.java
// public interface Sentence {
//   void addToken(final Token newToken);
// 
//   void addEntity(final Entity newEntity);
//   
//   void addCoref(final Coref newCoref);
// 
//   void nextSentence(final Sentence newNextSentence);
// 
//   List<Entity> entities();
// 
//   int index();
// 
//   int start();
// 
//   int end();
// 
//   Model rdfModel(final String tool, final NlpProcess process, final String host);
// }
// 
// Path: src/main/java/fr/eurecom/stanfordnlprestapi/interfaces/Token.java
// public interface Token {
//   void nextToken(final Token newNextToken);
// 
//   int index();
// 
//   String text();
// 
//   int start();
// 
//   int end();
// 
//   Model rdfModel(final String tool, final NlpProcess process, final String host);
// }
// 
// Path: src/main/java/fr/eurecom/stanfordnlprestapi/nullobjects/NullSentence.java
// public final class NullSentence implements Sentence {
//   static final Logger LOGGER = LoggerFactory.getLogger(NullSentence.class);
//   private static final NullSentence INSTANCE = new NullSentence();
//   
//   public static NullSentence getInstance() {
//     return NullSentence.INSTANCE;
//   }
//   
//   private NullSentence() {
//   }
// 
//   @Override
//   public void addToken(final Token newToken) {
//     throw new UnsupportedOperationException("Not implemented");
//   }
// 
//   @Override
//   public void addEntity(final Entity newEntity) {
//     throw new UnsupportedOperationException("Not implemented");
//   }
//   
//   @Override
//   public void addCoref(final Coref newCoref) {
//     throw new UnsupportedOperationException("Not implemented");
//   }
// 
//   @Override
//   public void nextSentence(final Sentence newNextSentence) {
//     throw new UnsupportedOperationException("Not implemented");
//   }
// 
//   @Override
//   public List<Entity> entities() {
//     return null;
//   }
// 
//   @Override
//   public int index() {
//     return -1;
//   }
// 
//   @Override
//   public int start() {
//     return 0;
//   }
// 
//   @Override
//   public int end() {
//     return 0;
//   }
// 
//   @Override
//   public Model rdfModel(final String tool, final NlpProcess process, final String host) {
//     return ModelFactory.createDefaultModel();
//   }
// }
// 
// Path: src/main/java/fr/eurecom/stanfordnlprestapi/nullobjects/NullToken.java
// public final class NullToken implements Token {
//   static final Logger LOGGER = LoggerFactory.getLogger(NullToken.class);
//   private static final NullToken INSTANCE = new NullToken();
// 
//   public static NullToken getInstance() {
//     return NullToken.INSTANCE;
//   }
//   
//   private NullToken() {
//   }
// 
//   @Override
//   public void nextToken(final Token newNextToken) {
//     throw new UnsupportedOperationException("Not imlpemented");
//   }
// 
//   @Override
//   public int index() {
//     return -1;
//   }
// 
//   @Override
//   public String text() {
//     return null;
//   }
// 
//   @Override
//   public int start() {
//     return 0;
//   }
// 
//   @Override
//   public int end() {
//     return 0;
//   }
// 
//   @Override
//   public Model rdfModel(final String tool, final NlpProcess process, final String host) {
//     return ModelFactory.createDefaultModel();
//   }
// }


// Path: src/test/java/fr/eurecom/stanfordnlprestapi/datatypes/TokenImplTest.java
import org.apache.jena.vocabulary.RDF;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fr.eurecom.stanfordnlprestapi.enums.NlpProcess;
import fr.eurecom.stanfordnlprestapi.interfaces.Sentence;
import fr.eurecom.stanfordnlprestapi.interfaces.Token;
import fr.eurecom.stanfordnlprestapi.nullobjects.NullSentence;
import fr.eurecom.stanfordnlprestapi.nullobjects.NullToken;
import org.apache.jena.datatypes.xsd.XSDDatatype;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.ResourceFactory;

    final Sentence sentence = new SentenceImpl("I like Natalie Portman", context, 0, 22, 0,
        NullSentence.getInstance());
    final Token token1 = new TokenImpl("I", "PRP", 0, 1, NullToken.getInstance(), context,
        sentence, 1);
    final Token token2 = new TokenImpl("I", "PRP", 0, 1, NullToken.getInstance(), context,
        sentence, 1);

    Assert.assertNotSame("The two sentences are the same", token1, token2);
    Assert.assertEquals("Issue to compute the hascode of a sentence", (long) token1.hashCode(),
        (long) token2.hashCode());
  }

  /**
   * Test {@link TokenImpl#equals(Object)} method.
   */
  @Test
  public final void testEquals() {
    final Context context = new Context("I like Natalie Portman", 0, 22);
    final Context context2 = new Context("My favorite actress is: Natalie Portman. She is very "
        + "stunning.", 0, 62);
    final Sentence sentence = new SentenceImpl("I like Natalie Portman", context, 0, 22, 0,
        NullSentence.getInstance());
    final Sentence sentence2 = new SentenceImpl("My favorite actress is: Natalie Portman.", context,
        0, 40, 1, NullSentence.getInstance());
    final Token token1 = new TokenImpl("I", "PRP", 0, 1, NullToken.getInstance(), context,
        sentence, 1);
    final Token token2 = new TokenImpl("A", "PRP", 0, 1, NullToken.getInstance(), context,
        sentence, 1);
    final Token token3 = new TokenImpl("I", "PRP", 1, 1, NullToken.getInstance(), context,
        sentence, 1);
    final Token token4 = new TokenImpl("I", "VBZ", 0, 1, NullToken.getInstance(), context,