package org.jtheque.core;
import org.jtheque.core.application.Application;
import org.jtheque.core.application.ApplicationProperties;
import org.jtheque.core.utils.ImageType;
import org.jtheque.unit.AbstractJThequeTest;
import org.jtheque.utils.SystemProperty;
import org.jtheque.utils.bean.Version;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
import java.util.concurrent.atomic.AtomicInteger;
import static org.junit.Assert.*;
/*
* Copyright JTheque (Baptiste Wicht)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "jtheque-core-test.xml")
public class CoreTest extends AbstractJThequeTest {
@Resource
private Core core;
@Test
public void initOK() {
assertNotNull(core);
}
@Test
public void loaded() {
assertNotNull(core.getConfiguration());
}
@Test
public void foldersExists() {
assertTrue(Folders.getApplicationFolder().exists());
assertTrue(Folders.getModulesFolder().exists());
}
@Test
@DirtiesContext
public void launchApplication() {
Application application = new TestApplication();
core.launchApplication(application);
assertEquals(application, core.getApplication());
assertEquals(2, core.getPossibleLanguages().size());
assertTrue(core.getPossibleLanguages().contains("Français"));
assertTrue(core.getPossibleLanguages().contains("English"));
}
@Test(expected = IllegalStateException.class)
@DirtiesContext
public void languagesWithoutApplication() {
core.getPossibleLanguages();
}
@Test(expected = IllegalStateException.class)
@DirtiesContext
public void multipleLaunches() {
core.launchApplication(new TestApplication());
core.launchApplication(new TestApplication());
}
@Test
@DirtiesContext
public void applicationListener() {
final AtomicInteger counter = new AtomicInteger(0);
final Application launchedApplication = new TestApplication();
core.addApplicationListener(new ApplicationListener() {
@Override
public void applicationLaunched(Application application) {
assertEquals(application, launchedApplication);
assertEquals(application, core.getApplication());
counter.incrementAndGet();
}
});
core.launchApplication(launchedApplication);
assertEquals(1, counter.intValue());
}
@Test
@DirtiesContext
public void applicationURLs() {
core.launchApplication(new TestApplication());
assertEquals("help-application-url", core.getHelpURL());
assertEquals("bugs-application-url", core.getBugTrackerURL());
assertEquals("improvement-application-url", core.getImprovementURL());
}
@Test
public void creditsMessage() {
int oldSize = core.getCreditsMessage().size();
core.addCreditsMessage("super.key");
assertEquals(oldSize + 1, core.getCreditsMessage().size());
assertTrue(core.getCreditsMessage().contains("super.key"));
}
static final class TestApplication implements Application {
@Override
public String getLogo() {
return "test";
}
@Override
public ImageType getLogoType() {
return ImageType.PNG;
}
@Override
public String getWindowIcon() {
return "application.png";
}
@Override
public String getLicenseFilePath() {
return null;
}
@Override
public Version getVersion() {
return Version.get("1.0.1");
}
@Override
public String getFolderPath() {
return SystemProperty.USER_DIR.get();
}
@Override
public boolean isLicenseDisplayed() {
return false;
}
@Override
public String getRepository() {
return "";
}
@Override
public String getMessageFileURL() {
return "";
}
@Override
public ApplicationProperties getI18nProperties() {
return new ApplicationProperties() {
@Override
public String getName() {
return "test-application-name";
}
@Override
public String getAuthor() {
return "test-application-author";
}
@Override
public String getEmail() {
return "test-application-email";
}
@Override
public String getSite() {
return "test-application-site";
}
@Override
public String getCopyright() {
return "test-application-copyright";
}
};
}
@Override
public String[] getSupportedLanguages() {
return new String[]{"fr", "en"};
}
@Override
public String getProperty(String key) {
if ("url.help".equals(key)) {
return "help-application-url";
} else if ("url.bugs".equals(key)) {
return "bugs-application-url";
} else if ("url.improvement".equals(key)) {
return "improvement-application-url";
}
return null;
}
}
}