1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #include "jsapi.h" // JS_NewPlainObject
6 #include "js/Result.h" // Error, Ok, Result
7 #include "js/String.h" // JS_NewStringCopyZ
8 #include "jsapi-tests/tests.h"
10 JS::Result
<> SimpleSuccess(JSContext
*) { return JS::Ok(); }
12 JS::Result
<> SimpleFailure(JSContext
*) { return JS::Result
<>{JS::Error()}; }
14 JS::Result
<int> PODSuccess(JSContext
*) { return 42; }
16 JS::Result
<int> PODFailure(JSContext
*) { return JS::Result
<int>{JS::Error()}; }
18 JS::Result
<JSObject
*> ObjectSuccess(JSContext
* cx
) {
19 JS::RootedObject obj
{cx
, JS_NewPlainObject(cx
)};
20 MOZ_RELEASE_ASSERT(obj
);
24 JS::Result
<JSObject
*> ObjectFailure(JSContext
*) {
25 return JS::Result
<JSObject
*>{JS::Error()};
28 JS::Result
<JSString
*> StringSuccess(JSContext
* cx
) {
29 JS::RootedString str
{cx
, JS_NewStringCopyZ(cx
, "foo")};
30 MOZ_RELEASE_ASSERT(str
);
34 JS::Result
<JSString
*> StringFailure(JSContext
*) {
35 return JS::Result
<JSString
*>{JS::Error()};
38 BEGIN_TEST(testResult_SimpleSuccess
) {
39 JS::Result
<> result
= SimpleSuccess(cx
);
43 END_TEST(testResult_SimpleSuccess
)
45 BEGIN_TEST(testResult_SimpleFailure
) {
46 JS::Result
<> result
= SimpleFailure(cx
);
47 CHECK(result
.isErr());
50 END_TEST(testResult_SimpleFailure
)
52 BEGIN_TEST(testResult_PODSuccess
) {
53 JS::Result
<int> result
= PODSuccess(cx
);
55 CHECK_EQUAL(result
.unwrap(), 42);
56 CHECK_EQUAL(result
.inspect(), 42);
59 END_TEST(testResult_PODSuccess
)
61 BEGIN_TEST(testResult_PODFailure
) {
62 JS::Result
<int> result
= PODFailure(cx
);
63 CHECK(result
.isErr());
66 END_TEST(testResult_PODFailure
)
68 BEGIN_TEST(testResult_ObjectSuccess
) {
69 JS::Result
<JSObject
*> result
= ObjectSuccess(cx
);
71 CHECK(result
.inspect() != nullptr);
72 CHECK(result
.unwrap() != nullptr);
75 END_TEST(testResult_ObjectSuccess
)
77 BEGIN_TEST(testResult_ObjectFailure
) {
78 JS::Result
<JSObject
*> result
= ObjectFailure(cx
);
79 CHECK(result
.isErr());
82 END_TEST(testResult_ObjectFailure
)
84 BEGIN_TEST(testResult_StringSuccess
) {
85 JS::Result
<JSString
*> result
= StringSuccess(cx
);
87 CHECK(result
.inspect() != nullptr);
88 CHECK(result
.unwrap() != nullptr);
91 END_TEST(testResult_StringSuccess
)
93 BEGIN_TEST(testResult_StringFailure
) {
94 JS::Result
<JSString
*> result
= StringFailure(cx
);
95 CHECK(result
.isErr());
98 END_TEST(testResult_StringFailure
)