| // 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); |
| }); |
| }); |
| }); |