| Index: test/mjsunit/regress/regress-2225.js
|
| diff --git a/test/cctest/test-ast.cc b/test/mjsunit/regress/regress-2225.js
|
| similarity index 53%
|
| copy from test/cctest/test-ast.cc
|
| copy to test/mjsunit/regress/regress-2225.js
|
| index c72f87ec3dee0fcc4d356a0a45bc1dedb3c1e36b..9957d8d463dc7c6dc3f2f30a718ea75ec9b83514 100644
|
| --- a/test/cctest/test-ast.cc
|
| +++ b/test/mjsunit/regress/regress-2225.js
|
| @@ -25,37 +25,41 @@
|
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| -#include <stdlib.h>
|
| +// Flags: --harmony-proxies
|
|
|
| -#include "v8.h"
|
| -
|
| -#include "ast.h"
|
| -#include "cctest.h"
|
| -
|
| -using namespace v8::internal;
|
| +var proxy_has_x = false;
|
| +var proxy = Proxy.create({ getPropertyDescriptor:function(key) {
|
| + assertSame('x', key);
|
| + if (proxy_has_x) {
|
| + return { configurable:true, writable:false, value:19 };
|
| + }
|
| +}});
|
|
|
| -TEST(List) {
|
| - v8::internal::V8::Initialize(NULL);
|
| - List<AstNode*>* list = new List<AstNode*>(0);
|
| - CHECK_EQ(0, list->length());
|
| +// Test __lookupGetter__/__lookupSetter__ with proxy.
|
| +assertSame(undefined, Object.prototype.__lookupGetter__.call(proxy, 'foo'));
|
| +assertSame(undefined, Object.prototype.__lookupSetter__.call(proxy, 'bar'));
|
| +assertSame(undefined, Object.prototype.__lookupGetter__.call(proxy, '123'));
|
| +assertSame(undefined, Object.prototype.__lookupSetter__.call(proxy, '456'));
|
|
|
| - Isolate* isolate = Isolate::Current();
|
| - Zone* zone = isolate->runtime_zone();
|
| - ZoneScope zone_scope(zone, DELETE_ON_EXIT);
|
| - AstNodeFactory<AstNullVisitor> factory(isolate, zone);
|
| - AstNode* node = factory.NewEmptyStatement();
|
| - list->Add(node);
|
| - CHECK_EQ(1, list->length());
|
| - CHECK_EQ(node, list->at(0));
|
| - CHECK_EQ(node, list->last());
|
| +// Test __lookupGetter__/__lookupSetter__ with proxy in prototype chain.
|
| +var object = Object.create(proxy);
|
| +assertSame(undefined, Object.prototype.__lookupGetter__.call(object, 'foo'));
|
| +assertSame(undefined, Object.prototype.__lookupSetter__.call(object, 'bar'));
|
| +assertSame(undefined, Object.prototype.__lookupGetter__.call(object, '123'));
|
| +assertSame(undefined, Object.prototype.__lookupSetter__.call(object, '456'));
|
|
|
| - const int kElements = 100;
|
| - for (int i = 0; i < kElements; i++) {
|
| - list->Add(node);
|
| - }
|
| - CHECK_EQ(1 + kElements, list->length());
|
| +// Test inline constructors with proxy as prototype.
|
| +function f() { this.x = 23; }
|
| +f.prototype = proxy;
|
| +proxy_has_x = false;
|
| +assertSame(23, new f().x);
|
| +proxy_has_x = true;
|
| +assertSame(19, new f().x);
|
|
|
| - list->Clear();
|
| - CHECK_EQ(0, list->length());
|
| - delete list;
|
| -}
|
| +// Test inline constructors with proxy in prototype chain.
|
| +function g() { this.x = 42; }
|
| +g.prototype.__proto__ = proxy;
|
| +proxy_has_x = false;
|
| +assertSame(42, new g().x);
|
| +proxy_has_x = true;
|
| +assertSame(19, new g().x);
|
|
|