Sun May 31 19:37:47 CEST 2009 Tobias Rautenkranz * Test return QVariant on the stack diff -rN -u old-qt.tests/src/overload.lisp new-qt.tests/src/overload.lisp --- old-qt.tests/src/overload.lisp 2014-10-30 07:57:38.000000000 +0100 +++ new-qt.tests/src/overload.lisp 2014-10-30 07:57:38.000000000 +0100 @@ -19,3 +19,37 @@ (sleep 3) (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) + (qt:make-variant (cxx:row index)) + (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)))))