tikhomirov@609: /* tikhomirov@609: * Copyright (c) 2013 TMate Software Ltd tikhomirov@609: * tikhomirov@609: * This program is free software; you can redistribute it and/or modify tikhomirov@609: * it under the terms of the GNU General Public License as published by tikhomirov@609: * the Free Software Foundation; version 2 of the License. tikhomirov@609: * tikhomirov@609: * This program is distributed in the hope that it will be useful, tikhomirov@609: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@609: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@609: * GNU General Public License for more details. tikhomirov@609: * tikhomirov@609: * For information on how to redistribute this software under tikhomirov@609: * the terms of a license other than GNU General Public License tikhomirov@609: * contact TMate Software at support@hg4j.com tikhomirov@609: */ tikhomirov@609: package org.tmatesoft.hg.test; tikhomirov@609: tikhomirov@611: import static org.junit.Assert.*; tikhomirov@611: tikhomirov@609: import java.io.File; tikhomirov@609: import java.util.HashMap; tikhomirov@609: import java.util.Map; tikhomirov@609: tikhomirov@609: import org.junit.Rule; tikhomirov@609: import org.junit.Test; tikhomirov@609: import org.tmatesoft.hg.internal.BasicSessionContext; tikhomirov@609: import org.tmatesoft.hg.internal.ConfigFile; tikhomirov@611: import org.tmatesoft.hg.repo.HgInternals; tikhomirov@611: import org.tmatesoft.hg.repo.HgLookup; tikhomirov@609: import org.tmatesoft.hg.repo.HgRepoConfig; tikhomirov@611: import org.tmatesoft.hg.repo.HgRepoConfig.ExtensionsSection; tikhomirov@609: import org.tmatesoft.hg.repo.HgRepoConfig.PathsSection; tikhomirov@609: import org.tmatesoft.hg.repo.HgRepoConfig.Section; tikhomirov@609: import org.tmatesoft.hg.repo.HgRepository; tikhomirov@609: tikhomirov@609: /** tikhomirov@609: * tikhomirov@609: * @author Artem Tikhomirov tikhomirov@609: * @author TMate Software Ltd. tikhomirov@609: */ tikhomirov@609: public class TestConfigFiles { tikhomirov@609: tikhomirov@609: @Rule tikhomirov@609: public ErrorCollectorExt errorCollector = new ErrorCollectorExt(); tikhomirov@609: tikhomirov@609: @Test tikhomirov@609: public void testConfigFile() throws Exception { tikhomirov@609: ConfigFile configFile = new ConfigFile(new BasicSessionContext(null)); tikhomirov@609: configFile.addLocation(new File(Configuration.get().getTestDataDir(), "sample.rc")); tikhomirov@609: // section1 has key1 unset, key2 overridden from included, key4 from second occurence tikhomirov@609: HashMap section1 = new HashMap(); tikhomirov@609: section1.put("key2", "alternative value 2"); tikhomirov@609: section1.put("key3", "value 3"); tikhomirov@609: section1.put("key4", "value 4"); tikhomirov@609: // section2 comes from included config tikhomirov@609: HashMap section2 = new HashMap(); tikhomirov@609: section2.put("key1", "value 1-2"); tikhomirov@609: HashMap section3 = new HashMap(); tikhomirov@609: section3.put("key1", "value 1-3"); tikhomirov@609: HashMap> sections = new HashMap>(); tikhomirov@609: sections.put("section1", section1); tikhomirov@609: sections.put("section2", section2); tikhomirov@609: sections.put("section3", section3); tikhomirov@609: // tikhomirov@609: for (String s : configFile.getSectionNames()) { tikhomirov@609: // System.out.printf("[%s]\n", s); tikhomirov@609: final HashMap m = sections.remove(s); tikhomirov@609: errorCollector.assertTrue(m != null); tikhomirov@609: for (Map.Entry e : configFile.getSection(s).entrySet()) { tikhomirov@609: // System.out.printf("%s = %s\n", e.getKey(), e.getValue()); tikhomirov@609: if (m.containsKey(e.getKey())) { tikhomirov@609: errorCollector.assertEquals(m.remove(e.getKey()), e.getValue()); tikhomirov@609: } else { tikhomirov@609: errorCollector.fail("Unexpected key:" + e.getKey()); tikhomirov@609: } tikhomirov@609: } tikhomirov@609: } tikhomirov@609: errorCollector.assertEquals(0, sections.size()); tikhomirov@609: errorCollector.assertEquals(0, section1.size()); tikhomirov@609: errorCollector.assertEquals(0, section2.size()); tikhomirov@609: errorCollector.assertEquals(0, section3.size()); tikhomirov@609: } tikhomirov@609: tikhomirov@609: @Test tikhomirov@609: public void testRepositoryConfig() throws Exception { tikhomirov@611: File repoLoc = RepoUtils.cloneRepoToTempLocation("log-1", "test-repocfg", false); tikhomirov@611: File hgrc = new File(repoLoc, ".hg/hgrc"); tikhomirov@611: String username = "John Q. Public "; tikhomirov@611: String path1_key = "hg4j.gc"; tikhomirov@611: String path1_value = "https://code.google.com/p/hg4j/"; tikhomirov@611: String ext1_key = "ext.one"; tikhomirov@611: String ext2_key = "ext.disabled"; // disabled tikhomirov@611: String ext3_key = "hgext.two"; // check if found by "two" key tikhomirov@611: String hgrcContent = String.format("#comment\n[ui]\nusername = %s\n\n[paths]\n%s = %s\ndefault=%3$s\n\n[extensions]\n%s = \n%s = !\n%s=\n", username, path1_key, path1_value, ext1_key, ext2_key, ext3_key); tikhomirov@611: RepoUtils.createFile(hgrc, hgrcContent); tikhomirov@611: // tikhomirov@611: HgRepository repo = new HgLookup().detect(repoLoc); tikhomirov@609: final HgRepoConfig cfg = repo.getConfiguration(); tikhomirov@611: assertNotNull(cfg.getPaths()); tikhomirov@611: assertNotNull(cfg.getExtensions()); tikhomirov@609: final Section dne = cfg.getSection("does-not-exist"); tikhomirov@611: assertNotNull(dne); tikhomirov@611: assertFalse(dne.exists()); tikhomirov@611: assertEquals(username, cfg.getSection("ui").getString("username", null)); tikhomirov@609: final PathsSection p = cfg.getPaths(); tikhomirov@611: assertTrue(p.getPathSymbolicNames().contains(path1_key)); tikhomirov@611: assertEquals(path1_value, p.getString(path1_key, null)); tikhomirov@611: assertTrue(p.hasDefault()); tikhomirov@611: assertEquals(path1_value, p.getDefault()); tikhomirov@611: assertFalse(p.hasDefault() ^ p.getDefault() != null); tikhomirov@611: assertFalse(p.hasDefaultPush() ^ p.getDefaultPush() != null); tikhomirov@611: final ExtensionsSection e = cfg.getExtensions(); tikhomirov@611: assertTrue(e.isEnabled(ext1_key)); tikhomirov@611: assertTrue(e.getString(ext2_key, null).length() > 0); tikhomirov@611: assertFalse(e.isEnabled(ext2_key)); tikhomirov@611: assertNotNull(e.getString(ext3_key, null)); tikhomirov@611: assertTrue(e.isEnabled(ext3_key.substring("hgext.".length()))); tikhomirov@611: // tikhomirov@611: assertEquals(username, new HgInternals(repo).getNextCommitUsername()); tikhomirov@609: } tikhomirov@609: }