Imported Upstream version 1.0.0
[platform/upstream/js.git] / js / src / jsapi-tests / testGetPropertyDefault.cpp
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 stringToId(JSContext *cx, const char *s, jsid *idp)
12 {
13     JSString *str = JS_NewStringCopyZ(cx, s);
14     if (!str)
15         return false;
16
17     return JS_ValueToId(cx, STRING_TO_JSVAL(str), idp);
18 }
19
20 BEGIN_TEST(testGetPropertyDefault_bug594060)
21 {
22     {
23         // Check JS_GetPropertyDefault
24
25         JSObject *obj = JS_NewObject(cx, NULL, NULL, NULL);
26         CHECK(obj);
27
28         jsval v0 = JSVAL_TRUE;
29         CHECK(JS_SetProperty(cx, obj, "here", &v0));
30
31         jsval v1;
32         CHECK(JS_GetPropertyDefault(cx, obj, "here", JSVAL_FALSE, &v1));
33         CHECK(JSVAL_IS_TRUE(v1));
34
35         jsval v2;
36         CHECK(JS_GetPropertyDefault(cx, obj, "nothere", JSVAL_FALSE, &v2));
37         CHECK(JSVAL_IS_FALSE(v2));
38     }
39
40     {
41         // Check JS_GetPropertyByIdDefault
42
43         JSObject *obj = JS_NewObject(cx, NULL, NULL, NULL);
44         CHECK(obj);
45
46         jsid hereid;
47         CHECK(stringToId(cx, "here", &hereid));
48
49         jsid nothereid;
50         CHECK(stringToId(cx, "nothere", &nothereid));
51
52         jsval v0 = JSVAL_TRUE;
53         CHECK(JS_SetPropertyById(cx, obj, hereid, &v0));
54
55         jsval v1;
56         CHECK(JS_GetPropertyByIdDefault(cx, obj, hereid, JSVAL_FALSE, &v1));
57         CHECK(JSVAL_IS_TRUE(v1));
58
59         jsval v2;
60         CHECK(JS_GetPropertyByIdDefault(cx, obj, nothereid, JSVAL_FALSE, &v2));
61         CHECK(JSVAL_IS_FALSE(v2));
62     }
63
64     return true;
65 }
66 END_TEST(testGetPropertyDefault_bug594060)