123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- //
- // MAVLinkTests.swift
- // MAVLinkTests
- //
- // Created by Max Odnovolyk on 10/6/16.
- // Copyright © 2016 Build Apps. All rights reserved.
- //
- import Foundation
- import XCTest
- @testable import MAVLink
- class MAVLinkTests: XCTestCase {
- override func setUp() {
- super.setUp()
-
- continueAfterFailure = false
- }
-
- // MARK: - Parsing tests
-
- func testParseDidParseMessageThatStartsRightAfterCorruptedMessageIdByte() {
- let corruptedByte = UInt8(0xC7)
-
- var data = Data(testHeartbeatData.prefix(upTo: 5))
- data.append(corruptedByte)
- data.append(testStatustextData)
- var callsCount = 0
-
- let delegate = Delegate(didParse: { message, _, _, _ in
- XCTAssert(message is Statustext, "Expects to get instance of Statustext from provided data")
-
- callsCount += 1
- })
-
- let mavLink = MAVLink()
- mavLink.delegate = delegate
- mavLink.parse(data: data, channel: 0)
-
- XCTAssert(callsCount == 1, "MAVLink instance should parse exactly one message from provided data")
- }
-
- func testParseDidParseMessageThatStartsRightAfterCorruptedCRCByte() {
- let corruptedByte = UInt8(0x00)
-
- var data = testHeartbeatData
- data.removeLast(2)
- data.append(corruptedByte)
- data.append(testStatustextData)
-
- var callsCount = 0
-
- let delegate = Delegate(didParse: { message, _, _, _ in
- XCTAssert(message is Statustext, "Expects to get instance of Statustext from provided data")
-
- callsCount += 1
- })
-
- let mavLink = MAVLink()
- mavLink.delegate = delegate
- mavLink.parse(data: data, channel: 0)
-
- XCTAssert(callsCount == 1, "MAVLink instance should parse exactly one message from provided data")
- }
-
- // MARK: - Dispatching tests
-
- func testDispatchDidPutProperMessageId() {
- var callsCount = 0
-
- let delegate = Delegate(didFinalize: { _, _, data, _, _ in
- XCTAssert(data[5] == Heartbeat.id, "Sixth byte of MAVLink packet should be message id (in this specific case \(Heartbeat.id))")
-
- callsCount += 1
- })
-
- let mavLink = MAVLink()
- mavLink.delegate = delegate
- try! mavLink.dispatch(message: testHeartbeatMessage, systemId: 0, componentId: 0, channel: 0)
-
- XCTAssert(callsCount == 1, "MAVLink instance should return exactly one finalized packet from provided message")
- }
-
- func testDispatchDidPutProperSystemId() {
- var callsCount = 0
- let systemId = UInt8(0xFF)
-
- let delegate = Delegate(didFinalize: { _, _, data, _, _ in
- XCTAssert(data[3] == systemId, "Fourth byte of MAVLink packet should be system id (\(systemId))")
-
- callsCount += 1
- })
-
- let mavLink = MAVLink()
- mavLink.delegate = delegate
- try! mavLink.dispatch(message: testHeartbeatMessage, systemId: systemId, componentId: 0, channel: 0)
-
- XCTAssert(callsCount == 1, "MAVLink instance should return exactly one finalized packet from provided message")
- }
-
- func testDispatchDidPutProperComponentId() {
- var callsCount = 0
- let componentId = UInt8(0xFF)
-
- let delegate = Delegate(didFinalize: { _, _, data, _, _ in
- XCTAssert(data[4] == componentId, "Fifth byte of generated MAVLink packet should contain component id (\(componentId))")
-
- callsCount += 1
- })
-
- let mavLink = MAVLink()
- mavLink.delegate = delegate
- try! mavLink.dispatch(message: testHeartbeatMessage, systemId: 0, componentId: componentId, channel: 0)
-
- XCTAssert(callsCount == 1, "MAVLink instance should return exactly one finalized packet from provided message")
- }
-
- func testDispatchDidPutProperCRC() {
- var callsCount = 0
-
- let delegate = Delegate(didFinalize: { [unowned self] _, _, data, _, _ in
- let expectedData = self.testHeartbeatData
- XCTAssert(data == expectedData, "Test message`s bytes should match expected constant test data (including CRC)")
-
- callsCount += 1
- })
-
- let mavLink = MAVLink()
- mavLink.delegate = delegate
- try! mavLink.dispatch(message: testHeartbeatMessage, systemId: 0xFF, componentId: 0, channel: 0)
-
- XCTAssert(callsCount == 1, "MAVLink instance should return exactly one finalized packet from provided message")
- }
-
- func testDispatchRethrowsDataExtensionsErrors() {
- let mavLink = MAVLink()
- let message = Statustext(severity: MAVSeverity.notice, text:"💩")
-
- XCTAssertThrowsError(try mavLink.dispatch(message: message, systemId: 0, componentId: 0, channel: 0)) { error in
- switch error {
- case let PackError.invalidStringEncoding(offset, string) where offset == 1 && string == "💩":
- break
- default:
- XCTFail("Unexpected error thrown")
- }
- }
- }
- }
|