| # Tests for Dart dynamic modules | |
| This folder contains tests for an experiment of implementing dynamic modules in | |
| Dart. All tests are written in the style of the language end-to-end tests. | |
| ## Folder structure | |
| Each folder consists of a single test scenario. You'll find 4 kinds of files: | |
| * `main.dart`: the host application that will later load dynamic modules. | |
| This will be the core driver of the test. | |
| * `shared/`: folder containing multiple libraries with code that can be used | |
| by both the host application and dynamic modules. | |
| * `modules/`: folder containing code private to dynamic modules. It includes | |
| libraries with common code as well as an entrypoint file per dynamic | |
| module. Entrypoint files are named `entryN.dart` and must define an | |
| exported dynamic module entrypoint. Note: semantics limit that two | |
| dynamic modules can't share code unless they are compiled in a chained | |
| fashion, currently the test harness focuses on compiling modules in | |
| isolation and ensuring conflicts don't arise. | |
| * `dynamic_interface.yaml`: a contract specifying what parts of the host | |
| application and libraries in `shared/` are visible to dynamic modules. | |
| ## Execution | |
| We've build a test framework that frontloads compilation, so that execution of | |
| the test can be streamlined. This means that: | |
| * The host app will be compiled first, using `dynamic_interface.yaml` as a | |
| specification for AOT compilers. | |
| * Each and every dynamic module entrypoint in `modules/` will be compiled to | |
| create a dynamic module artifact. | |
| * Finally an execution environment will be launched that will in turn load each | |
| dynamic module as prompted by the test logic. | |
| Commands to drive the loading and execution of each dynamic module are | |
| controlled by a helper library in `../common/testing.dart`, which | |
| uses the Dart SDK API and abstracts away differences between platforms. | |
| ## Example | |
| Refer to `update_top_level`. This is one of the simplest tests that illustrates | |
| the utilities and concepts in this framework. |