test262/test/language/statements/class/definition/fn-name-static-precedence.js
Mike Pennisi 2fe074134a Add tests for function name attribute
This change set includes tests for most invocations of the
SetFunctionName abstract operation in the ES2015 specification.
Practical testing considerations preclude the introduction of tests for
certain invocations:

- The project is still vetting methods to sustainably test the semantics
  of the Destructuring Binding pattern across all valid productions.
  - 13.3.3.6 Runtime Semantics: IteratorBindingInitialization
  - 13.3.3.7 Runtime Semantics: KeyedBindingInitialization
- Without a loader, there is no way to access a function object declared
  in an ExportDeclaration, so `name` assignment cannot be tested in
  these cases
  - 14.1.19 Runtime Semantics: InstantiateFunctionObject
  - 14.4.12 Runtime Semantics: InstantiateFunctionObject
  - 14.5.15 Runtime Semantics: BindingClassDeclarationEvaluation
  - 15.2.3.11 Runtime Semantics: Evaluation
2015-07-21 20:05:34 -04:00

64 lines
1.4 KiB
JavaScript

// Copyright (C) Copyright 2015 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 14.5.15
description: >
Function `name` attribute not inferred in presence of static `name` method
info: >
ClassDeclaration : class BindingIdentifier ClassTail
[...]
4. Let hasNameProperty be HasOwnProperty(value, "name").
5. ReturnIfAbrupt(hasNameProperty).
6. If hasNameProperty is false, then perform SetFunctionName(value,
className).
includes: [propertyHelper.js]
---*/
class A {
static name() {
$ERROR('Static method should not be executed during definition');
}
}
assert.sameValue(typeof A.name, 'function');
var attr = 'name';
class B {
static [attr]() {
$ERROR(
'Static method defined via computed property should not be executed ' +
'during definition'
);
}
}
assert.sameValue(typeof B.name, 'function');
class C {
static get name() {
$ERROR('Static `get` accessor should not be executed during definition');
}
}
assert.throws(Test262Error, function() {
C.name;
});
class D {
static set name(_) {
$ERROR('Static `set` accessor should not be executed during definition');
}
}
assert.sameValue(D.name, undefined);
class E {
static *name() {
$ERROR('Static GeneratorMethod should not be executed during definition');
}
}
assert.sameValue(typeof E.name, 'function');