/**
* Copyright (C) 2005 - 2014 Eric Van Dewoestine
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.eclim.plugin.jdt.command.impl;
import java.util.regex.Pattern;
import org.eclim.Eclim;
import org.eclim.EclimTestCase;
import org.eclim.plugin.jdt.Jdt;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Test case for ConstructorCommand.
*
* @author Eric Van Dewoestine
*/
public class ConstructorCommandTest
extends EclimTestCase
{
private static final String TEST_FILE =
"src/org/eclim/test/impl/TestConstructor.java";
private static final String TEST_ENUM_FILE =
"src/org/eclim/test/impl/TestConstructorEnum.java";
private static final String TEST_CHILD_FILE =
"src/org/eclim/test/impl/TestConstructorChild.java";
@Test
public void emptyConstructor()
{
modifies(Jdt.TEST_PROJECT, TEST_ENUM_FILE);
assertTrue("Java project doesn't exist.",
Eclim.projectExists(Jdt.TEST_PROJECT));
Eclim.execute(new String[]{
"java_constructor", "-p", Jdt.TEST_PROJECT,
"-f", TEST_ENUM_FILE, "-o", "1", "-e", "utf-8"
});
String contents = Eclim.fileToString(Jdt.TEST_PROJECT, TEST_ENUM_FILE);
assertTrue("Constructor not found.",
Pattern.compile("^\\s+TestConstructorEnum\\(\\)", Pattern.MULTILINE)
.matcher(contents).find());
}
@Test
public void argConstructor()
{
modifies(Jdt.TEST_PROJECT, TEST_FILE);
assertTrue("Java project doesn't exist.",
Eclim.projectExists(Jdt.TEST_PROJECT));
Eclim.execute(new String[]{
"java_constructor", "-p", Jdt.TEST_PROJECT,
"-f", TEST_FILE,
"-o", "1", "-e", "utf-8", "-r", "[\"id\", \"name\"]"
});
String contents = Eclim.fileToString(Jdt.TEST_PROJECT, TEST_FILE);
assertTrue("Constructor not found.",
Pattern.compile("public TestConstructor\\(int id, String name\\)")
.matcher(contents).find());
}
@Test
public void nestedConstructor()
{
modifies(Jdt.TEST_PROJECT, TEST_FILE);
assertTrue("Java project doesn't exist.",
Eclim.projectExists(Jdt.TEST_PROJECT));
Eclim.execute(new String[]{
"java_constructor", "-p", Jdt.TEST_PROJECT,
"-f", TEST_FILE, "-o", "207", "-e", "utf-8"
});
String contents = Eclim.fileToString(Jdt.TEST_PROJECT, TEST_FILE);
assertTrue("Constructor not found.",
Pattern.compile("public TestInner\\(\\)\\s*\\{\\s*\\}")
.matcher(contents).find());
}
@Test
public void nestedArgConstructor()
{
modifies(Jdt.TEST_PROJECT, TEST_FILE);
assertTrue("Java project doesn't exist.",
Eclim.projectExists(Jdt.TEST_PROJECT));
Eclim.execute(new String[]{
"java_constructor", "-p", Jdt.TEST_PROJECT,
"-f", TEST_FILE, "-o", "207", "-e", "utf-8", "-r", "[\"subName\"]"
});
String contents = Eclim.fileToString(Jdt.TEST_PROJECT, TEST_FILE);
assertTrue("Constructor not found.",
Pattern.compile(
"public TestInner\\(String subName\\)\\s*" +
"\\{\\s*this\\.subName = subName;\\s*\\}")
.matcher(contents).find());
}
@Test
public void enumConstructor()
{
modifies(Jdt.TEST_PROJECT, TEST_ENUM_FILE);
assertTrue("Java project doesn't exist.",
Eclim.projectExists(Jdt.TEST_PROJECT));
Eclim.execute(new String[]{
"java_constructor", "-p", Jdt.TEST_PROJECT,
"-f", TEST_ENUM_FILE, "-o", "1", "-e", "utf-8", "-r", "[\"number\"]"
});
String contents = Eclim.fileToString(Jdt.TEST_PROJECT, TEST_ENUM_FILE);
assertTrue("Constructor not found.",
Pattern.compile("^\\s+TestConstructorEnum\\(int number\\)", Pattern.MULTILINE)
.matcher(contents).find());
}
@Test
public void anonymousConstructor()
{
modifies(Jdt.TEST_PROJECT, TEST_FILE);
assertTrue("Java project doesn't exist.",
Eclim.projectExists(Jdt.TEST_PROJECT));
String result = (String)Eclim.execute(new String[]{
"java_constructor", "-p", Jdt.TEST_PROJECT,
"-f", TEST_FILE, "-o", "198", "-e", "utf-8", "-r", "[\"number\"]"
});
assertEquals(
"Anonymous classes cannot contain explicitly declared constructors.", result);
}
@Test
public void superConstructor()
{
modifies(Jdt.TEST_PROJECT, TEST_CHILD_FILE);
assertTrue("Java project doesn't exist.",
Eclim.projectExists(Jdt.TEST_PROJECT));
// now test the subclass constructors
Eclim.execute(new String[]{
"java_constructor", "-p", Jdt.TEST_PROJECT,
"-f", TEST_CHILD_FILE, "-o", "1", "-e", "utf-8", "-s"
});
String contents = Eclim.fileToString(Jdt.TEST_PROJECT, TEST_CHILD_FILE);
assertTrue("Constructor not found.",
Pattern.compile(
"public TestConstructorChild\\(int id, String name\\)\\s*" +
"\\{\\s*super\\(id, name\\);\\s*\\}")
.matcher(contents).find());
Eclim.execute(new String[]{
"java_constructor", "-p", Jdt.TEST_PROJECT,
"-f", TEST_CHILD_FILE, "-o", "1", "-e", "utf-8", "-s", "-r", "[\"names\"]"
});
contents = Eclim.fileToString(Jdt.TEST_PROJECT, TEST_CHILD_FILE);
assertTrue("Constructor not found.",
Pattern.compile(
"public TestConstructorChild\\(Set<String> names\\)\\s*" +
"\\{\\s*this\\.names = names;\\s*\\}")
.matcher(contents).find());
}
}