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());
69 bool method_has_response)
override;
73 fpromise::promise<> RunDartMain();
77 bool CreateAndBindNamespace();
79 bool SetUpFromKernel();
80 bool SetUpFromAppSnapshot();
82 bool CreateIsolate(
const uint8_t* isolate_snapshot_data,
83 const uint8_t* isolate_snapshot_instructions);
90 void MessageEpilogue(Dart_Handle result);
91 void OnIdleTimer(async_dispatcher_t* dispatcher,
92 async::WaitBase* wait,
94 const zx_packet_signal* signal);
97 class CaseIterator final :
public fuchsia::test::CaseIterator {
99 CaseIterator(fidl::InterfaceRequest<fuchsia::test::CaseIterator> request,
100 async_dispatcher_t* dispatcher,
101 std::string test_component_name,
102 fit::function<
void(CaseIterator*)> done_callback);
104 void GetNext(GetNextCallback
callback)
override;
107 bool first_case_ =
true;
108 fidl::Binding<fuchsia::test::CaseIterator>
binding_;
109 std::string test_component_name_;
110 fit::function<void(CaseIterator*)> done_callback_;
113 std::unique_ptr<CaseIterator> RemoveCaseInterator(CaseIterator*);
118 fidl::InterfacePtr<fuchsia::test::CaseListener> case_listener_;
119 std::map<CaseIterator*, std::unique_ptr<CaseIterator>> case_iterators_;
124 std::string test_component_name_;
125 std::unique_ptr<sys::ComponentContext> suite_context_;
126 fidl::BindingSet<fuchsia::test::Suite> suite_bindings_;
130 std::unique_ptr<async::Loop> loop_;
131 async::Executor executor_;
135 std::shared_ptr<sys::ServiceDirectory> runner_incoming_services_;
136 std::string data_path_;
137 std::unique_ptr<sys::ComponentContext> context_;
139 fuchsia::component::runner::ComponentStartInfo start_info_;
140 fidl::Binding<fuchsia::component::runner::ComponentController> binding_;
141 DoneCallback done_callback_;
143 zx::socket out_, err_, out_client_, err_client_;
144 fdio_ns_t* namespace_ =
nullptr;
151 std::vector<dart_utils::MappedResource> kernel_peices_;
153 Dart_Isolate isolate_;
154 int32_t return_code_ = 0;
156 zx::time idle_start_{0};
157 zx::timer idle_timer_;
159 &DartTestComponentController::OnIdleTimer>
163 DartTestComponentController(
const DartTestComponentController&) =
delete;
164 DartTestComponentController& operator=(
const DartTestComponentController&) =