UNPKG

@cliqz-oss/firefox-client

Version:
115 lines (97 loc) 3.18 kB
var assert = require("assert"), utils = require("./utils"); var Console; var obj; var func; before(function(done) { utils.loadTab('dom.html', function(aTab) { Console = aTab.Console; Console.evaluateJS('x = {a: 2, b: {c: 3}, get d() {return 4;}}', function(err, resp) { obj = resp.result; var input = 'y = function testfunc(a, b) { return a + b; }'; Console.evaluateJS(input, function(err, resp) { func = resp.result; done(); }) }); }); }); // JSObject - ownPropertyNames(), ownPropertyDescriptor(), prototype(), properties() describe('ownPropertyNames()', function() { it('should fetch property names', function(done) { obj.ownPropertyNames(function(err, names) { assert.strictEqual(err, null); assert.deepEqual(names, ['a', 'b', 'd']); done(); }) }) }); describe('ownPropertyDescriptor()', function() { it('should fetch descriptor for property', function(done) { obj.ownPropertyDescriptor('a', function(err, desc) { assert.strictEqual(err, null); testDescriptor(desc); assert.equal(desc.value, 2); done(); }) }) /* TODO: doesn't call callback if not defined property - Server side problem it('should be undefined for nonexistent property', function(done) { obj.ownPropertyDescriptor('g', function(desc) { console.log("desc", desc); done(); }) }) */ }) describe('ownProperties()', function() { it('should fetch all own properties and descriptors', function(done) { obj.ownProperties(function(err, props) { assert.strictEqual(err, null); testDescriptor(props.a); assert.equal(props.a.value, 2); testDescriptor(props.b); assert.ok(props.b.value.ownProperties, "prop value has JSObject methods"); done(); }) }) }) describe('prototype()', function() { it('should fetch prototype as an object', function(done) { obj.prototype(function(err, proto) { assert.strictEqual(err, null); assert.ok(proto.ownProperties, "prototype has JSObject methods"); done(); }) }) }) describe('ownPropertiesAndPrototype()', function() { it('should fetch properties, prototype, and getters', function(done) { obj.ownPropertiesAndPrototype(function(err, resp) { assert.strictEqual(err, null); // own properties var props = resp.ownProperties; assert.equal(Object.keys(props).length, 3); testDescriptor(props.a); assert.equal(props.a.value, 2); // prototype assert.ok(resp.prototype.ownProperties, "prototype has JSObject methods"); // getters var getters = resp.safeGetterValues; assert.equal(Object.keys(getters).length, 0); done(); }) }) }) describe('Function objects', function() { it('sould have correct properties', function() { assert.equal(func.class, "Function"); assert.equal(func.name, "testfunc"); assert.ok(func.ownProperties, "function has JSObject methods") }) }) function testDescriptor(desc) { assert.strictEqual(desc.configurable, true); assert.strictEqual(desc.enumerable, true); assert.strictEqual(desc.writable, true); }