1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2 : * vim: set ts=8 sw=4 et tw=99:
3 : */
4 :
5 : #include "tests.h"
6 :
7 : #define JSVAL_IS_FALSE(x) ((JSVAL_IS_BOOLEAN(x)) && !(JSVAL_TO_BOOLEAN(x)))
8 : #define JSVAL_IS_TRUE(x) ((JSVAL_IS_BOOLEAN(x)) && (JSVAL_TO_BOOLEAN(x)))
9 :
10 : static JSBool
11 2 : stringToId(JSContext *cx, const char *s, jsid *idp)
12 : {
13 2 : JSString *str = JS_NewStringCopyZ(cx, s);
14 2 : if (!str)
15 0 : return false;
16 :
17 2 : return JS_ValueToId(cx, STRING_TO_JSVAL(str), idp);
18 : }
19 :
20 4 : BEGIN_TEST(testGetPropertyDefault_bug594060)
21 : {
22 : {
23 : // Check JS_GetPropertyDefault
24 :
25 1 : JSObject *obj = JS_NewObject(cx, NULL, NULL, NULL);
26 1 : CHECK(obj);
27 :
28 1 : jsval v0 = JSVAL_TRUE;
29 1 : CHECK(JS_SetProperty(cx, obj, "here", &v0));
30 :
31 : jsval v1;
32 1 : CHECK(JS_GetPropertyDefault(cx, obj, "here", JSVAL_FALSE, &v1));
33 1 : CHECK(JSVAL_IS_TRUE(v1));
34 :
35 : jsval v2;
36 1 : CHECK(JS_GetPropertyDefault(cx, obj, "nothere", JSVAL_FALSE, &v2));
37 1 : CHECK(JSVAL_IS_FALSE(v2));
38 : }
39 :
40 : {
41 : // Check JS_GetPropertyByIdDefault
42 :
43 1 : JSObject *obj = JS_NewObject(cx, NULL, NULL, NULL);
44 1 : CHECK(obj);
45 :
46 : jsid hereid;
47 1 : CHECK(stringToId(cx, "here", &hereid));
48 :
49 : jsid nothereid;
50 1 : CHECK(stringToId(cx, "nothere", ¬hereid));
51 :
52 1 : jsval v0 = JSVAL_TRUE;
53 1 : CHECK(JS_SetPropertyById(cx, obj, hereid, &v0));
54 :
55 : jsval v1;
56 1 : CHECK(JS_GetPropertyByIdDefault(cx, obj, hereid, JSVAL_FALSE, &v1));
57 1 : CHECK(JSVAL_IS_TRUE(v1));
58 :
59 : jsval v2;
60 1 : CHECK(JS_GetPropertyByIdDefault(cx, obj, nothereid, JSVAL_FALSE, &v2));
61 1 : CHECK(JSVAL_IS_FALSE(v2));
62 : }
63 :
64 1 : return true;
65 : }
66 2 : END_TEST(testGetPropertyDefault_bug594060)
|