/**
* 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.Test;
/**
* A test case for the {@link BufferedConfigurationExplorer} class.
* @author Nicolas Rinaudo
*/
public class BufferedConfigurationExplorerTest extends ConfigurationExplorerTest {
// - Helper methods ------------------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------------------------------
/**
* Returns an instance of {@link BufferedConfigurationExplorer}.
* @return an instance of {@link BufferedConfigurationExplorer}.
*/
@Override
protected ConfigurationExplorer getExplorer() {
return new BufferedConfigurationExplorer(conf.getRoot());
}
/**
* Backtracks through the section history and makes sure it contains the correct values.
*/
private void backtrack(BufferedConfigurationExplorer explorer, int depth) {
for(int i = depth; i > 0; i--) {
assert explorer.hasSections();
assert (VARIABLE_VALUE + i).equals(explorer.popSection().getVariable(VARIABLE_NAME + i));
}
assert !explorer.hasSections();
}
// - Test code -----------------------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------------------------------
/**
* Tests path bufferisation when the requested sections are found.
*/
@Test
public void testSectionFoundBuffer() {
BufferedConfigurationExplorer explorer;
for(int i = 0; i < DEPTH; i++) {
moveTo(explorer = (BufferedConfigurationExplorer)getExplorer(), i);
backtrack(explorer, i);
}
}
/**
* Tests path bufferisation when the requested sections are not found.
*/
@Test
public void testSectionNotFoundBuffer() {
BufferedConfigurationExplorer explorer;
for(int i = 0; i < DEPTH; i++) {
moveTo(explorer = (BufferedConfigurationExplorer)getExplorer(), i);
// Makes sure that a failed moveTo call doesn't corrupt section history.
assert !explorer.moveTo(FAKE_SECTION + i, false);
backtrack(explorer, i);
}
}
/**
* Tests path bufferisation when the requested sections are not found but created.
*/
@Test
public void testSectionNotFoundAndCreateBuffer() {
BufferedConfigurationExplorer explorer;
for(int i = 0; i < DEPTH; i++) {
moveTo(explorer = (BufferedConfigurationExplorer)getExplorer(), i);
// Creates the section, makes sure it was created and takes it off
// the section stack.
assert explorer.moveTo(FAKE_SECTION + i, true);
assert explorer.hasSections();
assert explorer.popSection() != null;
// Makes sure backtracking through history works.
backtrack(explorer, i);
}
}
}