1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
10 #include "js/Array.h" // JS::IsArrayObject
11 #include "js/Exception.h"
12 #include "js/friend/ErrorMessages.h" // JSMSG_*
14 #include "js/MemoryFunctions.h"
15 #include "js/Printf.h"
16 #include "js/PropertyAndElement.h" // JS_GetProperty
17 #include "jsapi-tests/tests.h"
21 static bool Cmp(const char16_t
* buffer
, uint32_t length
,
22 const char16_t
* expected
) {
25 if (i
>= length
|| *expected
!= *buffer
) {
35 static bool Callback(const char16_t
* buffer
, uint32_t length
, void* data
) {
36 const char16_t
** data_
= static_cast<const char16_t
**>(data
);
37 const char16_t
* expected
= *data_
;
39 return Cmp(buffer
, length
, expected
);
42 BEGIN_TEST(testToJSON_same
) {
44 Rooted
<Value
> input(cx
);
45 input
= JS::TrueValue();
46 CHECK(TryToJSON(cx
, input
, u
"true"));
48 input
= JS::FalseValue();
49 CHECK(TryToJSON(cx
, input
, u
"false"));
51 input
= JS::NullValue();
52 CHECK(TryToJSON(cx
, input
, u
"null"));
55 CHECK(TryToJSON(cx
, input
, u
"0"));
58 CHECK(TryToJSON(cx
, input
, u
"1"));
61 CHECK(TryToJSON(cx
, input
, u
"-1"));
64 CHECK(TryToJSON(cx
, input
, u
"1"));
66 input
.setDouble(1.75);
67 CHECK(TryToJSON(cx
, input
, u
"1.75"));
70 CHECK(TryToJSON(cx
, input
, u
"9000000000"));
72 input
.setDouble(std::numeric_limits
<double>::infinity());
73 CHECK(TryToJSON(cx
, input
, u
"null"));
77 bool TryToJSON(JSContext
* cx
, Handle
<Value
> value
, const char16_t
* expected
) {
79 Rooted
<Value
> v(cx
, value
);
80 const char16_t
* expected_
= expected
;
81 CHECK(JS_Stringify(cx
, &v
, nullptr, JS::NullHandleValue
, Callback
,
83 CHECK_NULL(expected_
);
86 const char16_t
* expected_
= expected
;
87 CHECK(JS::ToJSON(cx
, value
, nullptr, JS::NullHandleValue
, Callback
,
89 CHECK_NULL(expected_
);
93 END_TEST(testToJSON_same
)
95 BEGIN_TEST(testToJSON_different
) {
96 Rooted
<Symbol
*> symbol(cx
, NewSymbol(cx
, nullptr));
97 Rooted
<Value
> value(cx
, SymbolValue(symbol
));
99 CHECK(JS::ToJSON(cx
, value
, nullptr, JS::NullHandleValue
, UnreachedCallback
,
101 const char16_t
* expected
= u
"null";
102 CHECK(JS_Stringify(cx
, &value
, nullptr, JS::NullHandleValue
, Callback
,
104 CHECK_NULL(expected
);
108 static bool UnreachedCallback(const char16_t
*, uint32_t, void*) {
109 MOZ_CRASH("Should not call the callback");
112 END_TEST(testToJSON_different
)