SimpleNLG-EnFr-master/src/test/java/simplenlg/test/english/PhraseSpecTest.java
/*
 * The contents of this file are subject to the Mozilla Public License
 * Version 1.1 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
 * License for the specific language governing rights and limitations
 * under the License.
 *
 * The Original Code is "Simplenlg".
 *
 * The Initial Developer of the Original Code is Ehud Reiter, Albert Gatt and Dave Westwater.
 * Portions created by Ehud Reiter, Albert Gatt and Dave Westwater are Copyright (C) 2010-11 The University of Aberdeen. All Rights Reserved.
 *
 * Contributor(s): Ehud Reiter, Albert Gatt, Dave Wewstwater, Roman Kutlak, Margaret Mitchell, Pierre-Luc Vaudry.
 */
package simplenlg.test.english;

import junit.framework.Assert;

import org.junit.Test;

import simplenlg.features.Feature;
import simplenlg.features.Tense;
import simplenlg.framework.InflectedWordElement;
import simplenlg.framework.NLGElement;
import simplenlg.framework.PhraseElement;
import simplenlg.framework.StringElement;
import simplenlg.framework.WordElement;
import simplenlg.phrasespec.SPhraseSpec;

/**
 * test suite for simple XXXPhraseSpec classes
 * @author ereiter
 * 
 */

public class PhraseSpecTest extends SimpleNLG4TestBase {

	public PhraseSpecTest(String name) {
		super(name);
	}

	/**
	 * Test SPhraseSpec
	 */
	@Test
	public void testSPhraseSpec() {
		
		// simple test of methods
		SPhraseSpec c1 = (SPhraseSpec) phraseFactory.createClause();
		c1.setVerb("give");
		c1.setSubject("John");
		c1.setObject("an apple");
		c1.setIndirectObject("Mary");
		c1.setTense(Tense.PAST);
		c1.setNegated(true);
		
		// check getXXX methods
		Assert.assertEquals("give",  getBaseForm(c1.getVerb()));
		Assert.assertEquals("John", getBaseForm(c1.getSubject()));
		Assert.assertEquals("an apple", getBaseForm(c1.getObject()));
		Assert.assertEquals("Mary", getBaseForm(c1.getIndirectObject()));
		
		Assert.assertEquals("John did not give Mary an apple", this.realiser //$NON-NLS-1$
				.realise(c1).getRealisation());
		

		
		// test modifier placement
		SPhraseSpec c2 = (SPhraseSpec) phraseFactory.createClause();
		c2.setVerb("see");
		c2.setSubject("the man");
		c2.setObject("me");
		c2.addModifier("fortunately");
		c2.addModifier("quickly");
		c2.addModifier("in the park");
		// try setting tense directly as a feature
		c2.setFeature(Feature.TENSE, Tense.PAST);
		Assert.assertEquals("fortunately the man quickly saw me in the park", this.realiser //$NON-NLS-1$
				.realise(c2).getRealisation());
	}

	// get string for head of constituent
	private String getBaseForm(NLGElement constituent) {
		if (constituent == null)
			return null;
		else if (constituent instanceof StringElement)
			return constituent.getRealisation();
		else if (constituent instanceof WordElement)
			return ((WordElement)constituent).getBaseForm();
		else if (constituent instanceof InflectedWordElement)
			return getBaseForm(((InflectedWordElement)constituent).getBaseWord());
		else if (constituent instanceof PhraseElement)
			return getBaseForm(((PhraseElement)constituent).getHead());
		else
			return null;
	}
}
