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