package org.springframework.roo.addon.tailor.actions;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.roo.addon.tailor.CommandTransformation;
import org.springframework.roo.project.MavenOperationsImpl;
/**
* Tests for {@link Focus}
*
* @author Birgitta Boeckeler
*/
public class TestFocusModule {
/**
* Tests a list of match strings for the module name
*/
@Test
public void testList() {
final Focus action = createTestActionObject();
final ActionConfig config = ActionConfigFactory.focusModuleAction("data,it");
final CommandTransformation trafo =
new CommandTransformation("command not relevant for this test");
action.execute(trafo, config);
// Test data: "data" module is first, "data-it" second.
// Expected that action will discard "data" and choose "data-it"
Assert.assertTrue(trafo.getOutputCommands().contains("module focus --moduleName data-it"));
}
@Test
public void testListWithout() {
final Focus action = createTestActionObject();
final ActionConfig config = ActionConfigFactory.focusModuleAction("domain,/it");
final CommandTransformation trafo =
new CommandTransformation("command not relevant for this test");
action.execute(trafo, config);
// Test data: "domain-it" module is first, "domain" second.
// Expected that action will discard "domain-it" because it contains
// "it", and choose "domain"
Assert.assertTrue(trafo.getOutputCommands().contains("module focus --moduleName domain"));
}
@Test
public void testModulesNotLoadedYet() {
final Focus action = new Focus();
action.projectOperations = new MockProjectOperationsEmpty();
final ActionConfig config = ActionConfigFactory.focusModuleAction("domain");
final CommandTransformation trafo =
new CommandTransformation("command not relevant for this test");
try {
action.execute(trafo, config);
Assert
.fail("Should throw exception (is caught by DefaultTailorImpl, but this test goes directly to the action)");
} catch (final IllegalStateException e) {
Assert.assertTrue(trafo.getOutputCommands().isEmpty());
}
}
@Test
public void testStandard() {
final Focus action = createTestActionObject();
final ActionConfig config = ActionConfigFactory.focusModuleAction("domain");
final CommandTransformation trafo =
new CommandTransformation("command not relevant for this test");
action.execute(trafo, config);
// Test data: "domain-it" module is first, "domain" second.
// Expected that action will choose "domain-it" as the first positive
// match
Assert.assertTrue(trafo.getOutputCommands().contains("module focus --moduleName domain-it"));
}
private Focus createTestActionObject() {
final Focus action = new Focus();
action.projectOperations = new MockProjectOperations();
return action;
}
/**
* Mock ProjectOperations to return a list of test module names
*/
private class MockProjectOperations extends MavenOperationsImpl {
@Override
public Collection<String> getModuleNames() {
final List<String> result = new ArrayList<String>();
result.add("");
result.add("domain-it");
result.add("domain");
result.add("data");
result.add("data-it");
return result;
}
}
private class MockProjectOperationsEmpty extends MavenOperationsImpl {
@Override
public Collection<String> getModuleNames() {
return Collections.emptyList();
}
}
}