Assertion failed in JSC::createError
[WebKit-https.git] / Tools / TestWebKitAPI / Tests / WebCore / mac / GPULegacyBuffer.mm
1 /*
2  * Copyright (C) 2017 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #import "config.h"
27
28 #if ENABLE(WEBMETAL)
29
30 #import "GPULegacyTest.h"
31 #import <JavaScriptCore/ArrayBuffer.h>
32 #import <JavaScriptCore/ArrayBufferView.h>
33 #import <JavaScriptCore/GenericTypedArrayViewInlines.h>
34 #import <JavaScriptCore/JSCInlines.h>
35 #import <JavaScriptCore/JSGenericTypedArrayViewInlines.h>
36 #import <JavaScriptCore/TypedArrays.h>
37 #import <Metal/Metal.h>
38 #import <WebCore/GPULegacyBuffer.h>
39 #import <WebCore/GPULegacyDevice.h>
40
41 using namespace WebCore;
42
43 namespace TestWebKitAPI {
44
45 TEST_F(GPULegacy, BufferCreate)
46 {
47     GPULegacyDevice device;
48
49     // Not all hardware supports Metal, so it is possible
50     // that we were unable to create the MTLDevice object.
51     // In that case, the device should be null.
52     if (!device)
53         return;
54
55     EXPECT_NOT_NULL(device.metal());
56
57     auto bufferView = JSC::Uint8Array::create(1024);
58
59     auto data = bufferView->data();
60     memset(data, 1, bufferView->byteLength());
61
62     GPULegacyBuffer buffer { device, bufferView.get() };
63     EXPECT_EQ(1024U, buffer.length());
64
65     auto contents = buffer.contents();
66     EXPECT_NOT_NULL(contents);
67     EXPECT_EQ(1024U, contents->byteLength());
68
69     auto contentsData = static_cast<uint8_t*>(contents->data());
70     EXPECT_NE(data, contentsData);
71     EXPECT_EQ(1U, contentsData[0]);
72     EXPECT_EQ(1U, contentsData[512]);
73     EXPECT_EQ(1U, contentsData[1023]);
74
75     EXPECT_NOT_NULL(buffer.metal());
76 }
77
78 } // namespace TestWebKitAPI
79
80 #endif