From 5cddaaed8e14d2fca7f8e09c6dd10401cc17e52d Mon Sep 17 00:00:00 2001 From: fjc40 Date: Thu, 20 Jul 2017 01:01:29 +1200 Subject: [PATCH] mock.app.App now tells mock.app.Event that the xml file strings are XMLFileType.Contents. Made network.MessageEncoders.RaceVisionByteEncoder methods static (they were effectively static already). shared.dataInput.XMLReader#readXMLFileToString(..) now throws an XMLReaderException if the file cannot be found. visualiser.Controllers.StartController assumed XML messages were resource paths instead of file contents - fixed. Testing: networking tests now work again. --- .../src/main/java/mock/app/App.java | 3 +- .../src/main/java/mock/app/Event.java | 53 ++-- .../RaceVisionByteEncoder.java | 14 +- .../java/shared/dataInput/BoatXMLReader.java | 8 +- .../java/shared/dataInput/RaceXMLReader.java | 6 +- .../shared/dataInput/RegattaXMLReader.java | 8 +- .../main/java/shared/dataInput/XMLReader.java | 5 + .../Controllers/StartController.java | 6 +- .../network/BinaryMessageDecoderTest.java | 46 ++-- .../BoatLocationDecoderTest.java | 8 +- .../CourseWindDecoderTest.java | 8 +- .../RaceStartStatusDecoderTest.java | 5 +- .../RaceStatusDecoderTest.java | 11 +- .../XMLMessageDecoderTest.java | 42 +-- .../AC35UnitConverterTest.java} | 9 +- .../{ => Utils}/ByteConverterTest.java | 4 +- .../java/network/XMLMessageEncoderTest.java | 71 +++-- .../shared/dataInput/BoatXMLReaderTest.java | 3 +- .../dataInput/RegattaXMLReaderTest.java | 3 +- .../shared/mockXML/boatXML/boatTest.xml | 251 ++++++++++++++++++ .../boatXML/insufficientInformation.xml | 249 +++++++++++++++++ .../mockXML/boatXML/invalidSourceID.xml | 251 ++++++++++++++++++ .../shared/mockXML/raceXML/raceTest.xml | 91 +++++++ .../shared/mockXML/regattaXML/regattaTest.xml | 20 ++ 24 files changed, 1032 insertions(+), 143 deletions(-) rename racevisionGame/src/test/java/network/{AC35UnitConverter.java => Utils/AC35UnitConverterTest.java} (71%) rename racevisionGame/src/test/java/network/{ => Utils}/ByteConverterTest.java (99%) create mode 100644 racevisionGame/src/test/resources/shared/mockXML/boatXML/boatTest.xml create mode 100644 racevisionGame/src/test/resources/shared/mockXML/boatXML/insufficientInformation.xml create mode 100644 racevisionGame/src/test/resources/shared/mockXML/boatXML/invalidSourceID.xml create mode 100644 racevisionGame/src/test/resources/shared/mockXML/raceXML/raceTest.xml create mode 100644 racevisionGame/src/test/resources/shared/mockXML/regattaXML/regattaTest.xml diff --git a/racevisionGame/src/main/java/mock/app/App.java b/racevisionGame/src/main/java/mock/app/App.java index ceb73a2a..06f628d5 100644 --- a/racevisionGame/src/main/java/mock/app/App.java +++ b/racevisionGame/src/main/java/mock/app/App.java @@ -9,6 +9,7 @@ import org.w3c.dom.Document; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import shared.dataInput.XMLReader; +import shared.enums.XMLFileType; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -38,7 +39,7 @@ public class App extends Application { String raceXML = XMLReader.readXMLFileToString("mock/mockXML/raceTest.xml", StandardCharsets.UTF_8); String boatXML = XMLReader.readXMLFileToString("mock/mockXML/boatTest.xml", StandardCharsets.UTF_8); - Event raceEvent = new Event(raceXML, regattaXML, boatXML, boatPolars); + Event raceEvent = new Event(raceXML, regattaXML, boatXML, XMLFileType.Contents, boatPolars); raceEvent.start(); } catch (Exception e) { diff --git a/racevisionGame/src/main/java/mock/app/Event.java b/racevisionGame/src/main/java/mock/app/Event.java index 2af2fe46..c69c9122 100644 --- a/racevisionGame/src/main/java/mock/app/Event.java +++ b/racevisionGame/src/main/java/mock/app/Event.java @@ -2,11 +2,7 @@ package mock.app; import mock.model.MockRace; import mock.model.Polars; -import network.Messages.Enums.MessageType; -import network.Messages.Enums.XMLMessageType; import network.Messages.LatestMessages; -import network.Messages.XMLMessage; -import org.xml.sax.SAXException; import shared.dataInput.*; import shared.enums.XMLFileType; import shared.exceptions.InvalidBoatDataException; @@ -15,9 +11,7 @@ import shared.exceptions.InvalidRegattaDataException; import shared.exceptions.XMLReaderException; import shared.model.Constants; -import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; -import java.text.ParseException; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; @@ -30,16 +24,31 @@ public class Event { private String raceXML; private String regattaXML; private String boatXML; + + private XMLFileType xmlFileType; + private Polars boatPolars; + private MockOutput mockOutput; private LatestMessages latestMessages; - public Event(String raceXML, String regattaXML, String boatXML, Polars boatPolars) { + /** + * Constructs an event, using various XML files. + * @param raceXML The race.xml file. + * @param regattaXML The regatta.xml file. + * @param boatXML The boat.xml file. + * @param type How to read the file - e.g., load as resource. + * @param boatPolars + */ + public Event(String raceXML, String regattaXML, String boatXML, XMLFileType type, Polars boatPolars) { this.raceXML = getRaceXMLAtCurrentTime(raceXML); this.boatXML = boatXML; this.regattaXML = regattaXML; + + this.xmlFileType = type; + this.boatPolars = boatPolars; this.latestMessages = new LatestMessages(); @@ -55,26 +64,26 @@ public class Event { } /** - * Sends the initial race data and then begins race simulation + * Sends the initial race data and then begins race simulation. + * @throws InvalidRaceDataException Thrown if the race xml file cannot be parsed. + * @throws XMLReaderException Thrown if any of the xml files cannot be parsed. + * @throws InvalidBoatDataException Thrown if the boat xml file cannot be parsed. + * @throws InvalidRegattaDataException Thrown if the regatta xml file cannot be parsed. */ - public void start() { - try { - sendXMLs(); + public void start() throws InvalidRaceDataException, XMLReaderException, InvalidBoatDataException, InvalidRegattaDataException { - //Parse the XML files into data sources. - RaceDataSource raceDataSource = new RaceXMLReader(this.raceXML, XMLFileType.ResourcePath); - BoatDataSource boatDataSource = new BoatXMLReader(this.boatXML, XMLFileType.ResourcePath); - RegattaDataSource regattaDataSource = new RegattaXMLReader(this.regattaXML, XMLFileType.ResourcePath); + sendXMLs(); - //Create and start race. - MockRace newRace = new MockRace(boatDataSource, raceDataSource, regattaDataSource, this.latestMessages, this.boatPolars, Constants.RaceTimeScale); + //Parse the XML files into data sources. + RaceDataSource raceDataSource = new RaceXMLReader(this.raceXML, this.xmlFileType); + BoatDataSource boatDataSource = new BoatXMLReader(this.boatXML, this.xmlFileType); + RegattaDataSource regattaDataSource = new RegattaXMLReader(this.regattaXML, this.xmlFileType); - new Thread(newRace).start(); + //Create and start race. + MockRace newRace = new MockRace(boatDataSource, raceDataSource, regattaDataSource, this.latestMessages, this.boatPolars, Constants.RaceTimeScale); + + new Thread(newRace).start(); - } catch (XMLReaderException | InvalidBoatDataException | InvalidRaceDataException | InvalidRegattaDataException e) { - e.printStackTrace(); - //TODO if this occurs, we should print and error and abort. - } } /** diff --git a/racevisionGame/src/main/java/network/MessageEncoders/RaceVisionByteEncoder.java b/racevisionGame/src/main/java/network/MessageEncoders/RaceVisionByteEncoder.java index 2e811d96..0808d16d 100644 --- a/racevisionGame/src/main/java/network/MessageEncoders/RaceVisionByteEncoder.java +++ b/racevisionGame/src/main/java/network/MessageEncoders/RaceVisionByteEncoder.java @@ -84,7 +84,7 @@ public class RaceVisionByteEncoder { return raceStatusMessage.array(); } - public byte[] displayTextMessage(RaceMessage[] message){ + public static byte[] displayTextMessage(RaceMessage[] message){ //ByteBuffer result = ByteBuffer.allocate(4 + numLines * 32); int messageVersionNumber = 0b1;//version number short ackNum = 0;//no clue what this does just a placeholder for 2 bytes. @@ -125,7 +125,7 @@ public class RaceVisionByteEncoder { return result.array(); } - public byte[] raceStartStatus(long time, short ack, long startTime, int raceID, char notification){ + public static byte[] raceStartStatus(long time, short ack, long startTime, int raceID, char notification){ int messageVersion = 0b1; byte[] timestamp = longToBytes(time, 6); byte[] ackNumber = intToBytes(ack, 2); @@ -144,7 +144,7 @@ public class RaceVisionByteEncoder { return result.array(); } - public byte[] yachtEventCode(long time, short acknowledgeNumber, int raceID, int destSourceID, int incidentID, + public static byte[] yachtEventCode(long time, short acknowledgeNumber, int raceID, int destSourceID, int incidentID, int eventID){ int messageVersion = 0b10; byte[] encodeTime = longToBytes(time, 6); @@ -165,7 +165,7 @@ public class RaceVisionByteEncoder { return result.array(); } - public byte[] chatterText(int messageType, String message){ + public static byte[] chatterText(int messageType, String message){ int messageVersion = 0b1; byte[] type = intToBytes(messageType, 1); byte[] text = message.getBytes(); @@ -268,7 +268,7 @@ public class RaceVisionByteEncoder { return result.array(); } - public byte[] markRounding(int time, int ackNumber, int raceID, int sourceID, int boatStatus, int roundingSide, int markType, int markID){ + public static byte[] markRounding(int time, int ackNumber, int raceID, int sourceID, int boatStatus, int roundingSide, int markType, int markID){ int messageVersionNumber = 0b1; byte[] byteTime = longToBytes(time, 6); byte[] byteAck = intToBytes(ackNumber, 2); @@ -292,7 +292,7 @@ public class RaceVisionByteEncoder { return result.array(); } - public byte[] courseWind(byte windID, ArrayList courseWinds){ + public static byte[] courseWind(byte windID, ArrayList courseWinds){ int messageVersionNumber = 0b1; byte byteWindID = windID; byte[] loopcount = intToBytes(courseWinds.size(), 1); @@ -313,7 +313,7 @@ public class RaceVisionByteEncoder { return result.array(); } - public byte[] averageWind(int time, int rawPeriod, int rawSampleSpeed, int period2, int speed2, int period3, int speed3, int period4, int speed4){ + public static byte[] averageWind(int time, int rawPeriod, int rawSampleSpeed, int period2, int speed2, int period3, int speed3, int period4, int speed4){ int messageVersionNumber = 0b1; byte[] byteTime = longToBytes(time,6); byte[] byteRawPeriod = intToBytes(rawPeriod, 2); diff --git a/racevisionGame/src/main/java/shared/dataInput/BoatXMLReader.java b/racevisionGame/src/main/java/shared/dataInput/BoatXMLReader.java index 925e3a0c..ba214617 100644 --- a/racevisionGame/src/main/java/shared/dataInput/BoatXMLReader.java +++ b/racevisionGame/src/main/java/shared/dataInput/BoatXMLReader.java @@ -30,15 +30,15 @@ public class BoatXMLReader extends XMLReader implements BoatDataSource { /** - * Constructor for Boat XML using a file read as a resource. + * Constructor for Boat XML using a file. * - * @param fileContents Contents of xml file. + * @param file The file to read. * @param type How to read the file - e.g., load as resource. * @throws XMLReaderException Thrown if the file cannot be parsed. * @throws InvalidBoatDataException Thrown if the file cannot be parsed correctly. */ - public BoatXMLReader(String fileContents, XMLFileType type) throws XMLReaderException, InvalidBoatDataException { - super(fileContents, type); + public BoatXMLReader(String file, XMLFileType type) throws XMLReaderException, InvalidBoatDataException { + super(file, type); //Attempt to read boat xml file. try { diff --git a/racevisionGame/src/main/java/shared/dataInput/RaceXMLReader.java b/racevisionGame/src/main/java/shared/dataInput/RaceXMLReader.java index 9f2aacad..7e61b3de 100644 --- a/racevisionGame/src/main/java/shared/dataInput/RaceXMLReader.java +++ b/racevisionGame/src/main/java/shared/dataInput/RaceXMLReader.java @@ -83,14 +83,14 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource { /** * Constructor for Streamed Race XML - * @param fileContents Contents of xml file. + * @param file The file to read. * @param type How to read the file - e.g., load as resource. * @throws XMLReaderException Thrown if an XML reader cannot be constructed for the given file. * @throws InvalidRaceDataException Thrown if the XML file is invalid in some way. */ - public RaceXMLReader(String fileContents, XMLFileType type) throws XMLReaderException, InvalidRaceDataException { + public RaceXMLReader(String file, XMLFileType type) throws XMLReaderException, InvalidRaceDataException { - super(fileContents, type); + super(file, type); //Attempt to read race xml file. diff --git a/racevisionGame/src/main/java/shared/dataInput/RegattaXMLReader.java b/racevisionGame/src/main/java/shared/dataInput/RegattaXMLReader.java index aafd85a3..08d4a034 100644 --- a/racevisionGame/src/main/java/shared/dataInput/RegattaXMLReader.java +++ b/racevisionGame/src/main/java/shared/dataInput/RegattaXMLReader.java @@ -65,15 +65,15 @@ public class RegattaXMLReader extends XMLReader implements RegattaDataSource { /** - * Constructor for Regatta XML using a file read as a resource. + * Constructor for Regatta XML using a file. * - * @param fileContents Contents of xml file. + * @param file The file. * @param type How to read the file - e.g., load as resource. * @throws XMLReaderException Thrown if the file cannot be parsed. * @throws InvalidRegattaDataException Thrown if the file cannot be parsed correctly. */ - public RegattaXMLReader(String fileContents, XMLFileType type) throws XMLReaderException, InvalidRegattaDataException { - super(fileContents, type); + public RegattaXMLReader(String file, XMLFileType type) throws XMLReaderException, InvalidRegattaDataException { + super(file, type); //Attempt to read boat xml file. try { diff --git a/racevisionGame/src/main/java/shared/dataInput/XMLReader.java b/racevisionGame/src/main/java/shared/dataInput/XMLReader.java index aad71240..04c6c1f7 100644 --- a/racevisionGame/src/main/java/shared/dataInput/XMLReader.java +++ b/racevisionGame/src/main/java/shared/dataInput/XMLReader.java @@ -173,6 +173,11 @@ public abstract class XMLReader { InputStream fileStream = XMLReader.class.getClassLoader().getResourceAsStream(path); + //Resource can't be found. + if (fileStream == null) { + throw new XMLReaderException("Could not open resource: " + path, new IOException()); + } + Document doc = XMLReader.parseInputStream(fileStream); doc.getDocumentElement().normalize(); diff --git a/racevisionGame/src/main/java/visualiser/Controllers/StartController.java b/racevisionGame/src/main/java/visualiser/Controllers/StartController.java index c69b498d..2735023e 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/StartController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/StartController.java @@ -116,9 +116,9 @@ public class StartController extends Controller implements Observer { private void startRace(LatestMessages latestMessages) throws XMLReaderException, InvalidRaceDataException, InvalidBoatDataException, InvalidRegattaDataException { //Create data sources from latest messages for the race. - RaceDataSource raceDataSource = new RaceXMLReader(latestMessages.getRaceXMLMessage().getXmlMessage(), XMLFileType.ResourcePath); - BoatDataSource boatDataSource = new BoatXMLReader(latestMessages.getBoatXMLMessage().getXmlMessage(), XMLFileType.ResourcePath); - RegattaDataSource regattaDataSource = new RegattaXMLReader(latestMessages.getRegattaXMLMessage().getXmlMessage(), XMLFileType.ResourcePath); + RaceDataSource raceDataSource = new RaceXMLReader(latestMessages.getRaceXMLMessage().getXmlMessage(), XMLFileType.Contents); + BoatDataSource boatDataSource = new BoatXMLReader(latestMessages.getBoatXMLMessage().getXmlMessage(), XMLFileType.Contents); + RegattaDataSource regattaDataSource = new RegattaXMLReader(latestMessages.getRegattaXMLMessage().getXmlMessage(), XMLFileType.Contents); //Create race. this.visualiserRace = new VisualiserRace(boatDataSource, raceDataSource, regattaDataSource, latestMessages, this.colors); diff --git a/racevisionGame/src/test/java/network/BinaryMessageDecoderTest.java b/racevisionGame/src/test/java/network/BinaryMessageDecoderTest.java index f9122e4c..7414d709 100644 --- a/racevisionGame/src/test/java/network/BinaryMessageDecoderTest.java +++ b/racevisionGame/src/test/java/network/BinaryMessageDecoderTest.java @@ -1,17 +1,24 @@ package network; +import network.Exceptions.InvalidMessageException; +import network.MessageDecoders.XMLMessageDecoder; +import network.MessageEncoders.RaceVisionByteEncoder; +import network.Messages.AC35Data; +import network.Messages.Enums.MessageType; +import network.Messages.Enums.XMLMessageType; +import network.Messages.XMLMessage; import org.junit.Assert; import org.junit.Test; -import seng302.Networking.Exceptions.InvalidMessageException; -import seng302.Networking.MessageDecoders.XMLMessageDecoder; -import seng302.Networking.MessageEncoders.XMLMessageEncoder; -import seng302.Networking.Messages.AC35Data; -import seng302.Networking.Messages.Enums.MessageType; -import seng302.Networking.Messages.XMLMessage; +import shared.dataInput.XMLReader; +import shared.exceptions.XMLReaderException; +import javax.xml.transform.TransformerException; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; + +import static org.junit.Assert.fail; /** * Created by hba56 on 21/04/17. @@ -20,18 +27,19 @@ public class BinaryMessageDecoderTest { @Test public void decodeTest(){ try{ - StringBuilder xmlString; - BufferedReader br = new BufferedReader(new InputStreamReader( - this.getClass().getResourceAsStream(("../../raceXML/Regatta.xml")))); - String line; - xmlString = new StringBuilder(); - while((line=br.readLine())!= null){ - xmlString.append(line.trim()); - } + String xmlString = XMLReader.readXMLFileToString("network/raceXML/Regatta.xml", StandardCharsets.UTF_8); + long time = System.currentTimeMillis(); - XMLMessageEncoder testEncoder = new XMLMessageEncoder((short)1, time, (byte)7, (short)1, (short)xmlString.length(), xmlString.toString()); - byte[] encodedMessage = testEncoder.encode(); + XMLMessage xmlMessagePre = new XMLMessage( + (byte)1, + 1, + time, + XMLMessageType.REGATTA, + (short)1, + xmlString ); + + byte[] encodedMessage = RaceVisionByteEncoder.xmlMessage(xmlMessagePre); BinaryMessageEncoder testMessage = new BinaryMessageEncoder(MessageType.XMLMESSAGE, time, 1, (short)encodedMessage.length, encodedMessage); @@ -67,7 +75,7 @@ public class BinaryMessageDecoderTest { Assert.assertEquals((byte)1, decoderXML.getMessageVersionNumber()); Assert.assertEquals((short)1, decoderXML.getAckNumber()); Assert.assertEquals(time, decoderXML.getTimeStamp()); - Assert.assertEquals((byte)7, decoderXML.getXmlMsgSubType()); + Assert.assertEquals(XMLMessageType.REGATTA, decoderXML.getXmlMsgSubType()); Assert.assertEquals((short)1, decoderXML.getSequenceNumber()); Assert.assertEquals((short)xmlString.length(), decoderXML.getXmlMsgLength()); @@ -79,8 +87,8 @@ public class BinaryMessageDecoderTest { // } // Assert.assertEquals(xmlString.toString(), contents); - }catch (IOException e){ - Assert.assertFalse(e.getMessage(), true); + } catch (XMLReaderException | TransformerException e){ + fail("couldn't read file" + e.getMessage()); } } } diff --git a/racevisionGame/src/test/java/network/MessageDecoders/BoatLocationDecoderTest.java b/racevisionGame/src/test/java/network/MessageDecoders/BoatLocationDecoderTest.java index 96068417..2f269257 100644 --- a/racevisionGame/src/test/java/network/MessageDecoders/BoatLocationDecoderTest.java +++ b/racevisionGame/src/test/java/network/MessageDecoders/BoatLocationDecoderTest.java @@ -1,9 +1,9 @@ package network.MessageDecoders; +import network.MessageEncoders.RaceVisionByteEncoder; +import network.Messages.BoatLocation; import org.junit.Assert; import org.junit.Test; -import seng302.Networking.MessageEncoders.RaceVisionByteEncoder; -import seng302.Networking.Messages.BoatLocation; /** @@ -18,8 +18,8 @@ public class BoatLocationDecoderTest { (short) 6, (short) 7, 8, 9, 10, 11, (short) 12, 13, 14 , (short) 15, 16, 17, (short) 18); - RaceVisionByteEncoder raceVisionByteEncoder = new RaceVisionByteEncoder(); - byte [] testEncodedMessage = raceVisionByteEncoder.boatLocation(testMessage); + + byte [] testEncodedMessage = RaceVisionByteEncoder.boatLocation(testMessage); BoatLocationDecoder testDecoder = new BoatLocationDecoder(testEncodedMessage); BoatLocation decodedTest = testDecoder.getMessage(); diff --git a/racevisionGame/src/test/java/network/MessageDecoders/CourseWindDecoderTest.java b/racevisionGame/src/test/java/network/MessageDecoders/CourseWindDecoderTest.java index a447b26a..53793b81 100644 --- a/racevisionGame/src/test/java/network/MessageDecoders/CourseWindDecoderTest.java +++ b/racevisionGame/src/test/java/network/MessageDecoders/CourseWindDecoderTest.java @@ -1,9 +1,9 @@ package network.MessageDecoders; +import network.MessageEncoders.RaceVisionByteEncoder; +import network.Messages.CourseWind; import org.junit.Assert; import org.junit.Test; -import seng302.Networking.MessageEncoders.RaceVisionByteEncoder; -import seng302.Networking.Messages.CourseWind; import java.util.ArrayList; @@ -29,9 +29,7 @@ public class CourseWindDecoderTest { testCourseWinds.add(testCourseWind2); - RaceVisionByteEncoder raceVisionByteEncoder = new RaceVisionByteEncoder(); - - byte[] testEncodedCourseWind = raceVisionByteEncoder.courseWind((byte) 1, testCourseWinds); + byte[] testEncodedCourseWind = RaceVisionByteEncoder.courseWind((byte) 1, testCourseWinds); CourseWindDecoder testDecoder = new CourseWindDecoder(testEncodedCourseWind); diff --git a/racevisionGame/src/test/java/network/MessageDecoders/RaceStartStatusDecoderTest.java b/racevisionGame/src/test/java/network/MessageDecoders/RaceStartStatusDecoderTest.java index 9e43a010..ce2fe475 100644 --- a/racevisionGame/src/test/java/network/MessageDecoders/RaceStartStatusDecoderTest.java +++ b/racevisionGame/src/test/java/network/MessageDecoders/RaceStartStatusDecoderTest.java @@ -1,8 +1,8 @@ package network.MessageDecoders; +import network.MessageEncoders.RaceVisionByteEncoder; import org.junit.Assert; import org.junit.Test; -import seng302.Networking.MessageEncoders.RaceVisionByteEncoder; /** * Created by hba56 on 23/04/17. @@ -12,9 +12,8 @@ public class RaceStartStatusDecoderTest { public void getByteArrayTest(){ long time = System.currentTimeMillis(); - RaceVisionByteEncoder raceVisionByteEncoder = new RaceVisionByteEncoder(); long time2 = System.currentTimeMillis(); - byte[] encodedRaceStartStatus = raceVisionByteEncoder.raceStartStatus(time, (short)1, + byte[] encodedRaceStartStatus = RaceVisionByteEncoder.raceStartStatus(time, (short)1, time2, 2, (char)3); RaceStartStatusDecoder testDecoder = new RaceStartStatusDecoder(encodedRaceStartStatus); diff --git a/racevisionGame/src/test/java/network/MessageDecoders/RaceStatusDecoderTest.java b/racevisionGame/src/test/java/network/MessageDecoders/RaceStatusDecoderTest.java index d9ea0481..a5600446 100644 --- a/racevisionGame/src/test/java/network/MessageDecoders/RaceStatusDecoderTest.java +++ b/racevisionGame/src/test/java/network/MessageDecoders/RaceStatusDecoderTest.java @@ -1,12 +1,13 @@ package network.MessageDecoders; +import network.MessageEncoders.RaceVisionByteEncoder; +import network.Messages.BoatStatus; +import network.Messages.RaceStatus; import org.junit.Assert; import org.junit.Test; -import seng302.Networking.MessageEncoders.RaceVisionByteEncoder; -import seng302.Networking.Messages.BoatStatus; -import seng302.Networking.Messages.RaceStatus; import java.util.ArrayList; +import java.util.List; /** * Created by hba56 on 23/04/17. @@ -36,12 +37,12 @@ public class RaceStatusDecoderTest { BoatStatus boatStatus2 = new BoatStatus(boat2SourceID, boat2Status, boat2LegNumber, boat2PenaltiesAwarded, boat2PenaltiesServed, boat2TimeAtNextMark, boat2TimeAtFinish); int raceID = 585; - int raceStatus = 3; + byte raceStatus = 3; long raceStartTime = time - (1000 * 31); int windDirection = 2341; int windSpeed = 10201; int raceType = 1; - ArrayList boatStatuses = new ArrayList<>(2); + List boatStatuses = new ArrayList<>(2); boatStatuses.add(boatStatus1); boatStatuses.add(boatStatus2); diff --git a/racevisionGame/src/test/java/network/MessageDecoders/XMLMessageDecoderTest.java b/racevisionGame/src/test/java/network/MessageDecoders/XMLMessageDecoderTest.java index 35883de9..b0d0eee3 100644 --- a/racevisionGame/src/test/java/network/MessageDecoders/XMLMessageDecoderTest.java +++ b/racevisionGame/src/test/java/network/MessageDecoders/XMLMessageDecoderTest.java @@ -1,12 +1,17 @@ package network.MessageDecoders; +import network.MessageEncoders.RaceVisionByteEncoder; +import network.Messages.Enums.XMLMessageType; +import network.Messages.XMLMessage; import org.junit.Assert; import org.junit.Test; -import seng302.Networking.MessageEncoders.XMLMessageEncoder; +import shared.dataInput.XMLReader; +import shared.exceptions.XMLReaderException; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; +import javax.xml.transform.TransformerException; +import java.nio.charset.StandardCharsets; + +import static org.junit.Assert.fail; /** * Created by hba56 on 20/04/17. @@ -15,18 +20,21 @@ public class XMLMessageDecoderTest { @Test public void getByteArrayTest(){ try{ - StringBuilder xmlString; - BufferedReader br = new BufferedReader(new InputStreamReader( - this.getClass().getResourceAsStream(("../../../raceXML/Regatta.xml")))); - String line; - xmlString = new StringBuilder(); - while((line=br.readLine())!= null){ - xmlString.append(line.trim()); - } + String xmlString = XMLReader.readXMLFileToString("network/raceXML/Regatta.xml", StandardCharsets.UTF_8); + long time = System.currentTimeMillis(); - XMLMessageEncoder testEncoder = new XMLMessageEncoder((short)1, time, (byte)7, (short)1, (short)xmlString.length(), xmlString.toString()); - byte[] encodedXML = testEncoder.encode(); + XMLMessage message = new XMLMessage( + (byte)1, + 1, + time, + XMLMessageType.REGATTA, + (short)1, + xmlString ); + + byte[] encodedXML = RaceVisionByteEncoder.xmlMessage(message); + + XMLMessageDecoder decoderXML = new XMLMessageDecoder(encodedXML); decoderXML.decode(); @@ -35,12 +43,12 @@ public class XMLMessageDecoderTest { Assert.assertEquals((byte)1, decoderXML.getMessageVersionNumber()); Assert.assertEquals((short)1, decoderXML.getAckNumber()); Assert.assertEquals(time, decoderXML.getTimeStamp()); - Assert.assertEquals((byte)7, decoderXML.getXmlMsgSubType()); + Assert.assertEquals(XMLMessageType.REGATTA, decoderXML.getXmlMsgSubType()); Assert.assertEquals((short)1, decoderXML.getSequenceNumber()); Assert.assertEquals((short)xmlString.length(), decoderXML.getXmlMsgLength()); - }catch (IOException e){ - e.printStackTrace(); + } catch (XMLReaderException | TransformerException e){ + fail("couldn't read file" + e.getMessage()); } } } diff --git a/racevisionGame/src/test/java/network/AC35UnitConverter.java b/racevisionGame/src/test/java/network/Utils/AC35UnitConverterTest.java similarity index 71% rename from racevisionGame/src/test/java/network/AC35UnitConverter.java rename to racevisionGame/src/test/java/network/Utils/AC35UnitConverterTest.java index d6941c5e..24fc2be2 100644 --- a/racevisionGame/src/test/java/network/AC35UnitConverter.java +++ b/racevisionGame/src/test/java/network/Utils/AC35UnitConverterTest.java @@ -1,14 +1,17 @@ -package network; +package network.Utils; import org.junit.Test; +import static network.Utils.AC35UnitConverter.convertGPS; +import static network.Utils.AC35UnitConverter.convertGPSToInt; +import static network.Utils.AC35UnitConverter.convertHeading; +import static network.Utils.AC35UnitConverter.convertTrueWindAngle; import static org.junit.Assert.assertTrue; -import static seng302.Networking.Utils.AC35UnitConverter.*; /** * Created by fwy13 on 4/05/17. */ -public class AC35UnitConverter { +public class AC35UnitConverterTest { @Test public void testConvertGPS(){ diff --git a/racevisionGame/src/test/java/network/ByteConverterTest.java b/racevisionGame/src/test/java/network/Utils/ByteConverterTest.java similarity index 99% rename from racevisionGame/src/test/java/network/ByteConverterTest.java rename to racevisionGame/src/test/java/network/Utils/ByteConverterTest.java index 9c64fea9..32ffc6ee 100644 --- a/racevisionGame/src/test/java/network/ByteConverterTest.java +++ b/racevisionGame/src/test/java/network/Utils/ByteConverterTest.java @@ -1,7 +1,7 @@ -package network; +package network.Utils; +import network.Utils.ByteConverter; import org.junit.Test; -import seng302.Networking.Utils.ByteConverter; import java.nio.ByteOrder; diff --git a/racevisionGame/src/test/java/network/XMLMessageEncoderTest.java b/racevisionGame/src/test/java/network/XMLMessageEncoderTest.java index 67855bf3..44a99997 100644 --- a/racevisionGame/src/test/java/network/XMLMessageEncoderTest.java +++ b/racevisionGame/src/test/java/network/XMLMessageEncoderTest.java @@ -1,57 +1,50 @@ package network; +import network.MessageEncoders.RaceVisionByteEncoder; +import network.Messages.Enums.XMLMessageType; +import network.Messages.XMLMessage; import org.junit.Assert; import org.junit.Test; -import seng302.Networking.MessageEncoders.XMLMessageEncoder; +import shared.dataInput.XMLReader; +import shared.exceptions.XMLReaderException; +import javax.xml.transform.TransformerException; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; + +import static org.junit.Assert.fail; /** * Created by hba56 on 19/04/17. */ public class XMLMessageEncoderTest { @Test - public void getByteArrayTest(){ - StringBuilder xmlString; - try{ - BufferedReader br = new BufferedReader(new InputStreamReader( - this.getClass().getResourceAsStream(("../../raceXML/Regatta.xml")))); - String line; - xmlString = new StringBuilder(); - while((line=br.readLine())!= null){ - xmlString.append(line.trim()); - } - XMLMessageEncoder testEncoder = new XMLMessageEncoder((short)1, System.currentTimeMillis(), (byte)7, (short)1, (short)xmlString.length(), xmlString.toString()); - - byte[] encodedXML = testEncoder.encode(); - - //1 + 2 + 6 + 1 + 2 + 2 + 374 - Assert.assertEquals(388, encodedXML.length); - }catch (IOException e){ - e.printStackTrace(); - } - } + public void getByteArrayTest() { + try { - @Test - public void getByteArrayNullTest(){ - StringBuilder xmlString; - try{ - BufferedReader br = new BufferedReader(new InputStreamReader( - this.getClass().getResourceAsStream(("../../raceXML/Regatta.xml")))); - String line; - xmlString = new StringBuilder(); - while((line=br.readLine())!= null){ - xmlString.append(line.trim()); - } - XMLMessageEncoder testEncoder = new XMLMessageEncoder((short)1, System.currentTimeMillis(), (byte)7, (short)1, (short)1, xmlString.toString()); - - byte[] encodedXML = testEncoder.encode(); - - Assert.assertEquals(null, encodedXML); - }catch (IOException e){ - e.printStackTrace(); + String xmlString = XMLReader.readXMLFileToString("network/raceXML/Regatta.xml", StandardCharsets.UTF_8); + + + XMLMessage message = new XMLMessage( + (byte)1, + 1, + System.currentTimeMillis(), + XMLMessageType.REGATTA, + (short)1, + xmlString ); + + int xmlMessageLength = xmlString.getBytes().length; + + byte[] encodedXML = RaceVisionByteEncoder.xmlMessage(message); + + //1 + 2 + 6 + 1 + 2 + 2 + xml.byteLength + Assert.assertEquals(14 + xmlMessageLength, encodedXML.length); + + } catch (XMLReaderException | TransformerException e){ + fail("couldn't read file" + e.getMessage()); } } + } diff --git a/racevisionGame/src/test/java/shared/dataInput/BoatXMLReaderTest.java b/racevisionGame/src/test/java/shared/dataInput/BoatXMLReaderTest.java index 1ea2eefe..19370be0 100644 --- a/racevisionGame/src/test/java/shared/dataInput/BoatXMLReaderTest.java +++ b/racevisionGame/src/test/java/shared/dataInput/BoatXMLReaderTest.java @@ -4,6 +4,7 @@ package shared.dataInput; import org.junit.Before; import org.junit.Test; import org.xml.sax.SAXException; +import shared.enums.XMLFileType; import shared.exceptions.InvalidBoatDataException; import shared.exceptions.XMLReaderException; import shared.model.Boat; @@ -46,7 +47,7 @@ public class BoatXMLReaderTest { try { - boatData = new BoatXMLReader(boatXMLString); + boatData = new BoatXMLReader(boatXMLString, XMLFileType.Contents); boats = new ArrayList<>(boatData.getBoats().values()); marks = new ArrayList<>(boatData.getMarkerBoats().values()); diff --git a/racevisionGame/src/test/java/shared/dataInput/RegattaXMLReaderTest.java b/racevisionGame/src/test/java/shared/dataInput/RegattaXMLReaderTest.java index 1ffc1c4a..ad9bcd95 100644 --- a/racevisionGame/src/test/java/shared/dataInput/RegattaXMLReaderTest.java +++ b/racevisionGame/src/test/java/shared/dataInput/RegattaXMLReaderTest.java @@ -2,6 +2,7 @@ package shared.dataInput; import org.junit.Before; import org.junit.Test; +import shared.enums.XMLFileType; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; @@ -16,7 +17,7 @@ public class RegattaXMLReaderTest { @Before public void findFile() { try { - regatta = new RegattaXMLReader("mockXML/regattaXML/regattaTest.xml"); + regatta = new RegattaXMLReader("shared/mockXML/regattaXML/regattaTest.xml", XMLFileType.ResourcePath); } catch (Exception e) { fail("Cannot find mockXML/regattaXML/regattaTest.xml in the resources folder"); } diff --git a/racevisionGame/src/test/resources/shared/mockXML/boatXML/boatTest.xml b/racevisionGame/src/test/resources/shared/mockXML/boatXML/boatTest.xml new file mode 100644 index 00000000..51f788b0 --- /dev/null +++ b/racevisionGame/src/test/resources/shared/mockXML/boatXML/boatTest.xml @@ -0,0 +1,251 @@ + + + + + 2012-05-17T07:49:40+0200 + + 12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/racevisionGame/src/test/resources/shared/mockXML/boatXML/insufficientInformation.xml b/racevisionGame/src/test/resources/shared/mockXML/boatXML/insufficientInformation.xml new file mode 100644 index 00000000..a821565b --- /dev/null +++ b/racevisionGame/src/test/resources/shared/mockXML/boatXML/insufficientInformation.xml @@ -0,0 +1,249 @@ + + + + + 2012-05-17T07:49:40+0200 + + 12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/racevisionGame/src/test/resources/shared/mockXML/boatXML/invalidSourceID.xml b/racevisionGame/src/test/resources/shared/mockXML/boatXML/invalidSourceID.xml new file mode 100644 index 00000000..5c61eec5 --- /dev/null +++ b/racevisionGame/src/test/resources/shared/mockXML/boatXML/invalidSourceID.xml @@ -0,0 +1,251 @@ + + + + + 2012-05-17T07:49:40+0200 + + 12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/racevisionGame/src/test/resources/shared/mockXML/raceXML/raceTest.xml b/racevisionGame/src/test/resources/shared/mockXML/raceXML/raceTest.xml new file mode 100644 index 00000000..1711e196 --- /dev/null +++ b/racevisionGame/src/test/resources/shared/mockXML/raceXML/raceTest.xml @@ -0,0 +1,91 @@ + + + + + 11080703 + + Match + + 2011-08-06T13:25:00-0000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/racevisionGame/src/test/resources/shared/mockXML/regattaXML/regattaTest.xml b/racevisionGame/src/test/resources/shared/mockXML/regattaXML/regattaTest.xml new file mode 100644 index 00000000..9ec88ccc --- /dev/null +++ b/racevisionGame/src/test/resources/shared/mockXML/regattaXML/regattaTest.xml @@ -0,0 +1,20 @@ + + + + 3 + + New Zealand Test + + North Head + + -36.82791529 + + 174.81218919 + + 0.00 + + 12 + + 14.1 + + \ No newline at end of file