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

import * as JavascriptMetadata from './javascript_metadata.js';

describe('JavaScriptMetadata', () => {
  let metadata: JavascriptMetadata.JavaScriptMetadata.JavaScriptMetadataImpl;

  before(() => {
    metadata = new JavascriptMetadata.JavaScriptMetadata.JavaScriptMetadataImpl();
  });

  it('retrieves native signature by name', () => {
    const signatures = metadata.signaturesForNativeFunction('webkitRequestFullScreen');
    assert.deepEqual(signatures, [['?options']]);
  });

  it('does not retrieve native signatures that are bound to an instance', () => {
    const signatures = metadata.signaturesForNativeFunction('find');
    assert.isNull(signatures);
  });

  describe('with static methods', () => {
    it('retrieves by name and class', () => {
      const signatures = metadata.signaturesForStaticMethod('from', 'Array');
      assert.deepEqual(signatures, [['iterable', '?mapfn', '?thisArg'], ['arrayLike', '?mapfn', '?thisArg']]);
    });

    it('does not retrieve methods that are bound to an instance', () => {
      const signatures = metadata.signaturesForStaticMethod('includes', 'Array');
      assert.isNull(signatures);
    });

    it('handles a non-existing class', () => {
      const signatures = metadata.signaturesForStaticMethod('includes', 'bogus');
      assert.isNull(signatures);
    });
  });

  describe('with instance methods', () => {
    it('retrieves by name and class', () => {
      const signatures = metadata.signaturesForInstanceMethod('assign', 'HTMLSlotElement');
      assert.deepEqual(signatures, [['...nodes']]);
    });

    it('does not retrieve methods that are unbound', () => {
      const signatures = metadata.signaturesForInstanceMethod('webkitRequestFullScreen', 'window');
      assert.isNull(signatures);
    });

    it('does not retrieve static methods', () => {
      const signatures = metadata.signaturesForInstanceMethod('from', 'Array');
      assert.isNull(signatures);
    });

    it('handles a non-existing class', () => {
      const signatures = metadata.signaturesForInstanceMethod('from', 'Sheep');
      assert.isNull(signatures);
    });
  });
});
