/*
* Copyright (C) 2010 Brockmann Consult GmbH (info@brockmann-consult.de)
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 3 of the License, or (at your option)
* any later version.
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, see http://www.gnu.org/licenses/
*/
package com.bc.ceres.swing.update;
import com.bc.ceres.core.runtime.ModuleState;
import com.bc.ceres.core.runtime.Module;
import com.bc.ceres.core.runtime.Version;
import com.bc.ceres.core.CoreException;
import junit.framework.TestCase;
public class ModuleSyncRunnerTest extends TestCase {
public void testNullArgs() {
try {
ModuleSyncRunner.sync(null, new Module[0]);
fail("NullPointerException expected");
} catch (NullPointerException e) {
// ok
}
try {
ModuleSyncRunner.sync(new ModuleItem[0], null);
fail("NullPointerException expected");
} catch (NullPointerException e) {
// ok
}
}
public void testEmptyModules() {
ModuleItem[] moduleItems = sync(new ModuleItem[0], new Module[0]);
testLength(moduleItems, 0);
}
public void testOneInstalledModule() throws CoreException {
ModuleItem[] moduleItems = sync(new ModuleItem[]{
TestHelpers.newModuleItemMock("module-a", "1.0", ModuleState.INSTALLED)
}, new Module[]{
});
testLength(moduleItems, 0);
}
public void testOneInstalledAndOneAvailableModule_DifferentIdsSameVersions() throws CoreException {
ModuleItem[] installedModuleItems = new ModuleItem[]{
TestHelpers.newModuleItemMock("module-a", "1.0", ModuleState.INSTALLED)
};
Module[] repositoryModules = new Module[]{TestHelpers.newRepositoryModuleMock("module-b", "1.0",
ModuleState.NULL)};
ModuleItem[] moduleItems = sync(installedModuleItems, repositoryModules);
testLength(moduleItems, 1);
testModule(moduleItems[0], "module-b", "1.0", ModuleState.NULL, repositoryModules[0]);
}
public void testOneInstalledAndOneAvailableModule_SameIdsSameVersions() throws CoreException {
ModuleItem[] moduleItems = sync(new ModuleItem[]{
TestHelpers.newModuleItemMock("module-a", "1.0", ModuleState.INSTALLED)
}, new Module[]{
TestHelpers.newRepositoryModuleMock("module-a", "1.0", ModuleState.NULL)
});
testLength(moduleItems, 0);
}
public void testOneInstalledAndOneAvailableModule_SameIdsDiffVersions() throws CoreException {
ModuleItem[] installedModuleItems = new ModuleItem[]{
TestHelpers.newModuleItemMock("module-a", "1.0", ModuleState.INSTALLED)
};
Module[] availableModuleItems = new Module[]{
TestHelpers.newRepositoryModuleMock("module-a", "1.1", ModuleState.NULL)
};
ModuleItem[] moduleItems = sync(installedModuleItems, availableModuleItems);
testLength(moduleItems, 0);
testModule(installedModuleItems[0], "module-a", "1.0", ModuleState.INSTALLED, availableModuleItems[0]);
}
private static ModuleItem[] sync(ModuleItem[] installedModuleItems, Module[] repositoryModules) {
return ModuleSyncRunner.sync(
installedModuleItems,
repositoryModules
);
}
public void testTwoInstalledAndTwoAvailableModules_OneCanBeUpdated() throws CoreException {
ModuleItem[] installedModuleItems = new ModuleItem[]{
TestHelpers.newModuleItemMock("module-a", "1.0", ModuleState.INSTALLED),
TestHelpers.newModuleItemMock("module-c", "1.0", ModuleState.INSTALLED)
};
Module[] availableModuleItems = new Module[]{
TestHelpers.newRepositoryModuleMock("module-b", "1.0", ModuleState.NULL),
TestHelpers.newRepositoryModuleMock("module-a", "1.1", ModuleState.NULL)
};
ModuleItem[] moduleItems = sync(installedModuleItems, availableModuleItems);
testLength(moduleItems, 1);
testModule(moduleItems[0], "module-b", "1.0", ModuleState.NULL, availableModuleItems[0]);
testModule(installedModuleItems[0], "module-a", "1.0", ModuleState.INSTALLED, availableModuleItems[1]);
testModule(installedModuleItems[1], "module-c", "1.0", ModuleState.INSTALLED, null);
}
public void testTwoInstalledAndTwoAvailableModules_OneHasHigherOtherHasLowerVersion() throws CoreException {
ModuleItem[] installedModuleItems = new ModuleItem[]{
TestHelpers.newModuleItemMock("module-a", "1.0", ModuleState.INSTALLED),
TestHelpers.newModuleItemMock("module-b", "1.0", ModuleState.INSTALLED)
};
Module[] availableModuleItems = new Module[]{
TestHelpers.newRepositoryModuleMock("module-b", "0.9", ModuleState.NULL),
TestHelpers.newRepositoryModuleMock("module-a", "1.1", ModuleState.NULL)
};
ModuleItem[] moduleItems = sync(installedModuleItems, availableModuleItems);
testLength(moduleItems, 0);
testModule(installedModuleItems[0], "module-a", "1.0", ModuleState.INSTALLED, availableModuleItems[1]);
testModule(installedModuleItems[1], "module-b", "1.0", ModuleState.INSTALLED, null);
}
public void testThatUninstalledModulesAreShownAsAvailable() throws CoreException {
ModuleItem[] installedModuleItems = new ModuleItem[]{
TestHelpers.newModuleItemMock("module-a", "1.0", ModuleState.INSTALLED),
TestHelpers.newModuleItemMock("module-b", "1.0", ModuleState.UNINSTALLED)
};
Module[] availableModuleItems = new Module[]{
TestHelpers.newRepositoryModuleMock("module-b", "0.9", ModuleState.NULL),
TestHelpers.newRepositoryModuleMock("module-a", "1.1", ModuleState.NULL)
};
ModuleItem[] moduleItems = sync(installedModuleItems, availableModuleItems);
testLength(moduleItems, 0);
// todo - [UNINSTALL question!]
// testLength(moduleItems, 1);
// testModule(moduleItems[0], "module-b", "0.9", ModuleState.NULL, availableModuleItems[0]);
//
// testModule(installedModuleItems[0], "module-a", "1.0", ModuleState.INSTALLED, availableModuleItems[1]);
// testModule(installedModuleItems[1], "module-b", "1.0", ModuleState.UNINSTALLED, null);
}
public void testThatLatestUpdateIsSet() throws CoreException {
ModuleItem[] installedModuleItems = new ModuleItem[]{
TestHelpers.newModuleItemMock("module-a", "1.0", ModuleState.INSTALLED),
TestHelpers.newModuleItemMock("module-b", "1.0", ModuleState.INSTALLED)
};
Module[] availableModuleItems = new Module[]{
TestHelpers.newRepositoryModuleMock("module-b", "0.9", ModuleState.NULL),
TestHelpers.newRepositoryModuleMock("module-b", "1.5", ModuleState.NULL),
TestHelpers.newRepositoryModuleMock("module-b", "2.0", ModuleState.NULL), // This is the one we want!
TestHelpers.newRepositoryModuleMock("module-b", "1.2", ModuleState.NULL),
};
ModuleItem[] moduleItems = sync(installedModuleItems, availableModuleItems);
testLength(moduleItems, 0);
testModule(installedModuleItems[0], "module-a", "1.0", ModuleState.INSTALLED, null);
testModule(installedModuleItems[1], "module-b", "1.0", ModuleState.INSTALLED, availableModuleItems[2]);
}
public void testTwoUninstalledAndTwoAvailables_SameIdsSameVersions() throws CoreException {
ModuleItem[] installedModuleItems = new ModuleItem[]{
TestHelpers.newModuleItemMock("module-a", "1.0", ModuleState.UNINSTALLED),
TestHelpers.newModuleItemMock("module-b", "1.0", ModuleState.UNINSTALLED)
};
Module[] repositoryModules = new Module[]{
TestHelpers.newRepositoryModuleMock("module-b", "1.0", ModuleState.NULL),
TestHelpers.newRepositoryModuleMock("module-a", "1.0", ModuleState.NULL)
};
ModuleItem[] moduleItems = sync(installedModuleItems, repositoryModules);
testLength(moduleItems, 0);
// todo - [UNINSTALL question!]
// testLength(moduleItems, 2);
// testModule(moduleItems[0], "module-b", "1.0", ModuleState.NULL, repositoryModules[0]);
// testModule(moduleItems[1], "module-a", "1.0", ModuleState.NULL, repositoryModules[1]);
//
// testModule(installedModuleItems[0], "module-a", "1.0", ModuleState.UNINSTALLED, null);
// testModule(installedModuleItems[1], "module-b", "1.0", ModuleState.UNINSTALLED, null);
}
public void testTwoUninstalledAndTwoAvailables_SameIdsDiffVersions() throws CoreException {
ModuleItem[] installedModuleItems = new ModuleItem[]{
TestHelpers.newModuleItemMock("module-a", "1.0", ModuleState.UNINSTALLED),
TestHelpers.newModuleItemMock("module-b", "1.0", ModuleState.UNINSTALLED)
};
Module[] repositoryModules = new Module[]{
TestHelpers.newRepositoryModuleMock("module-b", "1.0", ModuleState.NULL),
TestHelpers.newRepositoryModuleMock("module-a", "1.1", ModuleState.NULL)
};
ModuleItem[] moduleItems = sync(installedModuleItems, repositoryModules);
testLength(moduleItems, 0);
// todo - [UNINSTALL question!]
// testLength(moduleItems, 2);
// testModule(moduleItems[0], "module-b", "1.0", ModuleState.NULL, repositoryModules[0]);
// testModule(moduleItems[1], "module-a", "1.1", ModuleState.NULL, repositoryModules[1]);
// testModule(installedModuleItems[0], "module-a", "1.0", ModuleState.UNINSTALLED, null);
// testModule(installedModuleItems[1], "module-b", "1.0", ModuleState.UNINSTALLED, null);
}
private void testLength(ModuleItem[] moduleItems, int expectedLength) {
assertNotNull(moduleItems);
assertEquals(expectedLength, moduleItems.length);
}
private void testModule(ModuleItem moduleItem, String expectedId, String expectedVersion,
ModuleState expectedStatus, Module expectedUpdate) {
assertEquals(expectedId, moduleItem.getModule().getSymbolicName());
assertEquals(Version.parseVersion(expectedVersion), moduleItem.getModule().getVersion());
assertEquals(expectedStatus, moduleItem.getModule().getState());
assertSame(expectedUpdate, moduleItem.getRepositoryModule());
}
}