Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
added tests (ClassOfDevice)
fixed 1 encoding bug (ClassOfDevice)
  • Loading branch information
carlos21 committed Aug 1, 2018
1 parent e218c10 commit f554877
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 11 deletions.
4 changes: 2 additions & 2 deletions Sources/ClassOfDevice.swift
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,10 @@ public struct ClassOfDevice {
// get first 3 bits of the Mejor Service Class
let majorServiceClass3Bits = (majorServiceClass.rawValue.bytes.0 << 5) /// e.g. 11100000

// combine part of the Major Device Class of part of the Major Service Class
// combine part of the Major Device Class of part with the Major Service Class
let secondByte = majorDeviceClass.type.rawValue | majorServiceClass3Bits

let thirdByte = (majorServiceClass.rawValue.bytes.1 << 5) | ((majorServiceClass.rawValue.bytes.0 >> 3) << 3)
let thirdByte = (majorServiceClass.rawValue.bytes.1 << 5) | (majorServiceClass.rawValue.bytes.0 >> 3)

return Data([firstByte, secondByte, thirdByte])
}
Expand Down
54 changes: 45 additions & 9 deletions Tests/BluetoothTests/BluetoothTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -300,40 +300,76 @@ final class BluetoothTests: XCTestCase {
func testClassOfDevice() {

do {
let data = Data([0b00001101, 0b00100010, 0b11000000])
let data = Data([0b00001101, 0b00000001, 0b11000010])

guard let classOfDevice = ClassOfDevice(data: data)
else { XCTFail("Could not decode"); return }

XCTAssertTrue(classOfDevice.majorServiceClass.contains(.networking))

guard case let .computer(computer) = classOfDevice.majorDeviceClass
else { XCTFail("majorDeviceClass is wrong"); return }

guard computer == .laptop
else { XCTFail("majorDeviceClass is wrong"); return }

XCTAssertEqual(classOfDevice.data, data)
XCTAssertEqual(classOfDevice.formatType, ClassOfDevice.FormatType(rawValue: 0b01))
}

do {
let data = Data([0b00001101, 0b00100010, 0b11000000])

guard let classOfDevice = ClassOfDevice(data: data)
else { XCTFail("Could not decode"); return }

XCTAssertTrue(classOfDevice.majorServiceClass.contains(.limitedDiscoverable))
XCTAssertTrue(classOfDevice.majorServiceClass.contains(.telephony))
XCTAssertTrue(classOfDevice.majorServiceClass.contains(.information))
XCTAssertFalse(classOfDevice.majorServiceClass.contains(.audio))
XCTAssertFalse(classOfDevice.majorServiceClass.contains(.objectTransfer))

guard case let .phone(phone) = classOfDevice.majorDeviceClass
else { XCTFail("majorDeviceClass is wrong"); return }

guard phone == .smartphone
else { XCTFail("majorDeviceClass is wrong"); return }

XCTAssertEqual(classOfDevice.data, data)
XCTAssertEqual(classOfDevice.formatType, ClassOfDevice.FormatType(rawValue: 0b01))
}

do {
let data = Data([0b01000100, 0b00100101, 0b11100000])

guard let classOfDevice = ClassOfDevice(data: data)
else { XCTFail("Could not decode"); return }

XCTAssertTrue(classOfDevice.majorServiceClass.contains(.audio))

guard case let .peripheral(peripheral, device) = classOfDevice.majorDeviceClass
else { XCTFail("majorDeviceClass is wrong"); return }

XCTAssertEqual(peripheral, .keyboard)
XCTAssertEqual(device, .joystick)
XCTAssertEqual(classOfDevice.data, data)
XCTAssertEqual(classOfDevice.formatType, ClassOfDevice.FormatType(rawValue: 0b00))
}

do {
let data = Data([0b00000100, 0b00000111, 0b11100110])

guard let classOfDevice = ClassOfDevice(data: data)
else { XCTFail("Could not decode"); return }

XCTAssertTrue(classOfDevice.majorServiceClass.contains(.telephony))

guard case let .wearable(wearable) = classOfDevice.majorDeviceClass
else { XCTFail("majorDeviceClass is wrong"); return }

XCTAssertEqual(wearable, .wristwatch)
XCTAssertEqual(classOfDevice.data, data)
XCTAssertEqual(classOfDevice.formatType, ClassOfDevice.FormatType(rawValue: 0b00))
}
}
}
Expand Down

0 comments on commit f554877

Please sign in to comment.