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)]
52#[allow(unused_variables)]
53impl SceneManagerTrait for MockSceneManager {
54    fn present_root_view(&self) {
55        self.was_present_root_view_called.set(true);
56    }
57
58    async fn set_root_view(
59        &self,
60        viewport_creation_token: ui_views::ViewportCreationToken,
61        view_ref: Option<ui_views::ViewRef>,
62    ) -> Result<(), Error> {
63        self.was_set_root_view_called.set(true);
64        self.set_root_view_viewport_token.set(Some(viewport_creation_token));
65        self.set_root_view_view_ref.set(view_ref);
66        Ok(())
67    }
68
69    // Leave everything else unimplemented.
70
71    async fn set_root_view_deprecated(
72        &self,
73        view_provider: ui_app::ViewProviderProxy,
74    ) -> Result<ui_views::ViewRef, Error> {
75        unimplemented!()
76    }
77
78    fn set_cursor_position(&self, position_physical_px: input_pipeline::Position) {
79        unimplemented!()
80    }
81
82    fn set_cursor_visibility(&self, visible: bool) {
83        unimplemented!()
84    }
85
86    fn get_pointerinjection_view_refs(&self) -> (ui_views::ViewRef, ui_views::ViewRef) {
87        unimplemented!()
88    }
89
90    fn get_pointerinjection_display_size(&self) -> input_pipeline::Size {
91        unimplemented!()
92    }
93
94    fn get_pointerinjector_viewport_watcher_subscription(&self) -> InjectorViewportSubscriber {
95        unimplemented!()
96    }
97
98    fn get_display_metrics(&self) -> &DisplayMetrics {
99        unimplemented!()
100    }
101
102    fn manage_task(&self, task: fasync::Task<()>) {
103        self.tasks.borrow_mut().push(task);
104    }
105}