/*
 * Copyright 2016 Christoph Böhme
 * Copyright 2013, 2014 Deutsche Nationalbibliothek
 *
 * Licensed under the Apache License, Version 2.0 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.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.culturegraph.mf.test;

import java.net.URL;
import java.util.List;

import org.junit.runner.Description;
import org.junit.runner.notification.RunNotifier;
import org.junit.runners.ParentRunner;
import org.junit.runners.model.InitializationError;

/**
 * Executes test cases defined in a metamorph-test file.
 *
 * @author Christoph Böhme
 * @author Markus Michael Geipel
 *
 */
final class MetamorphTestRunner extends ParentRunner<MetamorphTestCase> {

	private final Class<?> testClass;
	private final List<MetamorphTestCase> metamorphTestCases;
	private final String testDefinition;

	MetamorphTestRunner(final Class<?> testClass, final String testDefinition)
			throws InitializationError {
		super(testClass);
		this.testClass = testClass;
		final URL testDefinitionUrl = testClass.getResource(testDefinition);
		if (testDefinitionUrl == null) {
			throw new InitializationError("'" + testDefinition + "' does not exist!");
		}
		this.metamorphTestCases = MetamorphTestLoader.load(testDefinitionUrl);
		this.testDefinition = testDefinition;
	}

	@Override
	protected String getName() {
		return testDefinition;
	}

	@Override
	protected List<MetamorphTestCase> getChildren() {
		return metamorphTestCases;
	}

	@Override
	protected Description describeChild(final MetamorphTestCase child) {
		return Description.createTestDescription(testClass, child.getName());
	}

	@Override
	protected void runChild(final MetamorphTestCase child,
			final RunNotifier notifier) {
		final Description description = describeChild(child);
		if (child.isIgnore()) {
			notifier.fireTestIgnored(description);
		} else {
			runLeaf(child, description, notifier);
		}
	}

}

/*
 * Copyright 2016 Christoph Böhme
 * Copyright 2013, 2014 Deutsche Nationalbibliothek
 *
 * Licensed under the Apache License, Version 2.0 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.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.culturegraph.mf.test;

import java.net.URL;
import java.util.List;

import org.junit.runner.Description;
import org.junit.runner.notification.RunNotifier;
import org.junit.runners.ParentRunner;
import org.junit.runners.model.InitializationError;

/**
 * Executes test cases defined in a metamorph-test file.
 *
 * @author Christoph Böhme
 * @author Markus Michael Geipel
 *
 */
final class MetamorphTestRunner extends ParentRunner<MetamorphTestCase> {

	private final List<MetamorphTestCase> metamorphTestCases;
	private final String testDefinition;

	MetamorphTestRunner(final Class<?> testClass, final String testDefinition)
			throws InitializationError {
		super(testClass);
		final URL testDefinitionUrl = testClass.getResource(testDefinition);
		if (testDefinitionUrl == null) {
			throw new InitializationError("'" + testDefinition + "' does not exist!");
		}
		this.metamorphTestCases = MetamorphTestLoader.load(testDefinitionUrl);
		this.testDefinition = testDefinition;
	}

	@Override
	protected String getName() {
		final int nameLength = testDefinition.indexOf('.');
		if (nameLength < 0) {
			return "xml: " + testDefinition;
		}
		return "xml: " + testDefinition.substring(0, nameLength);
	}

	@Override
	protected List<MetamorphTestCase> getChildren() {
		return metamorphTestCases;
	}

	@Override
	protected Description describeChild(final MetamorphTestCase child) {
		return Description.createTestDescription(getName(), child.getName());
	}

	@Override
	protected void runChild(final MetamorphTestCase child,
			final RunNotifier notifier) {
		final Description description = describeChild(child);
		if (child.isIgnore()) {
			notifier.fireTestIgnored(description);
		} else {
			runLeaf(child, description, notifier);
		}
	}

}

Fix test names for Metamorph Test in Intellij