Skip to main content

scene_management_mocks/
mock_scene_manager.rs

1// Copyright 2022 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5use anyhow::Error;
6use async_trait::async_trait;
7use fidl_fuchsia_ui_app as ui_app;
8use fidl_fuchsia_ui_views as ui_views;
9use fidl_fuchsia_ui_views::ViewRef;
10use fuchsia_async as fasync;
11use scene_management::{DisplayMetrics, InjectorViewportSubscriber, SceneManagerTrait};
12use std::cell::{Cell, RefCell};
13
14pub struct MockSceneManager {
15    was_present_root_view_called: Cell<bool>,
16    was_set_root_view_called: Cell<bool>,
17    set_root_view_viewport_token: Cell<Option<ui_views::ViewportCreationToken>>,
18    set_root_view_view_ref: Cell<Option<ViewRef>>,
19    tasks: RefCell<Vec<fasync::Task<()>>>,
20}
21
22impl MockSceneManager {
23    pub fn new() -> Self {
24        MockSceneManager {
25            was_present_root_view_called: Cell::new(false),
26            was_set_root_view_called: Cell::new(false),
27            set_root_view_viewport_token: Cell::new(None),
28            set_root_view_view_ref: Cell::new(None),
29            tasks: RefCell::new(vec![]),
30        }
31    }
32
33    pub fn assert_present_root_view_called(&self) {
34        assert!(self.was_present_root_view_called.get() == true);
35        self.was_present_root_view_called.set(false);
36    }
37
38    pub fn get_set_root_view_called_args(
39        &self,
40    ) -> (ui_views::ViewportCreationToken, Option<ui_views::ViewRef>) {
41        assert!(self.was_set_root_view_called.get() == true);
42        (
43            self.set_root_view_viewport_token
44                .take()
45                .expect("Expected to have a viewport_token from a previous call to set_root_view."),
46            self.set_root_view_view_ref.take(),
47        )
48    }
49}
50
51#[async_trait(?Send)]
52impl SceneManagerTrait for MockSceneManager {
53    fn present_root_view(&self) {
54        self.was_present_root_view_called.set(true);
55    }
56
57    async fn set_root_view(
58        &self,
59        viewport_creation_token: ui_views::ViewportCreationToken,
60        view_ref: Option<ui_views::ViewRef>,
61    ) -> Result<(), Error> {
62        self.was_set_root_view_called.set(true);
63        self.set_root_view_viewport_token.set(Some(viewport_creation_token));
64        self.set_root_view_view_ref.set(view_ref);
65        Ok(())
66    }
67
68    // Leave everything else unimplemented.
69
70    async fn set_root_view_deprecated(
71        &self,
72        _view_provider: ui_app::ViewProviderProxy,
73    ) -> Result<ui_views::ViewRef, Error> {
74        unimplemented!()
75    }
76
77    fn set_cursor_position(&self, _position_physical_px: input_pipeline::Position) {
78        unimplemented!()
79    }
80
81    fn set_cursor_visibility(&self, _visible: bool) {
82        unimplemented!()
83    }
84
85    fn get_pointerinjection_view_refs(&self) -> (ui_views::ViewRef, ui_views::ViewRef) {
86        unimplemented!()
87    }
88
89    fn get_pointerinjection_display_size(&self) -> input_pipeline::Size {
90        unimplemented!()
91    }
92
93    fn get_pointerinjector_viewport_watcher_subscription(&self) -> InjectorViewportSubscriber {
94        unimplemented!()
95    }
96
97    fn get_display_metrics(&self) -> &DisplayMetrics {
98        unimplemented!()
99    }
100
101    fn manage_task(&self, task: fasync::Task<()>) {
102        self.tasks.borrow_mut().push(task);
103    }
104}