/*******************************************************************************
* Copyright (c) 2008, 2011 Thomas Holland (thomas@innot.de) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Thomas Holland - initial API and implementation
*******************************************************************************/
/**
*
*/
package de.innot.avreclipse.core.avrdude;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.junit.Test;
import org.osgi.service.prefs.BackingStoreException;
/**
* @author Thomas Holland
*
*/
public class ProgrammerConfigManagerTest {
/**
* Test method for
* {@link de.innot.avreclipse.core.avrdude.ProgrammerConfig#ProgrammerConfig(java.lang.String)}.
*
* @throws BackingStoreException
*/
@Test
public void testProgrammerConfig() throws BackingStoreException {
ProgrammerConfigManager manager = ProgrammerConfigManager.getDefault();
assertNotNull("Failed to init the Manager", manager);
// Create an Config with the default values
ProgrammerConfig config = manager.createNewConfig();
assertNotNull(config);
// Test default values
assertTrue(config.getDescription().length() > 1);
assertEquals("stk500v2", config.getProgrammer());
assertEquals("", config.getPort());
assertEquals("", config.getBaudrate());
assertEquals("", config.getExitspecResetline());
assertEquals("", config.getExitspecVCCline());
// Check that the config is not yet in the list of configs
Set<String> allids = manager.getAllConfigIDs();
assertEquals(0, allids.size());
// Fill the config with values
config.setName("testname");
config.setDescription("testdescription");
config.setProgrammer("c2n232i"); // last entry
config.setPort("/test/port");
config.setBaudrate("123456");
config.setExitspecResetline("reset");
config.setExitspecVCCline("novcc");
// And check that they are correct
assertEquals("testname", config.getName());
assertEquals("testdescription", config.getDescription());
assertEquals("c2n232i", config.getProgrammer());
assertEquals("/test/port", config.getPort());
assertEquals("123456", config.getBaudrate());
assertEquals("reset", config.getExitspecResetline());
assertEquals("novcc", config.getExitspecVCCline());
// Test Commandline arguments
List<String> expected = new ArrayList<String>();
expected.add("-cc2n232i");
expected.add("-P/test/port");
expected.add("-b123456");
expected.add("-Ereset,novcc");
List<String> actual = config.getArguments();
assertEquals(expected, actual);
// Test Save
manager.saveConfig(config);
// The new config should now be in the list of all configs
String configid = config.getId();
allids = manager.getAllConfigIDs();
assertEquals(1, allids.size());
assertTrue(allids.contains(configid));
// Test that the name is in the list of all names
Map<String, String> allnames = manager.getAllConfigNames();
assertNotNull(allnames);
assertEquals(1, allnames.size());
assertEquals("testname", allnames.get(configid));
// Test getConfig()
ProgrammerConfig config1 = manager.getConfig(configid);
assertNotNull(config1);
assertSame(config, config1);
// Test getConfigEditable()
ProgrammerConfig config2 = manager.getConfigEditable(config);
assertNotSame(config, config2);
assertEquals(configid, config2.getId());
assertEquals("testname", config2.getName());
assertEquals("testdescription", config2.getDescription());
assertEquals("c2n232i", config2.getProgrammer());
assertEquals("/test/port", config2.getPort());
assertEquals("123456", config2.getBaudrate());
assertEquals("reset", config2.getExitspecResetline());
assertEquals("novcc", config2.getExitspecVCCline());
// Change a few values, save them and test if they have propagated
config2.setName("changedname");
config2.setDescription("changeddesription");
config2.setProgrammer("avrisp"); // first entry
config2.setPort("/test/port/2");
config2.setBaudrate("654321");
config2.setExitspecResetline("noreset");
config2.setExitspecVCCline("vcc");
manager.saveConfig(config2);
// Because config2 is a clone of config, its values should
// have propagated to config when config2 was saved.
assertEquals("changedname", config.getName());
assertEquals("changeddesription", config.getDescription());
assertEquals("avrisp", config.getProgrammer());
assertEquals("/test/port/2", config.getPort());
assertEquals("654321", config.getBaudrate());
assertEquals("noreset", config.getExitspecResetline());
assertEquals("vcc", config.getExitspecVCCline());
// Test delete
manager.deleteConfig(config2);
// Once the clone config2 is deleted, reloading the id should return a
// null value.
config = manager.getConfig(configid);
assertNull("getConfig(removedId) did not return null", config);
}
}