/*******************************************************************************
* 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.targets.tools;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import de.innot.avreclipse.core.avrdude.AVRDudeException;
import de.innot.avreclipse.core.targets.IProgrammer;
import de.innot.avreclipse.core.targets.ITargetConfiguration;
import de.innot.avreclipse.core.targets.ITargetConfiguration.Result;
import de.innot.avreclipse.core.targets.ITargetConfiguration.ValidationResult;
import de.innot.avreclipse.core.targets.ITargetConfigurationWorkingCopy;
import de.innot.avreclipse.core.targets.TargetConfigurationManager;
import de.innot.avreclipse.core.targets.ToolManager;
/**
* @author Thomas Holland
* @since
*
*/
public class AVRDudeToolTest {
private AvrdudeTool avrdude;
private ITargetConfigurationWorkingCopy config;
@Before
public void setup() throws IOException {
ITargetConfiguration hc = TargetConfigurationManager.getDefault().createNewConfig();
config = TargetConfigurationManager.getDefault().getWorkingCopy(hc.getId());
avrdude = (AvrdudeTool) ToolManager.getDefault().getTool(config, AvrdudeTool.ID);
}
@After
public void tearDown() throws IOException {
// Remove the generated Hardware Configuration
TargetConfigurationManager.getDefault().deleteConfig(config.getId());
}
/**
* Test method for {@link de.innot.avreclipse.core.targets.tools.AvrdudeTool#getName()}.
*/
@Test
public void testBasics() {
assertEquals("AVRDude", avrdude.getName());
assertEquals(AvrdudeTool.ID, avrdude.getId());
}
/**
* Test method for
* {@link de.innot.avreclipse.core.targets.tools.AvrdudeTool#getCommand(de.innot.avreclipse.core.targets.ITargetConfiguration)}
* .
*
* @throws IOException
*/
@Test
public void testGetCommand() throws IOException {
// first check if default is returned for an unmodified hardware config
String cmd = avrdude.getCommand();
assertNotNull("Null command", cmd);
assertTrue("Empty command", cmd.length() > 0);
assertEquals("Wrong default command", "avrdude", cmd);
// Change the command attribute and check that it is propagated
config.setAttribute(AvrdudeTool.ATTR_CMD_NAME, "foobar");
assertEquals("Wrong command", "foobar", avrdude.getCommand());
}
/**
* Test method for {@link de.innot.avreclipse.core.targets.tools.AvrdudeTool#getDefaults()}.
*/
@Test
public void testGetAttributes() {
// Get the list and check that it contains all known attributes
String[] attrs = avrdude.getAttributes();
assertNotNull("Null defaults", attrs);
assertTrue("Empty defaults", attrs.length > 0);
List<String> attributeList = Arrays.asList(attrs);
assertTrue("Command attr missing", attributeList.contains(AvrdudeTool.ATTR_CMD_NAME));
assertTrue("UseConsole attr missing", attributeList.contains(AvrdudeTool.ATTR_USE_CONSOLE));
// Add other attributes once they have been implemented
}
/**
* Test method for
* {@link de.innot.avreclipse.core.targets.tools.AvrdudeTool#getVersion(de.innot.avreclipse.core.targets.ITargetConfiguration)}
* .
*
* @throws IOException
* @throws AVRDudeException
*/
@Test
public void testGetVersion() throws IOException, AVRDudeException {
// Use the default avrdude command (avrdude must be on the system path)
String version = avrdude.getVersion();
assertNotNull("Null version", version);
assertTrue("Empty version", version.length() > 0);
// Do this again to test the cache. The result of this can be seen in the EclEmma test
// coverage output.
version = avrdude.getVersion();
assertNotNull("Null version", version);
assertTrue("Empty version", version.length() > 0);
// Test with invalid command. This should throw an AVRDudeException
config.setAttribute(AvrdudeTool.ATTR_CMD_NAME, "invalidcommandname");
try {
version = avrdude.getVersion();
fail("No Exception thrown for invalid command name");
} catch (AVRDudeException ade) {
// Maybe check the correct reason here
}
}
/**
* Test method for
* {@link de.innot.avreclipse.core.targets.tools.AvrdudeTool#getMCUs(de.innot.avreclipse.core.targets.ITargetConfiguration)}
* .
*
* @throws IOException
* @throws AVRDudeException
*/
@Test
public void testGetMCUs() throws IOException, AVRDudeException {
// Use the default avrdude command (avrdude must be on the system path)
Set<String> allmcus = avrdude.getMCUs();
assertNotNull("Null MCU list", allmcus);
assertTrue("Empty MCU List", allmcus.size() > 0);
// Check a few entries
String[] testmcus = new String[] { "atxmega128a1", "atmega6450", "at90usb1287", "attiny84",
"attiny11" };
for (String mcu : testmcus) {
assertTrue("MCU List missing " + mcu, allmcus.contains(mcu));
}
// Test with invalid command. This should throw an AVRDudeException
config.setAttribute(AvrdudeTool.ATTR_CMD_NAME, "invalidcommandname");
try {
allmcus = avrdude.getMCUs();
fail("No Exception thrown for invalid command name");
} catch (AVRDudeException ade) {
// Maybe check the correct reason here
}
}
/**
* Test method for
* {@link de.innot.avreclipse.core.targets.tools.AvrdudeTool#getProgrammers(de.innot.avreclipse.core.targets.ITargetConfiguration)}
* .
*/
@Test
public void testGetProgrammers() {
// Check some currently implemented entries
String[] testproggers = new String[] { "c2n232i", "avrisp", "jtag1", "jtag2", "jtag2dw" };
for (String programmerid : testproggers) {
IProgrammer progger = config.getProgrammer(programmerid);
assertNotNull("Null programmer", progger);
assertEquals("Wrong progger id", programmerid, progger.getId());
assertTrue("Empty programmer description", progger.getDescription().length() > 0);
}
}
/**
* Test method for
* {@link de.innot.avreclipse.core.targets.tools.AvrdudeTool#getProgrammer(de.innot.avreclipse.core.targets.ITargetConfiguration, java.lang.String)}
* .
*
* @throws AVRDudeException
*/
@Test
public void testGetProgrammer() throws AVRDudeException {
// Use the default avrdude command (avrdude must be on the system path)
Set<String> allproggers = avrdude.getProgrammers();
assertNotNull("Null Programmers list", allproggers);
assertTrue("Empty Programmers List", allproggers.size() > 0);
// Check some currently implemented programmers
String[] testproggers = new String[] { "c2n232i", "avrisp", "jtag1", "jtag2", "jtag2dw" };
for (String progger : testproggers) {
assertTrue("Programmer missing " + progger, allproggers.contains(progger));
}
}
/**
* Test method for
* {@link de.innot.avreclipse.core.targets.tools.AvrdudeTool#validate(de.innot.avreclipse.core.targets.ITargetConfiguration, java.lang.String)}
* .
*/
@Test
public void testValidate() {
String[] attributes = avrdude.getAttributes();
// Generic test for all supported attributes
for (String attr : attributes) {
ValidationResult result = avrdude.validate(attr);
assertNotNull("Null ValidationResult for "+ attr, result);
}
// Test invalid attribute, should return Null
ValidationResult result = avrdude.validate("foobar");
assertEquals("Unexpected ValidationResult", Result.UNKNOWN_ATTRIBUTE, result.result);
// Specific tests
// As avrdude may or may not be installed for the test we can only check if validate()
// returns a valid ValidationResult
result = avrdude.validate(AvrdudeTool.ATTR_CMD_NAME);
assertNotNull("Null ValidationResult", result);
}
}