/*
* Copyright (c) 2012 Chris Ellison, Mike Deats, Liron Yahdav, Ryan Neal,
* Brandon Sutherlin, Scott Griffin
*
* This software is released under the MIT license
* (http://www.opensource.org/licenses/mit-license.php)
*
* Created on Feb 7, 2012
*/
package edu.cmu.sv.arinc838.builder;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import static org.testng.Assert.assertEquals;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.mockito.InOrder;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.arinc.arinc838.SoftwareDescription;
import edu.cmu.sv.arinc838.binary.BdfFile;
import edu.cmu.sv.arinc838.dao.SoftwareDescriptionDao;
import edu.cmu.sv.arinc838.util.Converter;
import edu.cmu.sv.arinc838.validation.ReferenceData;
public class SoftwareDescriptionBuilderTest {
private SoftwareDescriptionDao first;
private SoftwareDescriptionBuilder builder;
@BeforeMethod
public void setup() {
first = new SoftwareDescriptionDao();
first.setSoftwarePartnumber(ReferenceData.SOFTWARE_PART_NUMBER_REFERENCE);
first.setSoftwareTypeDescription("description");
first.setSoftwareTypeId(Converter.hexToBytes("0000000A"));
builder = new SoftwareDescriptionBuilder();
}
@Test
public void testBuildCreatesProperJaxbObject() {
SoftwareDescription desc = builder.buildXml(first);
assertEquals(desc.getSoftwareTypeId(), first.getSoftwareTypeId());
assertEquals(desc.getSoftwareTypeDescription(), first.getSoftwareTypeDescription());
assertEquals(desc.getSoftwarePartnumber(), first.getSoftwarePartnumber());
}
@Test
public void testBuildBinary() throws FileNotFoundException, IOException {
BdfFile file = new BdfFile(File.createTempFile("tmp", "bin"));
int bytesWritten = builder.buildBinary(first, file);
// 2 + "MMMCC-SSSS-SSSS".length + 2 + "description".length + 0x0000000A
// length in bytes
// 17 + 13 + 4
assertEquals(bytesWritten, 34);
file.seek(0);
assertEquals(file.readStr64k(), first.getSoftwarePartnumber());
assertEquals(file.readStr64k(), first.getSoftwareTypeDescription());
byte[] typeId = new byte[4];
file.read(typeId);
assertEquals(typeId, first.getSoftwareTypeId());
file.close();
}
@Test
public void testBuildBinaryWritesSoftwareTypeDescription() throws IOException {
BdfFile file = mock(BdfFile.class);
InOrder order = inOrder(file);
builder.buildBinary(first, file);
order.verify(file).writeSoftwareDescriptionPointer();
order.verify(file).writeStr64k(first.getSoftwarePartnumber());
order.verify(file).writeStr64k(first.getSoftwareTypeDescription());
order.verify(file).writeHexbin32(first.getSoftwareTypeId());
order.verify(file).getFilePointer();
order.verifyNoMoreInteractions();
}
}