/*******************************************************************************
 * Copyright (c) 2011 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdt.debug.tests.launching;

import org.eclipse.core.resources.IContainer;
import org.eclipse.debug.internal.core.LaunchConfiguration;
import org.eclipse.jdt.debug.tests.AbstractDebugTest;

/**
 * Class for testing method from the class {@link LaunchConfiguration}
 * @since 3.7
 */
public class LaunchConfigurationTests extends AbstractDebugTest {

	/**
	 * A configuration for testing
	 */
	class TestConfiguration extends LaunchConfiguration {

		/**
		 * Constructor
		 * @param name
		 * @param container
		 */
		protected TestConfiguration(String name, IContainer container) {
			super(name, container);
		}

		public String getSimpleNameProxy(String fileName) {
			return getSimpleName(fileName);
		}

		public void setNameProxy(String name) {
			setName(name);
		}

		public String getFileNameProxy() {
			return getFileName();
		}
	}

	TestConfiguration config = new TestConfiguration("Test", null);

	/**
	 * Constructor
	 * @param name
	 */
	public LaunchConfigurationTests(String name) {
		super(name);
	}

	/**
	 * Tests the {@link LaunchConfiguration#getSimpleName} method
	 *
	 * @throws Exception
	 * @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=332410
	 */
	public void testGetSimpleName() throws Exception {
		//filenames with the ILaunchConfiguration.LAUNCH_CONFIGURATION_FILE_EXTENSION as an extension
		String name = config.getSimpleNameProxy("launch.launch");
		assertEquals("Did not get expected name: 'launch'", "launch", name);
		name = config.getSimpleNameProxy("launch.foo.launch");
		assertEquals("Did not get expected name: 'launch.foo'", "launch.foo", name);
		name = config.getSimpleNameProxy("launch.foo.bar.launch");
		assertEquals("Did not get expected name: 'launch.foo.bar'", "launch.foo.bar", name);
		//filenames without the ILaunchConfiguration.LAUNCH_CONFIGURATION_FILE_EXTENSION extension
		name = config.getSimpleNameProxy("launch");
		assertEquals("Did not get expected name: 'launch'", "launch", name);
		name = config.getSimpleNameProxy("launch.foo");
		assertEquals("Did not get expected name: 'launch.foo'", "launch.foo", name);
		name = config.getSimpleNameProxy("launch.foo.bar");
		assertEquals("Did not get expected name: 'launch.foo.bar'", "launch.foo.bar", name);
	}

	/**
	 * Tests the {@link LaunchConfiguration#setName} method
	 *
	 * @throws Exception
	 */
	public void testSetName() throws Exception {
		assertEquals("The default name should be: 'Test'", "Test", config.getName());
		config.setNameProxy("newname");
		assertEquals("The new name should be: 'newname'", "newname", config.getName());
		//reset the name
		config.setNameProxy("Test");
	}

	/**
	 * Tests the {@link LaunchConfiguration#getFileName} method
	 *
	 * @throws Exception
	 */
	public void testGetFileName() throws Exception {
		String filename = config.getFileNameProxy();
		assertEquals("The filename should be: 'Test.launch'", "Test.launch", filename);
		config.setNameProxy("launch");
		filename = config.getFileNameProxy();
		assertEquals("The filename should be: 'launch.launch'", "launch.launch", filename);
		config.setNameProxy("launch.foo");
		filename = config.getFileNameProxy();
		assertEquals("The filename should be: 'launch.foo.launch'", "launch.foo.launch", filename);
		//reset the name
		config.setNameProxy("Test");
	}
}
