Refactor summary tests in preparation for adding a one-phase summary API.

I will soon be adding an API for generating summaries that generates
them in one phase, as opposed to the current two-phase approach of
building unlinked summaries and then linking them together.  This is
will be needed in order to support full type inference of summaries,
since full type inference requires examining the contents of
block-bodied closures, and it's not worth the effort of trying
serialize the contents of block-bodied closures into unlinked
summaries.

To prepare for this, the summary tests need to be generalized so that
during the transition period they will be able to be run with either
API.

This CL introduces several classes in a new `test_strategies.dart` file:

- Interfaces `SummaryBaseTestStrategy`, `SummaryBlackBoxTestStrategy`,
  and `SummaryLinkerTestStrategy`.  These interfaces define the
  methods that can be invoked by tests of the summary mechanism.

- Implementations of those interfaces:
  `SummaryBlackBoxTestStrategyPrelink`,
  `SummaryBlackBoxTestStrategyTwoPhase`, and
  `SummaryLinkerTestStrategyTwoPhase`.  These classes provide the
  ability to drive the summary mechanism in various ways.  When the
  one-phase API is added, more classes will be added to drive it.

- A few private classes occupying intermediate positions in the class
  hierarchy, as well as auxiliary data structures needed by the above
  classes.

The tests themselves have been moved into mixin classes so that they
can be applied to any of the implementations above.

Change-Id: Iac3585944297f78f184d35de544aa4c8d8abe99a
Reviewed-on: https://dart-review.googlesource.com/72320
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
8 files changed
tree: 31dc3573583bfef7c1b81869c9c6405fb7fcd1c4
  1. .github/
  2. build/
  3. client/
  4. docs/
  5. pkg/
  6. runtime/
  7. samples/
  8. samples-dev/
  9. sdk/
  10. tests/
  11. third_party/
  12. tools/
  13. utils/
  14. .clang-format
  15. .gitattributes
  16. .gitconfig
  17. .gitignore
  18. .gn
  19. .mailmap
  20. .packages
  21. AUTHORS
  22. BUILD.gn
  23. CHANGELOG.md
  24. codereview.settings
  25. CONTRIBUTING.md
  26. dartdoc_options.yaml
  27. DEPS
  28. LICENSE
  29. PATENTS
  30. PRESUBMIT.py
  31. README.dart-sdk
  32. README.md
  33. WATCHLISTS
README.md

Dart

Dart is an open-source, scalable programming language, with robust libraries and runtimes, for building web, server, and mobile apps.

Using Dart

Visit the dartlang.org to learn more about the language, tools, getting started, and more.

Browse pub.dartlang.org for more packages and libraries contributed by the community and the Dart team.

Building Dart

If you want to build Dart yourself, here is a guide to getting the source, preparing your machine to build the SDK, and building.

There are more documents on our wiki.

Contributing to Dart

The easiest way to contribute to Dart is to file issues.

You can also contribute patches, as described in Contributing.

License & patents

See LICENSE and PATENTS.