36 :
public fuchsia::component::runner::ComponentController,
37 public fuchsia::test::Suite {
42 fuchsia::component::runner::ComponentStartInfo start_info,
43 std::shared_ptr<sys::ServiceDirectory> runner_incoming_services,
44 fidl::InterfaceRequest<fuchsia::component::runner::ComponentController>
46 DoneCallback done_callback);
57 fidl::InterfaceRequest<fuchsia::test::CaseIterator> iterator)
override;
60 void Run(std::vector<fuchsia::test::Invocation>
tests,
61 fuchsia::test::RunOptions
options,
62 fidl::InterfaceHandle<fuchsia::test::RunListener> listener)
override;
64 fidl::InterfaceRequestHandler<fuchsia::test::Suite>
GetHandler() {
65 return suite_bindings_.GetHandler(
this, loop_->dispatcher());
70 fpromise::promise<> RunDartMain();
74 bool CreateAndBindNamespace();
76 bool SetUpFromKernel();
77 bool SetUpFromAppSnapshot();
79 bool CreateIsolate(
const uint8_t* isolate_snapshot_data,
80 const uint8_t* isolate_snapshot_instructions);
88 void OnIdleTimer(async_dispatcher_t* dispatcher,
89 async::WaitBase* wait,
91 const zx_packet_signal* signal);
94 class CaseIterator final :
public fuchsia::test::CaseIterator {
96 CaseIterator(fidl::InterfaceRequest<fuchsia::test::CaseIterator> request,
97 async_dispatcher_t* dispatcher,
98 std::string test_component_name,
99 fit::function<
void(CaseIterator*)> done_callback);
101 void GetNext(GetNextCallback
callback)
override;
104 bool first_case_ =
true;
105 fidl::Binding<fuchsia::test::CaseIterator>
binding_;
106 std::string test_component_name_;
107 fit::function<void(CaseIterator*)> done_callback_;
110 std::unique_ptr<CaseIterator> RemoveCaseInterator(CaseIterator*);
115 fidl::InterfacePtr<fuchsia::test::CaseListener> case_listener_;
116 std::map<CaseIterator*, std::unique_ptr<CaseIterator>> case_iterators_;
121 std::string test_component_name_;
122 std::unique_ptr<sys::ComponentContext> suite_context_;
123 fidl::BindingSet<fuchsia::test::Suite> suite_bindings_;
127 std::unique_ptr<async::Loop> loop_;
128 async::Executor executor_;
132 std::shared_ptr<sys::ServiceDirectory> runner_incoming_services_;
133 std::string data_path_;
134 std::unique_ptr<sys::ComponentContext> context_;
136 fuchsia::component::runner::ComponentStartInfo start_info_;
137 fidl::Binding<fuchsia::component::runner::ComponentController> binding_;
138 DoneCallback done_callback_;
140 zx::socket out_, err_, out_client_, err_client_;
141 fdio_ns_t* namespace_ =
nullptr;
148 std::vector<dart_utils::MappedResource> kernel_peices_;
151 int32_t return_code_ = 0;
153 zx::time idle_start_{0};
154 zx::timer idle_timer_;
156 &DartTestComponentController::OnIdleTimer>
160 DartTestComponentController(
const DartTestComponentController&) =
delete;
161 DartTestComponentController& operator=(
const DartTestComponentController&) =