(in-package :qt.tests) (5am:in-suite :qt.suite) (defclass my-object (qt:object) ((counter :accessor counter :initform 0)) (:metaclass cxx:class)) (defmethod cxx:timer-event ((object my-object) event) (incf (counter object)) (cxx:quit (qt:app))) (5am:test timer (let ((object (make-instance 'my-object))) (qt:with-core-app () (5am:is (= 0 (counter object))) (cxx:start-timer object 0) (with-timeout (5) (qt:exec)) (5am:is (= 1 (counter object)))))) (defclass my-list-model (qt:abstract-list-model) ((counter :accessor counter :initform 0)) (:metaclass cxx:class)) (defmethod cxx:data ((list my-list-model) index role) (incf (counter list)) (if (< (cxx:row index) 2) (cxx:row index) ;; cl-smoke converts to the required qt:variant (qt:make-variant))) (defmethod cxx:row-count ((list my-list-model) parent) 2) (5am:test return-on-stack "Test virtual method return value on stack." (let ((list (make-instance 'my-list-model)) (proxy (make-instance 'qt:sort-filter-proxy-model))) (5am:is (= 0 (counter list))) (setf (cxx:source-model proxy) list) (dotimes (i 10) ;; test for faulty ownership transfer (cxx:sort proxy 0) (gc :full t)) (5am:is (< 0 (counter list))))) (5am:test return-on-stack-c++ (let ((list (make-instance 'qt:string-list-model :args (list #("foo" "bar")))) (proxy (make-instance 'qt:sort-filter-proxy-model))) (setf (cxx:source-model proxy) list) (dotimes (i 10) ;; test for faulty ownership transfer (cxx:sort proxy 0) (gc :full t)) (5am:is (= 2 (cxx:row-count list)))))