/** * This file is part of muCommander, http://www.mucommander.com * Copyright (C) 2002-2016 Maxence Bernard * * muCommander is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * muCommander 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.mucommander.commons.conf; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; /** * A test case for the {@link ConfigurationExplorer} class. * @author Nicolas Rinaudo */ public class ConfigurationExplorerTest { // - Test constants ------------------------------------------------------------------------------------------------ // ----------------------------------------------------------------------------------------------------------------- /** Root name of test sections. */ protected static final String SECTION_NAME = "section"; /** Root name of test variables. */ protected static final String VARIABLE_NAME = "variable"; /** Root name of test values. */ protected static final String VARIABLE_VALUE = "value"; /** Name for non-existing sections. */ protected static final String FAKE_SECTION = "fake"; /** Depth of the tests. */ protected static final int DEPTH = 4; // - Instance variables -------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------------------------- /** Configuration used for tests. */ protected Configuration conf; // - Initialisation ------------------------------------------------------------------------------------------------ // ----------------------------------------------------------------------------------------------------------------- /** * Fills the configuration instance with test values. */ @BeforeMethod public void setUp() { StringBuilder buffer; buffer = new StringBuilder(); conf = new Configuration(); for(int i = 0; i < DEPTH; i++) { conf.setVariable(buffer.toString() + VARIABLE_NAME + i, VARIABLE_VALUE + i); buffer.append(SECTION_NAME); buffer.append(i); buffer.append('.'); } } // - Tests --------------------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------------------------- /** * Returns a configuration explorer on the test section. * @return a configuration explorer on the test section. */ protected ConfigurationExplorer getExplorer() { return new ConfigurationExplorer(conf.getRoot()); } /** * Moves to the specified depth. * @param explorer explorer to use when moving to the specified depth. * @param depth depth in the configuration tree at which to move. * @return section that was found at the specified depth. */ protected ConfigurationSection moveTo(ConfigurationExplorer explorer, int depth) { ConfigurationSection section; section = conf.getRoot(); for(int i = 0; i < depth; i++) { assert explorer.moveTo(SECTION_NAME + i, false); section = explorer.getSection(); } return section; } /** * Tests the {@link ConfigurationExplorer#moveTo(String,boolean)} method. */ private void assertSectionNotFound(boolean create) { ConfigurationExplorer explorer; ConfigurationSection section; // Checks what happens when sections are not found and create is set to false. for(int i = 0; i < DEPTH; i++) { section = moveTo(explorer = getExplorer(), i); // Makes sure the 'fake' section doesn't exist. assert !explorer.moveTo(FAKE_SECTION + i, false); if(create) { // Tries to create the section and makes sure the explorer // did move to it. assert explorer.moveTo(FAKE_SECTION + i, true); assert section.getSection(FAKE_SECTION + i).equals(explorer.getSection()); } else // Makes sure the explorer didn't change section. assert explorer.getSection().equals(section); } } /** * Tests configuration navigation to non-existing sections (without section creation). */ @Test public void testSectionNotFoundWithoutCreate() { assertSectionNotFound(false);} /** * Tests configuration navigation to non-existing sections (with section creation). */ @Test public void testSectionNotFoundWithCreate() { assertSectionNotFound(true);} /** * Test configuration navigation to existing sections. */ @Test public void testSectionFound() { ConfigurationExplorer explorer; for(int i = 0; i < DEPTH; i++) { moveTo(explorer = getExplorer(), i); assert (VARIABLE_VALUE + i).equals(explorer.getSection().getVariable(VARIABLE_NAME + i)); } } }