package com.chromium.fontinstaller.core;
import com.chromium.fontinstaller.MockFontPackage;
import com.chromium.fontinstaller.models.FontPackage;
import com.chromium.fontinstaller.models.Style;
import com.chromium.fontinstaller.util.FileUtils;
import org.junit.Test;
import java.io.File;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import rx.observers.TestSubscriber;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class FontInstallerTest {
private static final String FONT_NAME = "Aleo";
private static final FontPackage MOCK_FONT_PACK = new MockFontPackage(FONT_NAME);
private static final Set<String> EXPECTED_COMMANDS = new HashSet<String>() {{
for (Style style : Style.values()) {
add("cp " + MockFontPackage.TEST_FOLDER.getAbsolutePath() + File.separator + FONT_NAME
+ "FontPack" + File.separator + style.getLocalName() + " /system/fonts/");
}
}};
private static void downloadFontPack() {
// noinspection ResultOfMethodCallIgnored
MockFontPackage.TEST_FOLDER.mkdirs();
new FontDownloader(MOCK_FONT_PACK).downloadAllFonts().subscribe();
}
private static void deleteDownloadFolder() {
FileUtils.deleteDirectory(MockFontPackage.TEST_FOLDER);
}
@Test public void testGenerateCommands_systemMountedFirst() throws Exception {
downloadFontPack();
TestSubscriber<String> testSubscriber = new TestSubscriber<>();
FontInstaller.generateCommands(MOCK_FONT_PACK, null).subscribe(testSubscriber);
List<String> commands = testSubscriber.getOnNextEvents();
assertEquals(SystemConstants.MOUNT_SYSTEM_COMMAND, commands.get(0));
deleteDownloadFolder();
}
@Test public void testGenerateCommands_containsInstallCommands() throws Exception {
downloadFontPack();
TestSubscriber<String> testSubscriber = new TestSubscriber<>();
FontInstaller.generateCommands(MOCK_FONT_PACK, null).subscribe(testSubscriber);
List<String> commands = testSubscriber.getOnNextEvents();
assertTrue(commands.containsAll(EXPECTED_COMMANDS));
deleteDownloadFolder();
}
@Test public void testGenerateCommands_installExceptionIfFilesNonexistent() throws Exception {
TestSubscriber<String> testSubscriber = new TestSubscriber<>();
FontInstaller.generateCommands(MOCK_FONT_PACK, null).subscribe(testSubscriber);
testSubscriber.assertError(FontInstaller.InstallException.class);
}
}