Imported Upstream version 1.0.0
[platform/upstream/js.git] / js / src / jsapi-tests / testDefineGetterSetterNonEnumerable.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 #include "jsxdrapi.h"
7
8 static JSBool
9 native(JSContext *cx, uintN argc, jsval *vp)
10 {
11     return JS_TRUE;
12 }
13
14 static const char PROPERTY_NAME[] = "foo";
15
16 BEGIN_TEST(testDefineGetterSetterNonEnumerable)
17 {
18     jsvalRoot vobj(cx);
19     JSObject *obj = JS_NewObject(cx, NULL, NULL, NULL);
20     CHECK(obj);
21     vobj = OBJECT_TO_JSVAL(obj);
22
23     jsvalRoot vget(cx);
24     JSFunction *funGet = JS_NewFunction(cx, native, 0, 0, NULL, "get");
25     CHECK(funGet);
26     JSObject *funGetObj = JS_GetFunctionObject(funGet);
27     vget = OBJECT_TO_JSVAL(funGetObj);
28
29     jsvalRoot vset(cx);
30     JSFunction *funSet = JS_NewFunction(cx, native, 1, 0, NULL, "set");
31     CHECK(funSet);
32     JSObject *funSetObj = JS_GetFunctionObject(funSet);
33     vset = OBJECT_TO_JSVAL(funSetObj);
34
35     CHECK(JS_DefineProperty(cx, JSVAL_TO_OBJECT(vobj), PROPERTY_NAME,
36                             JSVAL_VOID,
37                             JS_DATA_TO_FUNC_PTR(JSPropertyOp, funGetObj),
38                             JS_DATA_TO_FUNC_PTR(JSStrictPropertyOp, funSetObj),
39                             JSPROP_GETTER | JSPROP_SETTER | JSPROP_ENUMERATE));
40
41     CHECK(JS_DefineProperty(cx, JSVAL_TO_OBJECT(vobj), PROPERTY_NAME,
42                             JSVAL_VOID,
43                             JS_DATA_TO_FUNC_PTR(JSPropertyOp, funGetObj),
44                             JS_DATA_TO_FUNC_PTR(JSStrictPropertyOp, funSetObj),
45                             JSPROP_GETTER | JSPROP_SETTER | JSPROP_PERMANENT));
46
47     JSBool found = JS_FALSE;
48     uintN attrs = 0;
49     CHECK(JS_GetPropertyAttributes(cx, JSVAL_TO_OBJECT(vobj), PROPERTY_NAME,
50                                    &attrs, &found));
51     CHECK(found);
52     CHECK(attrs & JSPROP_GETTER);
53     CHECK(attrs & JSPROP_SETTER);
54     CHECK(attrs & JSPROP_PERMANENT);
55     CHECK(!(attrs & JSPROP_ENUMERATE));
56
57     return true;
58 }
59 END_TEST(testDefineGetterSetterNonEnumerable)