diff --git a/Sources/DOMKit/ECMAScript/ArrayBuffer.swift b/Sources/DOMKit/ECMAScript/ArrayBuffer.swift index 195bbd54..9b4e8a9d 100644 --- a/Sources/DOMKit/ECMAScript/ArrayBuffer.swift +++ b/Sources/DOMKit/ECMAScript/ArrayBuffer.swift @@ -2,8 +2,8 @@ // Created by Manuel Burghard. Licensed unter MIT. // -import JavaScriptKit import _CJavaScriptKit +import JavaScriptKit public typealias Int8Array = JSTypedArray public typealias Int16Array = JSTypedArray @@ -15,7 +15,6 @@ public typealias Float32Array = JSTypedArray public typealias Float64Array = JSTypedArray public class ArrayBuffer: JSBridgedClass { - public class var constructor: JSFunction { JSObject.global.ArrayBuffer.function! } public let jsObject: JSObject @@ -25,10 +24,32 @@ public class ArrayBuffer: JSBridgedClass { } public convenience init(length: Int) { - self.init(unsafelyWrapping: Self.constructor.new( length)) + self.init(unsafelyWrapping: Self.constructor.new(length)) } public static func isView(_ object: JSValueCompatible) -> Bool { JSObject.global.ArrayBuffer.object!.isView!(object).fromJSValue()! } } + +public extension JSTypedArray { + convenience init(_ arrayBuffer: ArrayBuffer) { + self.init(unsafelyWrapping: Self.constructor.new(arrayBuffer)) + } + + var buffer: ArrayBuffer { + ArrayBuffer(unsafelyWrapping: jsObject.buffer.object!) + } +} + +#if canImport(Foundation) +import Foundation + +public extension Data { + init(_ arrayBuffer: ArrayBuffer) { + self = JSTypedArray(arrayBuffer).withUnsafeBytes { + Data(buffer: $0) + } + } +} +#endif diff --git a/Tests/DOMKitTests/DOMKitTests.swift b/Tests/DOMKitTests/DOMKitTests.swift index 4015104f..16cf7424 100644 --- a/Tests/DOMKitTests/DOMKitTests.swift +++ b/Tests/DOMKitTests/DOMKitTests.swift @@ -1,8 +1,10 @@ -import XCTest import DOMKit +import Foundation +import JavaScriptKit +import XCTest final class DOMKitTests: XCTestCase { - func testExample() { + func testQuerySelector() { let document = globalThis.document let button = document.createElement(localName: "button") button.textContent = "Hello, world!" @@ -11,4 +13,31 @@ final class DOMKitTests: XCTestCase { let queriedButton = document.querySelector(selectors: "body button") XCTAssertEqual(queriedButton?.textContent, "Hello, world!") } + + func testDataToTypedArray() { + let array: [UInt8] = [1, 2, 3, 4, 5] + let data = Data(array) + let typedArray = JSTypedArray(data) + + typedArray.withUnsafeBytes { + XCTAssertEqual($0.count, data.count) + for index in $0.indices { + XCTAssertEqual(array[index], $0[index]) + } + } + } + + func testTypedArrayToData() { + let array: [UInt8] = [1, 2, 3, 4, 5] + let typedArray = JSTypedArray(array) + + let data = Data(typedArray.buffer) + + typedArray.withUnsafeBytes { + XCTAssertEqual($0.count, data.count) + for index in $0.indices { + XCTAssertEqual(array[index], $0[index]) + } + } + } }