package play.plugins;
import org.junit.Test;
import play.CorePlugin;
import play.Play;
import play.PlayBuilder;
import play.PlayPlugin;
import play.classloading.ApplicationClasses;
import play.data.parsing.TempFilePlugin;
import play.data.validation.ValidationPlugin;
import play.db.DBPlugin;
import play.db.Evolutions;
import play.db.jpa.JPAPlugin;
import play.i18n.MessagesPlugin;
import play.jobs.JobsPlugin;
import play.libs.WS;
import static org.fest.assertions.Assertions.assertThat;
/**
* Created by IntelliJ IDEA.
* User: mortenkjetland
* Date: 3/3/11
* Time: 12:14 AM
* To change this template use File | Settings | File Templates.
*/
public class PluginCollectionTest {
@Test
public void verifyLoading() {
new PlayBuilder().build();
PluginCollection pc = new PluginCollection();
pc.loadPlugins();
//the following plugin-list should match the list in the file 'play.plugins'
assertThat(pc.getEnabledPlugins()).containsExactly(
pc.getPluginInstance(CorePlugin.class),
pc.getPluginInstance(TempFilePlugin.class),
pc.getPluginInstance(ValidationPlugin.class),
pc.getPluginInstance(DBPlugin.class),
pc.getPluginInstance(JPAPlugin.class),
pc.getPluginInstance(Evolutions.class),
pc.getPluginInstance(MessagesPlugin.class),
pc.getPluginInstance(WS.class),
pc.getPluginInstance(JobsPlugin.class),
pc.getPluginInstance(ConfigurablePluginDisablingPlugin.class));
}
@Test
public void verifyLoadingFromFilesWithBlankLines() throws Exception {
//verify that only application specific plugins gets reloaded
new PlayBuilder().build();
//create custom PluginCollection that fakes that TestPlugin is application plugin
PluginCollection pc = new PluginCollection(){
@Override
protected boolean isLoadedByApplicationClassloader(PlayPlugin plugin) {
//return true only if This is our TestPlugin
return plugin.getClass().equals( TestPlugin.class);
}
};
//make sure we load custom play.plugins-file
pc.play_plugins_resourceName = "play/plugins/custom-play-with-blank-lines.plugins";
pc.loadPlugins();
PlayPlugin corePlugin_first_instance = pc.getPluginInstance(CorePlugin.class);
PlayPlugin testPlugin_first_instance = pc.getPluginInstance(TestPlugin.class);
assertThat(pc.getAllPlugins()).containsExactly(
corePlugin_first_instance,
testPlugin_first_instance);
}
@Test
public void verifyReloading() throws Exception{
//verify that only application specific plugins gets reloaded
new PlayBuilder().build();
//create custom PluginCollection that fakes that TestPlugin is application plugin
PluginCollection pc = new PluginCollection(){
@Override
protected boolean isLoadedByApplicationClassloader(PlayPlugin plugin) {
//return true only if This is our TestPlugin
return plugin.getClass().equals( TestPlugin.class);
}
};
//make sure we load custom play.plugins-file
pc.play_plugins_resourceName = "play/plugins/custom-play.plugins";
pc.loadPlugins();
PlayPlugin corePlugin_first_instance = pc.getPluginInstance(CorePlugin.class);
PlayPlugin testPlugin_first_instance = pc.getPluginInstance(TestPlugin.class);
//the following plugin-list should match the list in the file 'play.plugins'
assertThat(pc.getEnabledPlugins()).containsExactly(
corePlugin_first_instance,
testPlugin_first_instance);
assertThat(pc.getAllPlugins()).containsExactly(
corePlugin_first_instance,
testPlugin_first_instance);
pc.reloadApplicationPlugins();
PlayPlugin testPlugin_second_instance = pc.getPluginInstance(TestPlugin.class);
assertThat(pc.getPluginInstance(CorePlugin.class)).isEqualTo( corePlugin_first_instance);
assertThat(testPlugin_second_instance).isNotEqualTo( testPlugin_first_instance);
}
@SuppressWarnings({"deprecation"})
@Test
public void verifyUpdatePlayPluginsList(){
new PlayBuilder().build();
assertThat(Play.plugins).isEmpty();
PluginCollection pc = new PluginCollection();
pc.loadPlugins();
assertThat(Play.plugins).containsExactly( pc.getEnabledPlugins().toArray());
}
@SuppressWarnings({"deprecation"})
@Test
public void verifyThatDisabelingPluginsTheOldWayStillWorks(){
PluginCollection pc = new PluginCollection();
PlayPlugin legacyPlugin = new LegacyPlugin();
pc.addPlugin( legacyPlugin );
pc.addPlugin( new TestPlugin() );
pc.initializePlugin( legacyPlugin );
assertThat( pc.getEnabledPlugins() ).containsExactly(legacyPlugin);
//make sure Play.plugins-list is still correct
assertThat(Play.plugins).isEqualTo( pc.getEnabledPlugins() );
}
}
class LegacyPlugin extends PlayPlugin {
@SuppressWarnings({"deprecation"})
@Override
public void onLoad() {
//find TestPlugin in Play.plugins-list and remove it to disable it
PlayPlugin pluginToRemove = null;
for( PlayPlugin pp : Play.plugins){
if( pp.getClass().equals( TestPlugin.class)){
pluginToRemove = pp;
break;
}
}
Play.plugins.remove( pluginToRemove);
}
}