/*******************************************************************************
 * This file is part of the Twig eclipse plugin.
 *
 * (c) Robert Gruendler <r.gruendler@gmail.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 ******************************************************************************/
package com.dubture.twig.core.test.testcases;

import junit.framework.TestCase;

import org.eclipse.wst.sse.core.StructuredModelManager;
import org.eclipse.wst.sse.core.internal.provisional.IModelManager;
import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.dubture.twig.core.documentModel.provisional.contenttype.ContentTypeIdForTwig;
import com.dubture.twig.core.util.text.TwigTextSequenceUtilities;

/**
 *
 * Tests for the {@link TwigTextSequenceUtilities}
 *
 *
 * @author Robert Gruendler <r.gruendler@gmail.com>
 *
 */
@SuppressWarnings("restriction")
public class TwigTextSequenceUtilitiesTest extends TestCase {

	@Before
	protected void setUp() throws Exception {
		super.setUp();
	}

	@After
	protected void tearDown() throws Exception {
		super.tearDown();
	}

	@Test
	public void testStatement() {

		try {
			IStructuredModel model = createModel(ContentTypeIdForTwig.CONTENT_TYPE_ID_TWIG);

			IStructuredDocument fDoc = model.getStructuredDocument();
			String fText = "{% for item in items %}";
			fDoc.set(fText);
			// IStructuredDocumentRegion[] regions = fDoc
			// .getStructuredDocumentRegions();

			// assertEquals(1, regions.length);
			// int offset = 8;
			//
			// TextSequence statement =
			// TwigTextSequenceUtilities.getStatement(offset, regions[0],
			// false);
			// assertEquals("for i", statement.toString());

		} catch (Exception e) {
			e.printStackTrace();
			fail();

		}
	}

	@Test
	public void testPrint() {

		try {
			IStructuredModel model = createModel(ContentTypeIdForTwig.CONTENT_TYPE_ID_TWIG);

			IStructuredDocument fDoc = model.getStructuredDocument();
			String fText = "{{ item.href }}";
			fDoc.set(fText);
			IStructuredDocumentRegion[] regions = fDoc.getStructuredDocumentRegions();

			assertEquals(1, regions.length);
			// int offset = 8;

			// TextSequence statement = TwigTextSequenceUtilities.getStatement(
			// offset, regions[0], false);
			// assertNotNull(statement);
			// assertEquals("item.", statement.toString());

		} catch (Exception e) {
			e.printStackTrace();
			fail();

		}
	}

	@Test
	public void testSinglePrint() {

		try {
			IStructuredModel model = createModel(ContentTypeIdForTwig.CONTENT_TYPE_ID_TWIG);

			IStructuredDocument fDoc = model.getStructuredDocument();
			String fText = "{{ endblock }}";
			fDoc.set(fText);
			IStructuredDocumentRegion[] regions = fDoc.getStructuredDocumentRegions();

			assertEquals(1, regions.length);
			// int offset = 5;

			// TextSequence statement =
			// TwigTextSequenceUtilities.getStatement(offset, regions[0],
			// false);
			// assertEquals("en", statement.toString());

		} catch (Exception e) {
			e.printStackTrace();
			fail();

		}

	}

	private IStructuredModel createModel(String contentTypeID) {

		IModelManager manager = StructuredModelManager.getModelManager();
		return manager.createUnManagedStructuredModelFor(contentTypeID);

	}
}
