# Copyright (c) 2023 M.J.N. Corino, The Netherlands # # This software is released under the MIT license. require_relative './lib/wxframe_runner' class TopLevelPersistenceTests < WxRuby::Test::GUITests PERSIST_ROOT = 'Persistent_Options' def run_frame_props_tests Wx.persistent_register_and_restore(frame_win, 'TestFrame') frame_win.size = [450, 350] frame_win.position = [100, 150] Wx::PersistenceManager.get.save_and_unregister(frame_win) cfg = Wx::ConfigBase.get assert_kind_of(Wx::ConfigBase, cfg) grp = cfg.get(PERSIST_ROOT) assert_kind_of(cfg.class::Group, grp) grp = grp.get('Window') assert_kind_of(cfg.class::Group, grp) grp = grp.get('TestFrame') assert_kind_of(cfg.class::Group, grp) assert_equal(100, Integer(grp['x'])) assert_equal(150, Integer(grp['y'])) assert_equal(450, Integer(grp.w)) assert_equal(350, Integer(grp.h)) grp.x = 110 grp.y = 140 assert_equal(110, Integer(grp['x'])) assert_equal(140, Integer(grp['y'])) Wx.persistent_register_and_restore(frame_win, 'TestFrame') assert_equal(Wx::Point.new(110, 140), frame_win.position) Wx::PersistenceManager.get.unregister(frame_win) end def test_frame_props_ruby_config # force creation of hash based Wx::Config instance Wx::ConfigBase.create(true, use_hash_config: true) run_frame_props_tests Wx::ConfigBase.get.clear end # default registry based config does not seem to do well in CI build env unless is_ci_build? && Wx::PLATFORM == 'WXMSW' def test_frame_props_default_config # force creation of default C++ config instance Wx::ConfigBase.create(true) run_frame_props_tests Wx::ConfigBase.get.clear end end class PersistentButton < Wx::PersistentWindowBase def get_kind 'Button' end def save save_value('w', get.size.width) save_value('h', get.size.height) save_value('label', get.label) save_value('my_custom_value', get.my_custom_value) end def restore get.size = [Integer(restore_value('w')), Integer(restore_value('h'))] get.label = restore_value('label') get.my_custom_value = Float(restore_value('my_custom_value')) true end end class MyButton < Wx::Button def initialize(parent=nil, name) super(parent, label: '', name: name) @my_custom_value = '' end attr_accessor :my_custom_value def create_persistent_object PersistentButton.new(self) end end def test_custom_persistent_object # force creation of hash based Wx::Config instance Wx::ConfigBase.create(true, use_hash_config: true) assert_false(Wx::ConfigBase.get.has_group?(PERSIST_ROOT)) btn = MyButton.new(frame_win, 'AButton') btn.label = 'Hello world' btn.my_custom_value = 3.14 Wx::PersistenceManager.get.register(btn) assert_false(Wx::ConfigBase.get.has_group?(PERSIST_ROOT)) # destroying window should save and unregister btn.destroy btn = nil assert_true(Wx::ConfigBase.get.has_group?(PERSIST_ROOT)) cfg = Wx::ConfigBase.get[PERSIST_ROOT]['Button']['AButton'] assert_true(cfg.has_entry?('w')) assert_true(cfg.has_entry?('h')) assert_true(cfg.has_entry?('label')) assert_true(cfg.has_entry?('my_custom_value')) btn = MyButton.new(frame_win, 'AButton') Wx::PersistenceManager.get.register_and_restore(btn) assert_equal('Hello world', btn.label) assert_equal(3.14, btn.my_custom_value) end end