mirror of
				https://github.com/slint-ui/slint.git
				synced 2025-11-04 05:34:37 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			41 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Copyright © SixtyFPS GmbH <info@slint.dev>
 | 
						|
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0
 | 
						|
 | 
						|
from slint import slint as native
 | 
						|
import weakref
 | 
						|
import gc
 | 
						|
 | 
						|
 | 
						|
def test_callback_gc():
 | 
						|
    compiler = native.Compiler()
 | 
						|
 | 
						|
    compdef = compiler.build_from_source("""
 | 
						|
        export component Test {
 | 
						|
            out property <string> test-value: "Ok";
 | 
						|
            callback test-callback(string) -> string;
 | 
						|
        }
 | 
						|
    """, "").component("Test")
 | 
						|
    assert compdef != None
 | 
						|
 | 
						|
    instance = compdef.create()
 | 
						|
    assert instance != None
 | 
						|
 | 
						|
    class Handler:
 | 
						|
        def __init__(self, instance):
 | 
						|
            self.instance = instance
 | 
						|
 | 
						|
        def python_callback(self, input):
 | 
						|
            return input + instance.get_property("test-value")
 | 
						|
 | 
						|
    handler = Handler(instance)
 | 
						|
    instance.set_callback(
 | 
						|
        "test-callback", handler.python_callback)
 | 
						|
    handler = None
 | 
						|
 | 
						|
    assert instance.invoke("test-callback", "World") == "WorldOk"
 | 
						|
 | 
						|
    wr = weakref.ref(instance)
 | 
						|
    assert wr() is not None
 | 
						|
    instance = None
 | 
						|
    gc.collect()
 | 
						|
    assert wr() is None
 |