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