// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

(async function() {
  TestRunner.addResult(`Tests RemoteObject.getProperties.\n`);
  await TestRunner.evaluateInPagePromise(`
      var object1 = { get foo() { return 1; }, set foo(value) { } };
      var object2 = { get foo() { return 1; } };
  `);

  var obj1, obj2;

  function dumpProperties(allProperties) {
    const properties = allProperties.properties;
    for (var i = 0; i < properties.length; ++i)
      dumpProperty(properties[i]);
  }

  TestRunner.runTestSuite([
    async function testSetUp(next) {
      await new Promise(resolve => TestRunner.evaluateInPage('dumpObjects(\'Initial\')', resolve));

      var result = await TestRunner.RuntimeAgent.evaluate('object1');

      obj1 = TestRunner.runtimeModel.createRemoteObject(result);
      var result = await TestRunner.RuntimeAgent.evaluate('object2');

      obj2 = TestRunner.runtimeModel.createRemoteObject(result);
      next();
    },

    function testGetterAndSetter(next) {
      obj1.getOwnProperties(false).then(dumpProperties).then(next);
    },

    function testGetterOnly(next) {
      obj2.getOwnProperties(false).then(dumpProperties).then(next);
    }
  ]);

  function convertPropertyValueForTest(propertyObject, fieldName) {
    var value = propertyObject[fieldName];
    if (value)
      propertyObject[fieldName] = {
        type: value.type,
        description: value.description.replace(/^function [gs]et foo/, 'function '),
        objectId: value.objectId
      };
  }

  function dumpProperty(property) {
    if (property.name === '__proto__')
      return;

    convertPropertyValueForTest(property, 'value');
    convertPropertyValueForTest(property, 'getter');
    convertPropertyValueForTest(property, 'setter');
    TestRunner.dump(property, {objectId: 'formatAsTypeName'});
  }
})();
