/*******************************************************************************
 * Copyright (c) 2000, 2009 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.core.tests.model;

import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
import org.eclipse.jdt.core.jdom.*;

import junit.framework.Test;

/**
 * @deprecated JDOM is obsolete
 */
public class CreateTypeSourceExamplesTests extends AbstractJavaModelTests {
	IDOMFactory domFactory;

public CreateTypeSourceExamplesTests(String name) {
	super(name);
}
public static Test suite() {
	return buildModelTestSuite(CreateTypeSourceExamplesTests.class);
}
@Override
public void setUpSuite() throws Exception {
	super.setUpSuite();
	this.domFactory = new DOMFactory();
}
/**
 * Example of creating a class with an extends clause
 */
public void testCreateClassWithExtends() {
	IDOMType type= this.domFactory.createType();
	type.setName("Foo");
	type.setSuperclass("Bar");
	assertSourceEquals(
		"source code incorrect",
		"public class Foo extends Bar {\n" +
		"}\n",
		type.getContents());
}
/**
 * Example of creating a class with an implements clause.
 */
public void testCreateClassWithImplements() {
	IDOMType type= this.domFactory.createType();
	type.setName("Foo");
	type.setSuperInterfaces(new String[] {"ISomething", "IOtherwise"});
	assertSourceEquals(
		"source code incorrect",
		"public class Foo implements ISomething, IOtherwise {\n" +
		"}\n",
		type.getContents());
}

/**
 * Example of creating a class with an implements clause.
 * http://dev.eclipse.org/bugs/show_bug.cgi?id=10979
 */
public void testCreateClassWithImplements2() {
	IDOMType type= this.domFactory.createType("class A implements I1 {\n}");
	type.addSuperInterface("I2");
	assertSourceEquals(
		"source code incorrect",
		"class A implements I1, I2 {\n}",
		type.getContents());
}

/**
 * Example of creating a class with an implements clause.
 * http://dev.eclipse.org/bugs/show_bug.cgi?id=10979
 */
public void testCreateClassWithImplements3() {
	IDOMType type= this.domFactory.createType("class A {\n}");
	type.setSuperInterfaces(new String[] {"I1", "I2"});
	assertSourceEquals(
		"source code incorrect",
		"class A implements I1, I2 {\n}",
		type.getContents());
}

/**
 * Example of creating a class with an implements clause.
 * http://dev.eclipse.org/bugs/show_bug.cgi?id=10979
 */
public void testCreateClassWithImplements4() {
	IDOMType type= this.domFactory.createType("class A implements I1{\n}");
	type.addSuperInterface("I2");
	assertSourceEquals(
		"source code incorrect",
		"class A implements I1, I2{\n}",
		type.getContents());
}

/**
 * Example of creating a class with modifiers
 */
public void testCreateClassWithModifiers() {
	IDOMType type= this.domFactory.createType();
	type.setName("Foo");
	type.setFlags(ClassFileConstants.AccPublic | ClassFileConstants.AccFinal);
	assertSourceEquals(
		"source code incorrect",
		"public final class Foo {\n" +
		"}\n",
		type.getContents());
}
/**
 * Example of creating a default class
 */
public void testCreateEmptyClass() {
	IDOMType type= this.domFactory.createType();
	type.setName("Foo");
	assertSourceEquals(
		"source code incorrect",
		"public class Foo {\n" +
		"}\n",
		type.getContents());
}
/**
 * Ensures that an interface is created using
 * <code>CreateTypeSourceOperation</code> and that the source
 * of the created interface is correct.
 */
public void testCreateEmptyInterface() {
	IDOMType type= this.domFactory.createType();
	type.setName("Foo");
	type.setClass(false);
	assertSourceEquals(
		"source code incorrect",
		"public interface Foo {\n" +
		"}\n",
		type.getContents());
}
}
