// Copyright © SixtyFPS GmbH // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 import { AboutSlint, Button } from "std-widgets.slint"; export component TestCase inherits Window { width: 300px; height: 300px; in-out property result; MenuBar { Menu { title: "File"; MenuSeparator {} // should be hidden MenuItem { title: "New"; activated => { result += self.title; debug("New"); } } MenuItem { title: "Open"; activated => { debug("Open"); } } Menu { function open-recent(entry: string) { result += entry; debug(entry); } title: "Open Recent"; MenuItem { title: "Recent 1"; activated => { open-recent("Recent 1"); } } MenuItem { title: "Recent 2"; activated => { open-recent("Recent 2"); } } MenuItem { title: "Recent 3"; activated => { open-recent("Recent 3"); } } } MenuItem { title: "Checkable"; checkable: true; checked <=> checkable-menu-item-checked; } MenuSeparator {} MenuSeparator {} MenuItem { title: "Save"; activated => { result += "Save"; debug("Save"); } } } Menu { title: "Edit"; MenuItem { title: "Copy"; activated => { debug("Copy"); } } MenuItem { title: "Paste"; activated => { debug("Paste"); } } } } vl := VerticalLayout { AboutSlint {} Button { text: "Hello"; } } out property check-geometry: vl.x == 0 && vl.y == 0 && vl.width == root.width && vl.height == root.height; out property test: check-geometry; out property checkable-menu-item-checked; } /* ```rust use slint::{SharedString, platform::{Key}}; let instance = TestCase::new().unwrap(); assert!(instance.get_test()); // click on the file menu slint_testing::send_mouse_click(&instance, 10., 16.); // navigate using the keys to the "Open Recent" menu item slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(Key::DownArrow)); slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(Key::DownArrow)); slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(Key::DownArrow)); slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(Key::RightArrow)); slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(Key::UpArrow)); assert_eq!(instance.get_result(), ""); slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from("\n")); assert_eq!(instance.get_result(), "Recent 3"); instance.set_result("".into()); //click on the file menu slint_testing::send_mouse_click(&instance, 10., 16.); assert_eq!(instance.get_result(), ""); // click on the first entry (new) (this value seems to work with all styles) slint_testing::send_mouse_click(&instance, 30., 49.); assert_eq!(instance.get_result(), "New"); instance.set_result("".into()); // click on the file menu slint_testing::send_mouse_click(&instance, 10., 16.); // arrow should skip the separators before "save" slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(Key::DownArrow)); // New slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(Key::DownArrow)); // Open slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(Key::DownArrow)); // Open Recent slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(Key::DownArrow)); // Checkable slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(Key::DownArrow)); // Save (skipped the separator) assert_eq!(instance.get_result(), ""); slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from("\n")); assert_eq!(instance.get_result(), "Save"); // verify that the checked menu item is not checked assert!(!instance.get_checkable_menu_item_checked()); // click on the file menu slint_testing::send_mouse_click(&instance, 10., 16.); // navigate using the keys to the "Checked" menu item and toggle it slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(Key::DownArrow)); slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(Key::DownArrow)); slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(Key::DownArrow)); slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(Key::DownArrow)); slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from("\n")); // verify that the checked menu item is checked assert!(instance.get_checkable_menu_item_checked()); ``` ```cpp auto handle = TestCase::create(); const TestCase &instance = *handle; assert(instance.get_test()); // click on the file menu slint_testing::send_mouse_click(&instance, 10., 16.); // navigate using the keys to the "Open Recent" menu item slint_testing::send_keyboard_string_sequence(&instance, slint::platform::key_codes::DownArrow); slint_testing::send_keyboard_string_sequence(&instance, slint::platform::key_codes::DownArrow); slint_testing::send_keyboard_string_sequence(&instance, slint::platform::key_codes::DownArrow); slint_testing::send_keyboard_string_sequence(&instance, slint::platform::key_codes::RightArrow); slint_testing::send_keyboard_string_sequence(&instance, slint::platform::key_codes::UpArrow); assert_eq(instance.get_result(), ""); slint_testing::send_keyboard_string_sequence(&instance, "\n"); assert_eq(instance.get_result(), "Recent 3"); instance.set_result(""); //click on the file menu slint_testing::send_mouse_click(&instance, 10., 16.); assert_eq(instance.get_result(), ""); // click on the first entry (new) (this value seems to work with all styles) slint_testing::send_mouse_click(&instance, 30., 49.); assert_eq(instance.get_result(), "New"); instance.set_result(""); // click on the file menu slint_testing::send_mouse_click(&instance, 10., 16.); // arrow should skip the separators before "save" slint_testing::send_keyboard_string_sequence(&instance, slint::platform::key_codes::DownArrow); // New slint_testing::send_keyboard_string_sequence(&instance, slint::platform::key_codes::DownArrow); // Open slint_testing::send_keyboard_string_sequence(&instance, slint::platform::key_codes::DownArrow); // Open Recent slint_testing::send_keyboard_string_sequence(&instance, slint::platform::key_codes::DownArrow); // Checkable slint_testing::send_keyboard_string_sequence(&instance, slint::platform::key_codes::DownArrow); // Save (skipped the separator) assert_eq(instance.get_result(), ""); slint_testing::send_keyboard_string_sequence(&instance, "\n"); assert_eq(instance.get_result(), "Save"); // verify that the checked menu item is not checked assert(!instance.get_checkable_menu_item_checked()); // click on the file menu slint_testing::send_mouse_click(&instance, 10., 16.); // navigate using the keys to the "Checked" menu item and toggle it slint_testing::send_keyboard_string_sequence(&instance, slint::platform::key_codes::DownArrow); slint_testing::send_keyboard_string_sequence(&instance, slint::platform::key_codes::DownArrow); slint_testing::send_keyboard_string_sequence(&instance, slint::platform::key_codes::DownArrow); slint_testing::send_keyboard_string_sequence(&instance, slint::platform::key_codes::DownArrow); slint_testing::send_keyboard_string_sequence(&instance, "\n"); // verify that the checked menu item is checked assert(instance.get_checkable_menu_item_checked()); ``` */