/**
 * Copyright (c) 2013 committers of YAKINDU and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     committers of YAKINDU - initial API and implementation
 */
package org.yakindu.sct.model.stext.test;

import static org.junit.Assert.assertTrue;

import org.eclipse.xtext.junit4.validation.AssertableDiagnostics;
import org.eclipse.xtext.junit4.validation.ValidatorTester;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.yakindu.sct.model.sgraph.Statechart;
import org.yakindu.sct.model.stext.ui.internal.STextActivator;
import org.yakindu.sct.model.stext.validation.STextJavaValidator;
import org.yakindu.sct.test.models.SCTUnitTestModels;

import com.google.common.collect.Iterables;
import com.google.inject.Inject;
import com.google.inject.Injector;

/**
 * @author andreas muelder - Initial contribution and API
 * 
 */
@RunWith(Parameterized.class)
public class TestModelsContainErrorsTest {

	@Inject
	private STextJavaValidator validator;
	@Inject
	private Injector injector;

	private Statechart statechart;

	private ValidatorTester<STextJavaValidator> tester;

	public TestModelsContainErrorsTest(Statechart statechart) {
		STextActivator.getInstance().getInjector(STextActivator.ORG_YAKINDU_SCT_MODEL_STEXT_STEXT).injectMembers(this);
		this.statechart = statechart;
	}

	@Before
	public void setup() {
		tester = new ValidatorTester<STextJavaValidator>(validator, injector);
	}

	@After
	public void teardown() {
		tester = null;
	}

	@Parameters
	public static Iterable<Object[]> testData() throws Exception {
		return SCTUnitTestModels.parameterizedTestData();
	}

	@Test
	public void testTestModelContainsErrors() throws Exception {
		AssertableDiagnostics validate = tester.validate(statechart);
		//TODO: check warning in Choice.sct
		if (statechart.getName().equals("Choice"))
			return;
		assertTrue("Testmodel " + statechart.getName() + " contains validation diagnostics",
				Iterables.size(validate.getAllDiagnostics()) == 0);
	}
}
