package com.heavylead.presenters;
import java.util.ArrayList;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.List;
import junit.framework.TestCase;
import org.jmock.Expectations;
import org.jmock.Mockery;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.heavylead.IHeavyLeadGame;
import com.heavylead.injection.HeavyLeadTestModule;
import com.heavylead.models.interfaces.IGameSettingsModel;
import com.heavylead.models.interfaces.ISelectCampaignModel;
import com.heavylead.models.interfaces.ITranslator;
import com.heavylead.views.interfaces.IEditSettingsView;
import com.heavylead.views.interfaces.IEditSettingsViewListener;
import com.heavylead.views.interfaces.IMainMenuView;
import com.heavylead.views.interfaces.IMainMenuViewListener;
import com.heavylead.views.interfaces.ISelectCampaignView;
import com.heavylead.views.interfaces.ISelectCampaignViewListener;
import com.heavylead.wrappers.interfaces.IGameStateManager;
/**
* The Class TestGbuiViewLoader.
*/
public final class TestNavigator extends TestCase {
private Injector _testInjector;
/** The _mockery. */
private Mockery _mockery;
/** The _mock translator. */
private ITranslator _mockTranslator;
private IGameStateManager _gameStateManager;
/** The _gbui view loader. */
private Navigator _navigator;
private IMainMenuView _mainMenuView;
private ISelectCampaignView _selectCampaignView;
private IGameSettingsModel _gameSettingsModel;
private IEditSettingsView _editSettingsView;
/**
* Instantiates a new test gbui view loader.
*/
public TestNavigator() {
}
/**
* @see junit.framework.TestCase#setUp()
*/
public void setUp() {
_testInjector = Guice.createInjector(new HeavyLeadTestModule());
_mockery = _testInjector.getInstance(Mockery.class);
_mockTranslator = _testInjector.getInstance(ITranslator.class);
_gameStateManager = _testInjector.getInstance(IGameStateManager.class);
_mainMenuView = _testInjector.getInstance(IMainMenuView.class);
_selectCampaignView = _testInjector.getInstance(ISelectCampaignView.class);
_gameSettingsModel = _testInjector.getInstance(IGameSettingsModel.class);
_editSettingsView = _testInjector.getInstance(IEditSettingsView.class);
_navigator = new Navigator();
_navigator.setInjector(_testInjector);
_testInjector.injectMembers(_navigator);
}
/**
* @see junit.framework.TestCase#tearDown()
*/
public void tearDown() {
_mockery.assertIsSatisfied();
}
/**
* Test display main menu.
*/
public void testDisplayMainMenu() {
displayMainMenu();
}
/**
* Display main menu.
*/
private void displayMainMenu() {
final int displayWidth = 10;
final int displayHeight = 10;
_mockery.checking(new Expectations() {
{
oneOf(_mainMenuView).setViewListener(
with(any(IMainMenuViewListener.class)));
oneOf(_mainMenuView).bindKeys();
oneOf(_mainMenuView).getTranslationTags();
oneOf(_mockTranslator).getTranslatedPhrases(
new ArrayList<String>());
will(returnValue(new Hashtable<String, String>()));
oneOf(_mainMenuView).setTranslationPhrases(
new Hashtable<String, String>());
oneOf(_mainMenuView).activate();
oneOf(_gameStateManager).attachChild(_mainMenuView);
oneOf(_gameSettingsModel).getDisplayWidth();
will(returnValue(displayWidth));
oneOf(_gameSettingsModel).getDisplayHeight();
will(returnValue(displayHeight));
oneOf(_mainMenuView).layout(displayWidth, displayHeight);
}
});
_navigator.displayMainMenu();
}
/**
* Test hide main menu.
*/
public void testHideMainMenu() {
displayAndHideMainMenu();
}
/**
* Display and hide main menu.
*/
private void displayAndHideMainMenu() {
displayMainMenu();
hideMainMenu();
}
/**
* What happens if we call hideMainMenu twice?
*/
public void testDoubleHideMainMenu() {
displayAndHideMainMenu();
hideMainMenu();
}
/**
* Hide main menu.
*/
private void hideMainMenu() {
_mockery.checking(new Expectations() {
{
oneOf(_gameStateManager).hasChild(_mainMenuView);
will(returnValue(true));
oneOf(_mainMenuView).deactivate();
oneOf(_mainMenuView).unbindKeys();
oneOf(_gameStateManager).detachChild(_mainMenuView);
}
});
_navigator.hideMainMenu();
}
/**
* Test display select campaign.
*/
public void testDisplaySelectCampaign() {
displaySelectCampaign();
}
/**
* Display select campaign.
*/
private void displaySelectCampaign() {
final List<String> campaignNames = new ArrayList<String>();
final ISelectCampaignModel selectCampaignModel =
_testInjector.getInstance(ISelectCampaignModel.class);
final int displayWidth = 10;
final int displayHeight = 10;
_mockery.checking(new Expectations() {
{
oneOf(_selectCampaignView).setViewListener(
with(any(ISelectCampaignViewListener.class)));
oneOf(_selectCampaignView).bindKeys();
oneOf(_selectCampaignView).getTranslationTags();
oneOf(_mockTranslator).getTranslatedPhrases(new ArrayList<String>());
will(returnValue(new Hashtable<String, String>()));
oneOf(_selectCampaignView).setTranslationPhrases(
new Hashtable<String, String>());
oneOf(_selectCampaignView).activate();
oneOf(_gameStateManager).attachChild(_selectCampaignView);
oneOf(_selectCampaignView).enableContinueCampaign(false);
oneOf(_selectCampaignView).enableStartNewCampaign(false);
oneOf(selectCampaignModel).getCampaignNames();
will(returnValue(campaignNames));
oneOf(_selectCampaignView).setCampaignNames(campaignNames);
oneOf(_gameSettingsModel).getDisplayWidth();
will(returnValue(displayWidth));
oneOf(_gameSettingsModel).getDisplayHeight();
will(returnValue(displayHeight));
oneOf(_selectCampaignView).layout(displayWidth, displayHeight);
}
});
_navigator.displaySelectCampaign();
}
/**
* Test hide select campaign.
*/
public void testHideSelectCampaign() {
displaySelectCampaign();
_mockery.checking(new Expectations() {
{
oneOf(_gameStateManager).hasChild(_selectCampaignView);
will(returnValue(true));
oneOf(_selectCampaignView).deactivate();
oneOf(_selectCampaignView).unbindKeys();
oneOf(_gameStateManager).detachChild(_selectCampaignView);
}
});
_navigator.hideSelectCampaign();
}
/**
* Test show edit settings.
*/
public void testDisplayEditSettings() {
final int displayWidth = 10;
final int displayHeight = 10;
final List<String> translationTags = new ArrayList<String>();
mockDefaultValues();
_mockery.checking(new Expectations() {
{
oneOf(_editSettingsView).setViewListener(
with(any(IEditSettingsViewListener.class)));
oneOf(_editSettingsView).bindKeys();
oneOf(_gameSettingsModel).getDisplayWidth();
will(returnValue(displayWidth));
oneOf(_gameSettingsModel).getDisplayHeight();
will(returnValue(displayHeight));
oneOf(_editSettingsView).layout(displayWidth, displayHeight);
oneOf(_editSettingsView).getTranslationTags();
will(returnValue(translationTags));
oneOf(_mockTranslator).getTranslatedPhrases(translationTags);
oneOf(_editSettingsView).setTranslationPhrases(null);
oneOf(_editSettingsView).activate();
oneOf(_gameStateManager).attachChild(_editSettingsView);
}
});
_navigator.displayEditSettings();
}
/**
* Mock default values.
*/
private void mockDefaultValues() {
final List<String> resolutionOptions = new ArrayList<String>();
final List<String> depthOptions = new ArrayList<String>();
final List<String> frequencyOptions = new ArrayList<String>();
final Dictionary<String, String> languageOptions = new Hashtable<String, String>();
final String resolution = "";
final String colorBits = "";
final String frequency = "";
final boolean isFullScreen = false;
final String displayLanguage = "";
_mockery.checking(new Expectations() {
{
oneOf(_gameSettingsModel).getResolutionOptions();
will(returnValue(resolutionOptions));
oneOf(_editSettingsView).setResolutionOptions(resolutionOptions);
oneOf(_gameSettingsModel).getDepthOptions();
will(returnValue(depthOptions));
oneOf(_editSettingsView).setDepthOptions(depthOptions);
oneOf(_gameSettingsModel).getFrequencyOptions();
will(returnValue(frequencyOptions));
oneOf(_editSettingsView).setFrequencyOptions(frequencyOptions);
oneOf(_gameSettingsModel).getLanguageOptions();
will(returnValue(languageOptions));
oneOf(_editSettingsView).setLanguageOptions(languageOptions);
oneOf(_gameSettingsModel).getResolution();
will(returnValue(resolution));
oneOf(_editSettingsView).setResolution(resolution);
oneOf(_gameSettingsModel).getDepth();
will(returnValue(colorBits));
oneOf(_editSettingsView).setDepth(colorBits);
oneOf(_gameSettingsModel).getFrequency();
will(returnValue(frequency));
oneOf(_editSettingsView).setFrequency(frequency);
oneOf(_gameSettingsModel).getIsFullScreen();
will(returnValue(isFullScreen));
oneOf(_editSettingsView).setIsFullScreen(isFullScreen);
oneOf(_gameSettingsModel).getDisplayLanguage();
will(returnValue(displayLanguage));
oneOf(_editSettingsView).setDisplayLanguage(displayLanguage);
oneOf(_editSettingsView).enableApply(false);
oneOf(_editSettingsView).enableOk(false);
}
});
}
/**
* Test hide edit settings.
*/
public void testHideEditSettings() {
mockDefaultValues();
_mockery.checking(new Expectations() {
{
oneOf(_editSettingsView).setViewListener(
with(any(IEditSettingsViewListener.class)));
oneOf(_gameStateManager).hasChild(_editSettingsView);
will(returnValue(true));
oneOf(_editSettingsView).deactivate();
oneOf(_editSettingsView).unbindKeys();
oneOf(_gameStateManager).detachChild(_editSettingsView);
}
});
_navigator.hideEditSettings();
}
/**
* Test exit.
*/
public void testExit() {
final IHeavyLeadGame heavyLeadGame = _testInjector.getInstance(IHeavyLeadGame.class);
_mockery.checking(new Expectations() {
{
oneOf(heavyLeadGame).stop();
}
});
_navigator.exit();
}
/**
* Test display select campaign scenario.
*/
public void testDisplaySelectCampaignScenario() {
_navigator.displaySelectCampaignScenario();
}
/**
* Test display connect to server.
*/
public void testDisplayConnectToServer() {
_navigator.displayConnectToServer();
}
/**
* Test reinit display.
*/
public void testReinitDisplay() {
final int displayWidth = 10;
final int displayHeight = 10;
final IMainMenuView mainMenuView = _testInjector.getInstance(IMainMenuView.class);
final IGameSettingsModel gameSettings =
_testInjector.getInstance(IGameSettingsModel.class);
final ITranslator translator = _testInjector.getInstance(ITranslator.class);
final List<String> translationTags = new ArrayList<String>();
_mockery.checking(new Expectations() {
{
oneOf(mainMenuView).setViewListener(
with(any(IMainMenuViewListener.class)));
oneOf(mainMenuView).bindKeys();
oneOf(gameSettings).getDisplayWidth();
will(returnValue(displayWidth));
oneOf(gameSettings).getDisplayHeight();
will(returnValue(displayHeight));
oneOf(mainMenuView).layout(displayWidth, displayHeight);
oneOf(mainMenuView).getTranslationTags();
will(returnValue(translationTags));
oneOf(translator).getTranslatedPhrases(translationTags);
oneOf(mainMenuView).setTranslationPhrases(null);
oneOf(mainMenuView).activate();
oneOf(_gameStateManager).attachChild(mainMenuView);
}
});
_navigator.displayMainMenu();
final IHeavyLeadGame heavyLeadGame = _testInjector.getInstance(IHeavyLeadGame.class);
_mockery.checking(new Expectations() {
{
oneOf(heavyLeadGame).reinitVideo();
oneOf(gameSettings).getDisplayWidth();
will(returnValue(displayWidth));
oneOf(gameSettings).getDisplayHeight();
will(returnValue(displayHeight));
oneOf(mainMenuView).layout(displayWidth, displayHeight);
oneOf(mainMenuView).getTranslationTags();
will(returnValue(translationTags));
oneOf(translator).getTranslatedPhrases(translationTags);
oneOf(mainMenuView).setTranslationPhrases(null);
}
});
_navigator.reinitDisplay();
}
}
|