[RFC PATCH-for-10.1 6/6] qom: Test object_class_get_list()

Philippe Mathieu-Daudé posted 6 patches 10 months, 3 weeks ago
Maintainers: "Marc-André Lureau" <marcandre.lureau@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, Alistair Francis <alistair@alistair23.me>, "Edgar E. Iglesias" <edgar.iglesias@gmail.com>, Peter Maydell <peter.maydell@linaro.org>, Eduardo Habkost <eduardo@habkost.net>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, Yanan Wang <wangyanan55@huawei.com>, Zhao Liu <zhao1.liu@intel.com>, Stefano Stabellini <sstabellini@kernel.org>, Anthony PERARD <anthony@xenproject.org>, Paul Durrant <paul@xen.org>, Richard Henderson <richard.henderson@linaro.org>, "Michael S. Tsirkin" <mst@redhat.com>, "Daniel P. Berrangé" <berrange@redhat.com>, Stefan Berger <stefanb@linux.vnet.ibm.com>, Yoshinori Sato <ysato@users.sourceforge.jp>
[RFC PATCH-for-10.1 6/6] qom: Test object_class_get_list()
Posted by Philippe Mathieu-Daudé 10 months, 3 weeks ago
RFC FIXME: this doesn't work well :/

In the first iteration the TYPE_TEST_IF is ambiguous (matched 2 times)
so OBJECT_CLASS_CHECK() triggers the cast exception.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 tests/unit/check-qom-interface.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/tests/unit/check-qom-interface.c b/tests/unit/check-qom-interface.c
index c43a63e8b3c..8a997220e06 100644
--- a/tests/unit/check-qom-interface.c
+++ b/tests/unit/check-qom-interface.c
@@ -115,10 +115,26 @@ static void interface_ambiguous_test(void)
 {
     Object *obj = object_new(TYPE_INDIRECT_IMPL);
     ObjectClass *klass = object_get_class(obj);
+    GSList *list, *el;
 
     g_assert(object_class_implements_type(klass, TYPE_TEST_IF2A));
     g_assert(object_class_implements_type(klass, TYPE_TEST_IF2B));
     g_assert(object_class_implements_type(klass, TYPE_TEST_IF));
+    list = object_class_get_list(TYPE_TEST_IF, true);
+    for (el = list; el; el = el->next) {
+        TestIfClass *ioc = el->data;
+        printf("%x %x\n", ioc->test, PATTERN);
+        //g_assert(ioc->test == PATTERN);
+    }
+    g_free(list);
+    list = object_class_get_list(TYPE_TEST_IF2A, true);
+    for (el = list; el; el = el->next) {
+        TestIfClass *dc = OBJECT_CLASS_CHECK(TestIfClass, el->data,
+                                             TYPE_TEST_IF2A);
+        printf("%x %x\n", dc->test, PATTERN);
+        //g_assert(ioc->test == PATTERN);
+    }
+    g_free(list);
     object_unref(obj);
 }
 
-- 
2.47.1