package org.getcomposer.core.test; import java.io.File; import java.net.URISyntaxException; import java.net.URL; import junit.framework.TestCase; import com.dubture.getcomposer.core.ComposerPackage; import com.dubture.getcomposer.core.RepositoryPackage; import com.dubture.getcomposer.core.VersionedPackage; import com.dubture.getcomposer.core.collection.Dependencies; import com.dubture.getcomposer.core.collection.JsonArray; import com.dubture.getcomposer.core.collection.Psr; import com.dubture.getcomposer.core.collection.Repositories; import com.dubture.getcomposer.core.objects.Autoload; import com.dubture.getcomposer.core.objects.Config; import com.dubture.getcomposer.core.objects.Distribution; import com.dubture.getcomposer.core.objects.Extra; import com.dubture.getcomposer.core.objects.JsonObject; import com.dubture.getcomposer.core.objects.Namespace; import com.dubture.getcomposer.core.objects.Person; import com.dubture.getcomposer.core.objects.Scripts; import com.dubture.getcomposer.core.objects.Source; import com.dubture.getcomposer.core.objects.Support; import com.dubture.getcomposer.core.repositories.ComposerRepository; import com.dubture.getcomposer.core.repositories.PackageRepository; import com.dubture.getcomposer.core.repositories.PearRepository; import com.dubture.getcomposer.core.repositories.SubversionRepository; import com.dubture.getcomposer.core.repositories.VcsRepository; public abstract class ComposertTestCase extends TestCase { // dummy package contents protected static String NAME = "gossi/test"; protected static String DESCRIPTION = "really dump description"; protected static String[] KEYWORDS = new String[]{"stub", "oop"}; protected static String LICENSE = "MIT"; protected static String LICENSE_EPL = "EPL"; protected static String TYPE = "library"; protected static String HOMEPAGE = "http://pdt-extensions.org"; protected static String MINIMUM_STABILITY = "dev"; protected static String TARGET_DIR = "test/"; // persons protected static String PERSON1 = "Robert Gruendler"; protected static String PERSON1_EMAIL = "r.gruendler@gmail.com"; protected static String PERSON1_ROLE = "owner"; protected static String PERSON2 = "Thomas Gossmann"; protected static String PERSON2_HOMEPAGE = "http://gos.si"; protected static String PERSON2_ROLE = "contributor"; // autoload protected static String NAMESPACE = "gossi"; protected static String NAMESPACE2 = "Monolog"; protected static String NAMESPACE3 = "UniqueGlobalClass"; protected static String NAMESPACE_PATH1 = "src/gossi"; protected static String NAMESPACE_PATH2 = "lib/"; protected static String NAMESPACE_PATH3 = "etc/"; protected static String[] AUTOLOAD_MAP = new String[]{NAMESPACE_PATH1, NAMESPACE_PATH2, "Something.php"}; protected static String[] AUTOLOAD_FILES = new String[]{"src/MyLibrary/functions.php"}; // dependencies protected static String PHP = "php"; protected static String PHP_VERSION = ">=5.3.2"; protected static String PHPUNIT = "phpunit/phpunit"; protected static String PHPUNIT_VERSION = "3.7.9"; // config protected static String BIN_DIR = "bin/"; protected static boolean NOTIFY_ON_INSTALL = true; protected static int PROCESS_TIMEOUT = 300; protected static String VENDOR_DIR = "vendor/"; protected static String[] GITHUB_PROTOCOLS = new String[]{"git", "http"}; // support protected static String EMAIL = "test@mail.com"; protected static String IRC = "irc://freenode.org/pdt"; protected static String SOURCE = "https://github.com/pulse00/Composer-Java-Bindings"; protected static String ISSUES = "https://github.com/pulse00/Composer-Java-Bindings/issues"; protected static String FORUM = "https://groups.google.com/forum/?fromgroups=#!forum/pdt-extensions-platform"; protected static String WIKI = "https://github.com/pdt-eg/Core-Plugin/wiki"; // repositories protected static String COMPOSER_URL = "https://packagist.org/packages.json"; protected static String PEAR_URL = "http://pear2.php.net"; protected static String PEAR_ALIAS = "foobar"; protected static String SVN_URL = "https://svn.github.com"; protected static String TRUNK = "trunk/"; protected static String BRANCHES = "branches/"; protected static String TAGS = "tags/"; protected static String VCS_URL = "https://github.com/Seldaek/monolog"; protected static String SMARTY = "smarty/smarty"; protected static String SMARTY_VERSION = "3.1.7"; protected static String SMARTY_ZIP = "http://www.smarty.net/files/Smarty-3.1.7.zip"; protected static String SMARTY_DIST = "zip"; protected static String SMARTY_SVN = "http://smarty-php.googlecode.com/svn/"; protected static String SMARTY_SOURCE = "svn"; protected static String SMARTY_REFERENCE = "tags/Smarty_3_1_7/distribution/"; // scripts protected static String PRE_INSTALL_CMD = "pre\\install::cmd()"; protected static String POST_INSTALL_CMD = "post\\install::cmd()"; protected static String POST_INSTALL_TEST = "phpunit"; protected static String PRE_UPDATE_CMD = "pre\\update::cmd()"; protected static String POST_UPDATE_CMD = "post\\update::cmd()"; protected static String PRE_PACKAGE_INSTALL = "pre\\package::install()"; protected static String POST_PACKAGE_INSTALL = "post\\package::install()"; protected static String PRE_PACKAGE_UPDATE = "pre\\package::update()"; protected static String POST_PACKAGE_UPDATE = "post\\package::update()"; protected static String PRE_PACKAGE_UNINSTALL = "pre\\package::uninstall()"; protected static String POST_PACKAGE_UNINSTALL = "post\\package::uninstall()"; protected File loadFile(String name) throws URISyntaxException { ClassLoader loader = getClass().getClassLoader(); URL resource = loader.getResource(name); return new File(resource.toURI()); } protected ComposerPackage createDummyPackage() { ComposerPackage phpPackage = new ComposerPackage(); // name phpPackage.setName(NAME); // description phpPackage.setDescription(DESCRIPTION); // type phpPackage.setType(TYPE); // homepage phpPackage.setHomepage(HOMEPAGE); // target-dir phpPackage.setTargetDir(TARGET_DIR); // minimum-stability phpPackage.setMinimumStability(MINIMUM_STABILITY); // keywords JsonArray keywords = phpPackage.getKeywords(); for (String keyword : KEYWORDS) { keywords.add(keyword); } // authors Person robert = new Person(); robert.setName(PERSON1); robert.setEmail(PERSON1_EMAIL); robert.setRole(PERSON1_ROLE); phpPackage.getAuthors().add(robert); Person gossi = new Person(); gossi.setName(PERSON2); gossi.setHomepage(PERSON2_HOMEPAGE); gossi.setRole(PERSON2_ROLE); phpPackage.getAuthors().add(gossi); // license phpPackage.getLicense().add(LICENSE); phpPackage.getLicense().add(LICENSE_EPL); // autoload createAutoload(phpPackage); // dependencies createDependencies(phpPackage); // repositories createRepositories(phpPackage); // support createSupport(phpPackage); // config createConfig(phpPackage); // scripts createScripts(phpPackage); // extras Extra extra = phpPackage.getExtra(); extra.set("just", "something"); return phpPackage; } private void createAutoload(ComposerPackage phpPackage) { Autoload autoload = phpPackage.getAutoload(); // psr0 Namespace gossi = new Namespace(); gossi.setNamespace(NAMESPACE); gossi.add(NAMESPACE_PATH1); autoload.getPsr0().add(gossi); Namespace monolog = new Namespace(); monolog.setNamespace(NAMESPACE2); monolog.add(NAMESPACE_PATH1); monolog.add(NAMESPACE_PATH2); autoload.getPsr0().add(monolog); Namespace uniqueClass = new Namespace(); uniqueClass.setNamespace(NAMESPACE3); autoload.getPsr0().add(uniqueClass); Namespace empty = new Namespace(); empty.setNamespace(""); empty.add(NAMESPACE_PATH3); autoload.getPsr0().add(empty); // classmap JsonArray map = autoload.getClassMap(); for (String m : AUTOLOAD_MAP) { map.add(m); } // files JsonArray files = autoload.getFiles(); for (String f : AUTOLOAD_FILES) { files.add(f); } } private void createDependencies(ComposerPackage phpPackage) { Dependencies require = phpPackage.getRequire(); VersionedPackage php = new VersionedPackage(); php.setName(PHP); php.setVersion(PHP_VERSION); require.add(php); Dependencies requireDev = phpPackage.getRequireDev(); VersionedPackage phpUnit = new VersionedPackage(); phpUnit.setName(PHPUNIT); phpUnit.setVersion(PHPUNIT_VERSION); requireDev.add(phpUnit); } private void createSupport(ComposerPackage phpPackage) { Support support = phpPackage.getSupport(); support.setEmail(EMAIL); support.setIssues(ISSUES); support.setSource(SOURCE); support.setWiki(WIKI); support.setForum(FORUM); support.setIrc(IRC); } private void createConfig(ComposerPackage phpPackage) { Config config = phpPackage.getConfig(); config.setBinDir(BIN_DIR); config.setNotifyOnInstall(NOTIFY_ON_INSTALL); config.setProcessTimeout(PROCESS_TIMEOUT); config.setVendorDir(VENDOR_DIR); JsonArray githubProtocols = new JsonArray(); for (String p : GITHUB_PROTOCOLS) { githubProtocols.add(p); } config.setGithubProtocols(githubProtocols); } private void createScripts(ComposerPackage phpPackage) { Scripts scripts = phpPackage.getScripts(); scripts.getPreInstallCmd().add(PRE_INSTALL_CMD); scripts.getPostInstallCmd().add(POST_INSTALL_CMD); scripts.getPostInstallCmd().add(POST_INSTALL_TEST); scripts.getPreUpdateCmd().add(PRE_UPDATE_CMD); scripts.getPostUpdateCmd().add(POST_UPDATE_CMD); scripts.getPrePackageInstall().add(PRE_PACKAGE_INSTALL); scripts.getPostPackageInstall().add(POST_PACKAGE_INSTALL); scripts.getPrePackageUpdate().add(PRE_PACKAGE_UPDATE); scripts.getPostPackageUpdate().add(POST_PACKAGE_UPDATE); scripts.getPrePackageUninstall().add(PRE_PACKAGE_UNINSTALL); scripts.getPostPackageUninstall().add(POST_PACKAGE_UNINSTALL); } private void createRepositories(ComposerPackage phpPackage) { Repositories repos = phpPackage.getRepositories(); ComposerRepository composerRepo = new ComposerRepository(); composerRepo.setUrl(COMPOSER_URL); repos.add(composerRepo); JsonObject options = composerRepo.getOptions(); JsonObject ssl = new JsonObject(); ssl.set("verify_peer", true); options.set("ssl", ssl); SubversionRepository svnRepo = new SubversionRepository(); svnRepo.setUrl(SVN_URL); // haha svnRepo.setTrunkPath(TRUNK); svnRepo.setTagsPath(TAGS); svnRepo.setBranchesPath(BRANCHES); repos.add(svnRepo); PearRepository pearRepo = new PearRepository(); pearRepo.setUrl(PEAR_URL); pearRepo.setVendorAlias(PEAR_ALIAS); repos.add(pearRepo); PackageRepository pkgRepo = new PackageRepository(); repos.add(pkgRepo); RepositoryPackage pkg = pkgRepo.getPackage(); pkg.setName(SMARTY); pkg.setVersion(SMARTY_VERSION); Distribution dist = pkg.getDist(); dist.setType(SMARTY_DIST); dist.setUrl(SMARTY_ZIP); Source src = pkg.getSource(); src.setType(SMARTY_SOURCE); src.setUrl(SMARTY_SVN); src.setReference(SMARTY_REFERENCE); VcsRepository vcsRepo = new VcsRepository(); vcsRepo.setUrl(VCS_URL); repos.add(vcsRepo); } protected void doTestComposerPackage(ComposerPackage phpPackage) { assertNotNull(phpPackage); assertEquals(NAME, phpPackage.getName()); assertEquals(TYPE, phpPackage.getType()); assertEquals(DESCRIPTION, phpPackage.getDescription()); assertEquals(KEYWORDS[0], phpPackage.getKeywords().get(0)); assertEquals(HOMEPAGE, phpPackage.getHomepage()); assertEquals(TARGET_DIR, phpPackage.getTargetDir()); assertEquals(MINIMUM_STABILITY, phpPackage.getMinimumStability()); assertNotNull("Authors not NULL", phpPackage.getAuthors()); assertEquals(2, phpPackage.getAuthors().size()); Person robert = phpPackage.getAuthors().get(0); assertEquals(PERSON1, robert.getName()); assertEquals(PERSON1_EMAIL, robert.getEmail()); assertEquals(PERSON1_ROLE, robert.getRole()); Person gossi = phpPackage.getAuthors().get(1); assertEquals(PERSON2, gossi.getName()); assertEquals(PERSON2_HOMEPAGE, gossi.getHomepage()); assertEquals(PERSON2_ROLE, gossi.getRole()); assertEquals(2, phpPackage.getLicense().size()); assertEquals(LICENSE, phpPackage.getLicense().get(0)); assertEquals(LICENSE_EPL, phpPackage.getLicense().get(1)); assertEquals(KEYWORDS.length, phpPackage.getKeywords().size()); } protected void doTestDependencies(ComposerPackage phpPackage) { assertNotNull(phpPackage.getRequire()); assertEquals(1, phpPackage.getRequire().size()); Dependencies require = phpPackage.getRequire(); for (VersionedPackage dep : require) { assertNotNull(dep.getName()); assertNotNull(dep.getVersion()); } assertNotNull(phpPackage.getRequireDev()); } protected void doTestAutoload(ComposerPackage phpPackage) { Autoload al = phpPackage.getAutoload(); assertNotNull(al); // psr0 tests Psr psr = al.getPsr0(); assertEquals(4, psr.size()); assertEquals(1, psr.get(NAMESPACE).size()); assertEquals(NAMESPACE_PATH1, psr.get(NAMESPACE).getFirst()); assertEquals(2, psr.get(NAMESPACE2).size()); assertEquals(NAMESPACE_PATH2, psr.get(NAMESPACE2).getPaths().get(1)); assertEquals(1, psr.get(NAMESPACE3).size()); assertEquals("", psr.get(NAMESPACE3).getFirst()); assertNotNull(psr.get("")); assertEquals(NAMESPACE_PATH3, psr.get("").getFirst()); // classmap assertTrue(al.hasClassMap()); JsonArray classMap = al.getClassMap(); assertEquals(3, classMap.size()); // files assertTrue(al.hasFiles()); JsonArray files = al.getFiles(); assertEquals(1, files.size()); } protected void doTestSupport(ComposerPackage phpPackage) { Support support = phpPackage.getSupport(); assertEquals(EMAIL, support.getEmail()); assertEquals(IRC, support.getIrc()); assertEquals(ISSUES, support.getIssues()); assertEquals(FORUM, support.getForum()); assertEquals(WIKI, support.getWiki()); assertEquals(SOURCE, support.getSource()); } protected void doTestScripts(ComposerPackage phpPackage) { Scripts scripts = phpPackage.getScripts(); assertEquals(PRE_INSTALL_CMD, scripts.getPreInstallCmd().get(0)); assertEquals(2, scripts.getPostInstallCmd().size()); assertEquals(POST_INSTALL_CMD, scripts.getPostInstallCmd().get(0)); assertEquals(POST_INSTALL_TEST, scripts.getPostInstallCmd().get(1)); assertEquals(PRE_UPDATE_CMD, scripts.getPreUpdateCmd().get(0)); assertEquals(POST_UPDATE_CMD, scripts.getPostUpdateCmd().get(0)); assertEquals(PRE_PACKAGE_INSTALL, scripts.getPrePackageInstall().get(0)); assertEquals(POST_PACKAGE_INSTALL, scripts.getPostPackageInstall().get(0)); assertEquals(PRE_PACKAGE_UPDATE, scripts.getPrePackageUpdate().get(0)); assertEquals(POST_PACKAGE_UPDATE, scripts.getPostPackageUpdate().get(0)); assertEquals(PRE_PACKAGE_UNINSTALL, scripts.getPrePackageUninstall().get(0)); assertEquals(POST_PACKAGE_UNINSTALL, scripts.getPostPackageUninstall().get(0)); } protected void doTestConfig(ComposerPackage phpPackage) { Config config = phpPackage.getConfig(); assertNotNull(config); assertEquals(VENDOR_DIR, config.getVendorDir()); assertEquals(BIN_DIR, config.getBinDir()); assertEquals(PROCESS_TIMEOUT, (int)config.getProcessTimeout()); assertEquals(GITHUB_PROTOCOLS.length, config.getGithubProtocols().size()); assertEquals(NOTIFY_ON_INSTALL, config.getNotifyOnInstall()); } protected void doTestRepositories(ComposerPackage phpPackage) { Repositories repos = phpPackage.getRepositories(); assertNotNull(repos); assertTrue(repos.get(0) instanceof ComposerRepository); assertTrue(repos.get(1) instanceof SubversionRepository); assertTrue(repos.get(2) instanceof PearRepository); assertTrue(repos.get(3) instanceof PackageRepository); assertTrue(repos.get(4) instanceof VcsRepository); // composer repository ComposerRepository composer = (ComposerRepository)repos.get(0); assertEquals(COMPOSER_URL, composer.getUrl()); assertTrue(composer.getOptions() instanceof JsonObject); JsonObject options = composer.getOptions(); assertTrue(options.has("ssl")); assertTrue(options.isObject("ssl")); JsonObject ssl = options.getAsObject("ssl"); assertTrue(ssl.has("verify_peer")); assertTrue(ssl.getAsBoolean("verify_peer")); // subversion repository SubversionRepository subversion = (SubversionRepository)repos.get(1); assertEquals(SVN_URL, subversion.getUrl()); assertEquals(TRUNK, subversion.getTrunkPath()); assertEquals(BRANCHES, subversion.getBranchesPath()); assertEquals(TAGS, subversion.getTagsPath()); // pear repository PearRepository pear = (PearRepository)repos.get(2); assertEquals(PEAR_URL, pear.getUrl()); assertEquals(PEAR_ALIAS, pear.getVendorAlias()); // package repository PackageRepository pkgRepo = (PackageRepository)repos.get(3); assertNotNull(pkgRepo); RepositoryPackage pkg = pkgRepo.getPackage(); assertNotNull(pkg); assertEquals(SMARTY, pkg.getName()); assertEquals(SMARTY_VERSION, pkg.getVersion()); assertNotNull(pkg.getDist()); assertTrue(pkg.getDist() instanceof Distribution); assertEquals(SMARTY_ZIP, pkg.getDist().getUrl()); assertEquals(SMARTY_DIST, pkg.getDist().getType()); assertNotNull(pkg.getSource()); assertTrue(pkg.getSource() instanceof Source); assertEquals(SMARTY_SVN, pkg.getSource().getUrl()); assertEquals(SMARTY_SOURCE, pkg.getSource().getType()); assertEquals(SMARTY_REFERENCE, pkg.getSource().getReference()); } }