tikhomirov@147: /* tikhomirov@147: * Copyright (c) 2011 TMate Software Ltd tikhomirov@147: * tikhomirov@147: * This program is free software; you can redistribute it and/or modify tikhomirov@147: * it under the terms of the GNU General Public License as published by tikhomirov@147: * the Free Software Foundation; version 2 of the License. tikhomirov@147: * tikhomirov@147: * This program is distributed in the hope that it will be useful, tikhomirov@147: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@147: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@147: * GNU General Public License for more details. tikhomirov@147: * tikhomirov@147: * For information on how to redistribute this software under tikhomirov@147: * the terms of a license other than GNU General Public License tikhomirov@147: * contact TMate Software at support@hg4j.com tikhomirov@147: */ tikhomirov@147: package org.tmatesoft.hg.test; tikhomirov@147: tikhomirov@147: import static org.junit.Assert.*; tikhomirov@147: tikhomirov@147: import java.io.File; tikhomirov@202: import java.util.ArrayList; tikhomirov@202: import java.util.Arrays; tikhomirov@201: import java.util.List; tikhomirov@147: tikhomirov@147: import org.tmatesoft.hg.repo.HgLookup; tikhomirov@201: import org.tmatesoft.hg.repo.HgRemoteRepository; tikhomirov@147: import org.tmatesoft.hg.repo.HgRepository; tikhomirov@147: tikhomirov@147: /** tikhomirov@147: * tikhomirov@147: * @author Artem Tikhomirov tikhomirov@147: * @author TMate Software Ltd. tikhomirov@147: */ tikhomirov@147: public class Configuration { tikhomirov@147: tikhomirov@147: private static Configuration inst; tikhomirov@203: private File root; tikhomirov@147: private final HgLookup lookup; tikhomirov@202: private File tempDir; tikhomirov@202: private List remoteServers; tikhomirov@269: private File testDataDir; tikhomirov@147: tikhomirov@203: private Configuration() { tikhomirov@147: lookup = new HgLookup(); tikhomirov@147: } tikhomirov@147: tikhomirov@203: private File getRoot() { tikhomirov@203: if (root == null) { tikhomirov@203: String repo2 = System.getProperty("hg4j.tests.repos"); tikhomirov@203: assertNotNull("System property hg4j.tests.repos is undefined", repo2); tikhomirov@203: root = new File(repo2); tikhomirov@203: assertTrue(root.exists()); tikhomirov@203: } tikhomirov@203: return root; tikhomirov@203: } tikhomirov@203: tikhomirov@147: public static Configuration get() { tikhomirov@147: if (inst == null) { tikhomirov@203: inst = new Configuration(); tikhomirov@147: } tikhomirov@147: return inst; tikhomirov@147: } tikhomirov@147: tikhomirov@147: public HgRepository own() throws Exception { tikhomirov@147: return lookup.detectFromWorkingDir(); tikhomirov@147: } tikhomirov@147: tikhomirov@147: // fails if repo not found tikhomirov@147: public HgRepository find(String key) throws Exception { tikhomirov@203: HgRepository rv = lookup.detect(new File(getRoot(), key)); tikhomirov@147: assertNotNull(rv); tikhomirov@147: assertFalse(rv.isInvalid()); tikhomirov@147: return rv; tikhomirov@147: } tikhomirov@201: tikhomirov@202: // easy override for manual test runs tikhomirov@202: public void remoteServers(String... keys) { tikhomirov@202: remoteServers = Arrays.asList(keys); tikhomirov@202: } tikhomirov@202: tikhomirov@201: public List allRemote() throws Exception { tikhomirov@202: if (remoteServers == null) { tikhomirov@204: String rr = System.getProperty("hg4j.tests.remote"); tikhomirov@204: assertNotNull("System property hg4j.tests.remote is undefined", rr); tikhomirov@204: remoteServers = Arrays.asList(rr.split(" ")); tikhomirov@202: } tikhomirov@202: ArrayList rv = new ArrayList(remoteServers.size()); tikhomirov@202: for (String key : remoteServers) { tikhomirov@202: rv.add(lookup.detectRemote(key, null)); tikhomirov@202: } tikhomirov@202: return rv; tikhomirov@202: } tikhomirov@202: tikhomirov@202: public File getTempDir() { tikhomirov@202: if (tempDir == null) { tikhomirov@202: String td = System.getProperty("hg4j.tests.tmpdir", System.getProperty("java.io.tmpdir")); tikhomirov@202: tempDir = new File(td); tikhomirov@202: } tikhomirov@202: return tempDir; tikhomirov@201: } tikhomirov@269: tikhomirov@269: public File getTestDataDir() { tikhomirov@269: if (testDataDir == null) { tikhomirov@269: testDataDir = new File(System.getProperty("user.dir"), "test-data"); tikhomirov@269: } tikhomirov@269: return testDataDir; tikhomirov@269: } tikhomirov@147: }