/*******************************************************************************
 * Copyright (c) 2012 Sierra Wireless 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:
 *     Sierra Wireless - initial API and implementation
 *******************************************************************************/
package org.eclipse.ldt.ui.tests;

import junit.framework.JUnit4TestAdapter;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

import org.eclipse.ldt.ui.tests.internal.LuaWordFinderTest;
import org.eclipse.ldt.ui.tests.internal.autoedit.LuaDocumentorCommentAutoEditStrategyTest;
import org.eclipse.ldt.ui.tests.internal.rules.LuaDocMultLineCommentTest;
import org.eclipse.ldt.ui.tests.internal.rules.LuaDocSingleCommentSeriesRuleTest;
import org.eclipse.ldt.ui.tests.internal.rules.LuaMultLineCommentRuleTest;
import org.eclipse.ldt.ui.tests.internal.rules.LuaMultLineStringRuleTest;
import org.eclipse.ldt.ui.tests.internal.rules.LuaNumberRuleTest;
import org.eclipse.ldt.ui.tests.internal.scanners.LuaCodeScannerTestSuite;
import org.eclipse.ldt.ui.tests.internal.scanners.LuaDocumentorScannerTestSuite;
import org.eclipse.ldt.ui.tests.internal.scanners.LuaPartitionScannerTestSuite;

public class AllUIIntegrationTests extends TestCase {

	public static Test suite() {
		final TestSuite suite = new TestSuite(AllUIIntegrationTests.class.getName());

		boolean ignoreFailure = true;
		suite.addTest(new LuaPartitionScannerTestSuite(ignoreFailure));
		suite.addTest(new LuaCodeScannerTestSuite(ignoreFailure));
		suite.addTest(new LuaDocumentorScannerTestSuite(ignoreFailure));

		suite.addTest(new JUnit4TestAdapter(LuaNumberRuleTest.class));
		suite.addTest(new JUnit4TestAdapter(LuaMultLineStringRuleTest.class));
		suite.addTest(new JUnit4TestAdapter(LuaMultLineCommentRuleTest.class));
		suite.addTest(new JUnit4TestAdapter(LuaDocMultLineCommentTest.class));
		suite.addTest(new JUnit4TestAdapter(LuaDocSingleCommentSeriesRuleTest.class));

		suite.addTest(new JUnit4TestAdapter(LuaDocumentorCommentAutoEditStrategyTest.class));
		suite.addTest(new JUnit4TestAdapter(LuaWordFinderTest.class));
		return suite;
	}
}
