v8/test/inspector/testcfg.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

72 lines
2.0 KiB
Python
Raw Normal View History

# Copyright 2016 the V8 project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
from testrunner.local import testsuite
from testrunner.local import utils
from testrunner.objects import testcase
from testrunner.outproc import base as outproc
PROTOCOL_TEST_JS = "protocol-test.js"
WASM_INSPECTOR_JS = "wasm-inspector-test.js"
[class] support out-of-scope private member access in debug-evaluate Previously in the DevTools console, users could inspect a preview of all private class members on an instance, but if they wanted to evaluate or inspect a specific private class member out of a long list, they had to be debugging and in a scope that has access to those private names. This patch adds support for extraordinary access of out-of-scope private member access in debug-evaluate, specifically for Debugger.evaluateOnCallframe() (for console calls invoked during debugging) and Runtime.evaluate() (for console calls invoked when the user is not debugging). This kind of access is not otherwise allowed in normal execution, but in the DevTools console it makes sense to relax the rules a bit for a better developer experience. To support this kind of extraordinary access, if the parsing_while_debugging or is_repl_mode flag is set, when we encounter a private name reference that's in a top-level scope or an eval scope under a top-level scope, instead of throwing immediately, we bind the reference to a dynamic lookup variable, and emit bytecode that calls to %GetPrivateName() or %SetPrivateName() in the runtime to perform lookup of the private name as well as the load/store operations accordingly. If there are more than on private name on the receiver matching the description (for example, an object with two `#field` private names from different classes), we throw an error for the ambiguity (we can consider supporting selection among the conflicting private names later, for the initial support we just throw for simplicity). If there are no matching private names, or if the found private class member does not support the desired operation (e.g. attempting to write to a read-only private accessor), we throw an error as well. If there is exactly one matching private name, and the found private class member support the desired operation, we dispatch to the proper behavior in the runtime calls. Doc: https://docs.google.com/document/d/1Va89BKHjCDs9RccDWhuZBb6LyRMAd6BXM3-p25oHd8I/edit Bug: chromium:1381806 Change-Id: I7d1db709470246050d2e4c2a85b2292e63c01fe9 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4020267 Commit-Queue: Joyee Cheung <joyee@igalia.com> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/main@{#85421}
2023-01-19 14:29:20 +00:00
PRIVATE_MEMBER_TEST_JS = "private-class-member-inspector-test.js"
EXPECTED_SUFFIX = "-expected.txt"
RESOURCES_FOLDER = "resources"
Reland "Reland "[test] refactor testsuite configuration"" This is a reland of 81eec150f6935b363e560386eb48856d26e8007e Original change's description: > Reland "[test] refactor testsuite configuration" > > This is a reland of 7f92ad0ab6d04ee4ff6e5bc7be2d6e6344e47914 > > Original change's description: > > [test] refactor testsuite configuration > > > > Every testsuite configuration consist of at least 30% code duplication. > > > > The code age ranges from 10 years old to 5 years old. Implementing anything that > > touches the testsuite code becomes a technical fight to the death. > > > > This CL removes all the duplication by refactoring the common functionality. > > > > This CL contains structural changes without any logical changes % small bug > > fixes. > > > > R=machenbach@chromium.org > > CC=yangguo@chromium.org,sergiyb@chromium.org > > > > Bug: v8:8174, v8:8769 > > Change-Id: Iee299569caa7abdc0307ecf606136669034a28a2 > > Reviewed-on: https://chromium-review.googlesource.com/c/1445881 > > Commit-Queue: Sergiy Belozorov <sergiyb@chromium.org> > > Reviewed-by: Michael Achenbach <machenbach@chromium.org> > > Cr-Commit-Position: refs/heads/master@{#59361} > > Bug: v8:8174, v8:8769 > Change-Id: I8e7078cfb875ceb3777e57084e6f8dfac09693e7 > Reviewed-on: https://chromium-review.googlesource.com/c/1454485 > Reviewed-by: Michael Achenbach <machenbach@chromium.org> > Commit-Queue: Tamer Tas <tmrts@chromium.org> > Cr-Commit-Position: refs/heads/master@{#59369} Bug: v8:8174, v8:8790 Change-Id: I38ab9d37bca76057441a970f26e2102e4387a857 Reviewed-on: https://chromium-review.googlesource.com/c/1454724 Commit-Queue: Michael Achenbach <machenbach@chromium.org> Reviewed-by: Michael Achenbach <machenbach@chromium.org> Cr-Commit-Position: refs/heads/master@{#59387}
2019-02-05 14:00:49 +00:00
class TestLoader(testsuite.JSTestLoader):
@property
def excluded_files(self):
[class] support out-of-scope private member access in debug-evaluate Previously in the DevTools console, users could inspect a preview of all private class members on an instance, but if they wanted to evaluate or inspect a specific private class member out of a long list, they had to be debugging and in a scope that has access to those private names. This patch adds support for extraordinary access of out-of-scope private member access in debug-evaluate, specifically for Debugger.evaluateOnCallframe() (for console calls invoked during debugging) and Runtime.evaluate() (for console calls invoked when the user is not debugging). This kind of access is not otherwise allowed in normal execution, but in the DevTools console it makes sense to relax the rules a bit for a better developer experience. To support this kind of extraordinary access, if the parsing_while_debugging or is_repl_mode flag is set, when we encounter a private name reference that's in a top-level scope or an eval scope under a top-level scope, instead of throwing immediately, we bind the reference to a dynamic lookup variable, and emit bytecode that calls to %GetPrivateName() or %SetPrivateName() in the runtime to perform lookup of the private name as well as the load/store operations accordingly. If there are more than on private name on the receiver matching the description (for example, an object with two `#field` private names from different classes), we throw an error for the ambiguity (we can consider supporting selection among the conflicting private names later, for the initial support we just throw for simplicity). If there are no matching private names, or if the found private class member does not support the desired operation (e.g. attempting to write to a read-only private accessor), we throw an error as well. If there is exactly one matching private name, and the found private class member support the desired operation, we dispatch to the proper behavior in the runtime calls. Doc: https://docs.google.com/document/d/1Va89BKHjCDs9RccDWhuZBb6LyRMAd6BXM3-p25oHd8I/edit Bug: chromium:1381806 Change-Id: I7d1db709470246050d2e4c2a85b2292e63c01fe9 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4020267 Commit-Queue: Joyee Cheung <joyee@igalia.com> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/main@{#85421}
2023-01-19 14:29:20 +00:00
return {PROTOCOL_TEST_JS, WASM_INSPECTOR_JS, PRIVATE_MEMBER_TEST_JS}
Reland "Reland "[test] refactor testsuite configuration"" This is a reland of 81eec150f6935b363e560386eb48856d26e8007e Original change's description: > Reland "[test] refactor testsuite configuration" > > This is a reland of 7f92ad0ab6d04ee4ff6e5bc7be2d6e6344e47914 > > Original change's description: > > [test] refactor testsuite configuration > > > > Every testsuite configuration consist of at least 30% code duplication. > > > > The code age ranges from 10 years old to 5 years old. Implementing anything that > > touches the testsuite code becomes a technical fight to the death. > > > > This CL removes all the duplication by refactoring the common functionality. > > > > This CL contains structural changes without any logical changes % small bug > > fixes. > > > > R=machenbach@chromium.org > > CC=yangguo@chromium.org,sergiyb@chromium.org > > > > Bug: v8:8174, v8:8769 > > Change-Id: Iee299569caa7abdc0307ecf606136669034a28a2 > > Reviewed-on: https://chromium-review.googlesource.com/c/1445881 > > Commit-Queue: Sergiy Belozorov <sergiyb@chromium.org> > > Reviewed-by: Michael Achenbach <machenbach@chromium.org> > > Cr-Commit-Position: refs/heads/master@{#59361} > > Bug: v8:8174, v8:8769 > Change-Id: I8e7078cfb875ceb3777e57084e6f8dfac09693e7 > Reviewed-on: https://chromium-review.googlesource.com/c/1454485 > Reviewed-by: Michael Achenbach <machenbach@chromium.org> > Commit-Queue: Tamer Tas <tmrts@chromium.org> > Cr-Commit-Position: refs/heads/master@{#59369} Bug: v8:8174, v8:8790 Change-Id: I38ab9d37bca76057441a970f26e2102e4387a857 Reviewed-on: https://chromium-review.googlesource.com/c/1454724 Commit-Queue: Michael Achenbach <machenbach@chromium.org> Reviewed-by: Michael Achenbach <machenbach@chromium.org> Cr-Commit-Position: refs/heads/master@{#59387}
2019-02-05 14:00:49 +00:00
@property
def excluded_dirs(self):
return {RESOURCES_FOLDER}
class TestSuite(testsuite.TestSuite):
Reland "Reland "[test] refactor testsuite configuration"" This is a reland of 81eec150f6935b363e560386eb48856d26e8007e Original change's description: > Reland "[test] refactor testsuite configuration" > > This is a reland of 7f92ad0ab6d04ee4ff6e5bc7be2d6e6344e47914 > > Original change's description: > > [test] refactor testsuite configuration > > > > Every testsuite configuration consist of at least 30% code duplication. > > > > The code age ranges from 10 years old to 5 years old. Implementing anything that > > touches the testsuite code becomes a technical fight to the death. > > > > This CL removes all the duplication by refactoring the common functionality. > > > > This CL contains structural changes without any logical changes % small bug > > fixes. > > > > R=machenbach@chromium.org > > CC=yangguo@chromium.org,sergiyb@chromium.org > > > > Bug: v8:8174, v8:8769 > > Change-Id: Iee299569caa7abdc0307ecf606136669034a28a2 > > Reviewed-on: https://chromium-review.googlesource.com/c/1445881 > > Commit-Queue: Sergiy Belozorov <sergiyb@chromium.org> > > Reviewed-by: Michael Achenbach <machenbach@chromium.org> > > Cr-Commit-Position: refs/heads/master@{#59361} > > Bug: v8:8174, v8:8769 > Change-Id: I8e7078cfb875ceb3777e57084e6f8dfac09693e7 > Reviewed-on: https://chromium-review.googlesource.com/c/1454485 > Reviewed-by: Michael Achenbach <machenbach@chromium.org> > Commit-Queue: Tamer Tas <tmrts@chromium.org> > Cr-Commit-Position: refs/heads/master@{#59369} Bug: v8:8174, v8:8790 Change-Id: I38ab9d37bca76057441a970f26e2102e4387a857 Reviewed-on: https://chromium-review.googlesource.com/c/1454724 Commit-Queue: Michael Achenbach <machenbach@chromium.org> Reviewed-by: Michael Achenbach <machenbach@chromium.org> Cr-Commit-Position: refs/heads/master@{#59387}
2019-02-05 14:00:49 +00:00
def _test_loader_class(self):
return TestLoader
def _test_class(self):
return TestCase
class TestCase(testcase.TestCase):
def __init__(self, *args, **kwargs):
super(TestCase, self).__init__(*args, **kwargs)
self._source_flags = self._parse_source_flags()
def _get_files_params(self):
return [
os.path.join(self.suite.root, PROTOCOL_TEST_JS),
os.path.join(self.suite.root, self.path + self._get_suffix()),
]
def _get_source_flags(self):
return self._source_flags
def _get_source_path(self):
return os.path.join(self.suite.root, self.path + self._get_suffix())
def get_shell(self):
return 'inspector-test'
def get_android_resources(self):
super_resources = super().get_android_resources()
return super_resources + [
os.path.join('test', 'inspector', 'debugger', 'resources',
'break-locations.js'),
os.path.join('test', 'inspector', WASM_INSPECTOR_JS),
]
@property
def output_proc(self):
Revert "Revert "[test] Move has unexpected output to outproc."" This reverts commit 1685b5d27ad371dc3ac79ad4a47042a11b5ac814. Reason for revert: Was probably caused by infra change: https://crrev.com/c/845781 Original change's description: > Revert "[test] Move has unexpected output to outproc." > > This reverts commit 71605b3ea4ddb700e9b59f49d16181a8736787b1. > > Reason for revert: Seems to break static-initializers step: > https://build.chromium.org/p/client.v8/builders/V8%20Linux64/builds/22156 > > Original change's description: > > [test] Move has unexpected output to outproc. > > > > Expected outcomes optimized to serialize [PASS] as None. > > > > Keeping expected outcomes inside output processors should be > > optimized in the future. Few possible optimizations: > > - separate classes for tests that are expected to PASS - done as > > an example in mozilla test suite. > > - cache output processors inside testcase. > > - share output processors between copies of the same test - needs > > some updates to the create_variant to update outproc only if > > expected outcomes changed. > > > > Bug: v8:6917 > > Change-Id: Ie73f1dcdf17fdfc65bce27228f818b1dd1e420c9 > > Reviewed-on: https://chromium-review.googlesource.com/843025 > > Commit-Queue: Michael Achenbach <machenbach@chromium.org> > > Reviewed-by: Michael Achenbach <machenbach@chromium.org> > > Cr-Commit-Position: refs/heads/master@{#50347} > > TBR=machenbach@chromium.org,sergiyb@chromium.org,majeski@google.com > > Change-Id: Ice1f3aee0a26f7f38996459d38fd6e0bd964113d > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: v8:6917 > Reviewed-on: https://chromium-review.googlesource.com/849572 > Reviewed-by: Bill Budge <bbudge@chromium.org> > Commit-Queue: Bill Budge <bbudge@chromium.org> > Cr-Commit-Position: refs/heads/master@{#50348} TBR=bbudge@chromium.org,machenbach@chromium.org,sergiyb@chromium.org,majeski@google.com Change-Id: I7a522b6487de6e96985d223524533493eb9171f0 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: v8:6917 Reviewed-on: https://chromium-review.googlesource.com/848975 Reviewed-by: Michael Achenbach <machenbach@chromium.org> Commit-Queue: Michael Achenbach <machenbach@chromium.org> Cr-Commit-Position: refs/heads/master@{#50350}
2018-01-04 07:39:09 +00:00
return outproc.ExpectedOutProc(
self.expected_outcomes,
os.path.join(self.suite.root, self.path) + EXPECTED_SUFFIX,
self.test_config.regenerate_expected_files)