qemu/tests
Daniel P. Berrange a8e3fbedc8 qom: Add an object_property_add_enum() helper function
A QOM property can be parsed as enum using the visit_type_enum()
helper function, but this forces callers to use the more complex
generic object_property_add() method when registering it. It
also requires that users of that object have access to the
string map when they want to read the property value.

This patch introduces a specialized object_property_add_enum()
method which simplifies the use of enum properties, so the
setters/getters directly get passed the int value.

  typedef enum {
     MYDEV_TYPE_FROG,
     MYDEV_TYPE_ALLIGATOR,
     MYDEV_TYPE_PLATYPUS,

     MYDEV_TYPE_LAST
  } MyDevType;

Then provide a table of enum <-> string mappings

  static const char *const mydevtypemap[MYDEV_TYPE_LAST + 1] = {
     [MYDEV_TYPE_FROG] = "frog",
     [MYDEV_TYPE_ALLIGATOR] = "alligator",
     [MYDEV_TYPE_PLATYPUS] = "platypus",
     [MYDEV_TYPE_LAST] = NULL,
  };

Assuming an object struct of

   typedef struct {
      Object parent_obj;
      MyDevType devtype;
      ...other fields...
   } MyDev;

The property can then be registered as follows:

   static int mydev_prop_get_devtype(Object *obj,
                                     Error **errp G_GNUC_UNUSED)
   {
       MyDev *dev = MYDEV(obj);

       return dev->devtype;
   }

   static void mydev_prop_set_devtype(Object *obj,
                                      int value,
                                      Error **errp G_GNUC_UNUSED)
   {
       MyDev *dev = MYDEV(obj);

       dev->devtype = value;
   }

   object_property_add_enum(obj, "devtype",
                            mydevtypemap, "MyDevType",
                            mydev_prop_get_devtype,
                            mydev_prop_set_devtype,
                            NULL);

Note there is no need to check the range of 'value' in
the setter, because the string->enum conversion code will
have already done that and reported an error as required.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
2015-06-19 18:42:18 +02:00
..
acpi-test-data acpi: update expected files for memory unplug 2015-05-11 09:21:37 +02:00
image-fuzzer
libqos libqos/ahci: Swap memread/write with bufread/write 2015-05-22 15:58:22 -04:00
multiboot
qapi-schema qapi: Catch and reject flat union branch of array type 2015-06-18 14:19:47 +02:00
qemu-iotests Block layer core and image format patches 2015-06-15 10:43:06 +01:00
rocker rocker: update tests using hw-derived interface names 2015-06-12 13:26:27 +01:00
tcg
vmstate-static-checker-data
.gitignore qom: Add object_new_with_props() / object_new_withpropv() helpers 2015-06-19 18:42:18 +02:00
ac97-test.c
ahci-test.c tests: Use qtest_add_data_func() consistently 2015-06-19 10:29:14 +02:00
bios-tables-test.c bios-tables-test: handle false-positive smbios signature matches 2015-06-10 08:06:47 +02:00
boot-order-test.c
check-block.sh
check-qdict.c check-qdict: Test cases for new functions 2015-06-12 16:58:06 +02:00
check-qfloat.c
check-qint.c
check-qjson.c json-parser: Accept 'null' in QMP 2015-05-11 08:59:07 -04:00
check-qlist.c
check-qom-interface.c
check-qom-proplist.c qom: Add an object_property_add_enum() helper function 2015-06-19 18:42:18 +02:00
check-qstring.c
display-vga-test.c
drive_del-test.c
e1000-test.c tests: Use qtest_add_data_func() consistently 2015-06-19 10:29:14 +02:00
eepro100-test.c tests: Use qtest_add_data_func() consistently 2015-06-19 10:29:14 +02:00
endianness-test.c tests: Use qtest_add_data_func() consistently 2015-06-19 10:29:14 +02:00
es1370-test.c
fdc-test.c fdc-test: Test state for existing cases more thoroughly 2015-06-02 13:34:45 -04:00
fw_cfg-test.c fw_cfg-test: Fix test path to include architecture 2015-03-30 19:19:42 +02:00
hd-geo-test.c
i440fx-test.c i440fx-test: Fix test paths to include architecture 2015-03-30 19:24:54 +02:00
i82801b11-test.c
ide-test.c libqos: add blkdebug_prepare_script 2015-04-28 15:27:51 -04:00
intel-hda-test.c
ioh3420-test.c
ipoctal232-test.c
libqtest.c qtest: pre-buffer hex nibs 2015-05-22 15:58:22 -04:00
libqtest.h qtest: Add base64 encoded read/write 2015-05-22 15:58:22 -04:00
m48t59-test.c
Makefile qom: Add object_new_with_props() / object_new_withpropv() helpers 2015-06-19 18:42:18 +02:00
ne2000-test.c
nvme-test.c
pc-cpu-test.c tests: Use qtest_add_data_func() consistently 2015-06-19 10:29:14 +02:00
pcnet-test.c
pvpanic-test.c
q35-test.c q35: add test for SMRAM.D_LCK 2015-06-05 19:45:09 +02:00
qemu-iotests-quick.sh
qom-test.c tests: Use qtest_add_data_func() consistently 2015-06-19 10:29:14 +02:00
rcutorture.c rcu tests: fix compilation on 32-bit ppc 2015-03-25 13:37:10 +01:00
rtc-test.c
rtl8139-test.c tests: rtl8139: test timers and interrupt 2015-03-12 19:59:39 +00:00
spapr-phb-test.c
test-aio.c Revert "iothread: release iothread around aio_poll" 2015-06-12 13:58:33 +01:00
test-bitops.c
test-coroutine.c test-coroutine: Regression test for yield bug 2015-03-09 11:11:59 +01:00
test-cutils.c
test-hbitmap.c hbitmap: truncate tests 2015-04-28 15:36:11 +02:00
test-int128.c
test-iov.c
test-mul64.c
test-opts-visitor.c
test-qdev-global-props.c
test-qemu-opts.c QemuOpts: Drop qemu_opt_set(), rename qemu_opt_set_err(), fix use 2015-02-26 14:49:31 +01:00
test-qmp-commands.c qapi: Support downstream events and commands 2015-05-14 18:21:27 +02:00
test-qmp-event.c
test-qmp-input-strict.c qapi: Merge UserDefTwo and UserDefNested in tests 2015-05-05 18:39:02 +02:00
test-qmp-input-visitor.c qapi: Drop tests for inline nested structs 2015-05-05 18:39:02 +02:00
test-qmp-output-visitor.c qapi: Drop tests for inline nested structs 2015-05-05 18:39:02 +02:00
test-rcu-list.c rcu tests: fix compilation on 32-bit ppc 2015-03-25 13:37:10 +01:00
test-rfifolock.c
test-string-input-visitor.c
test-string-output-visitor.c
test-thread-pool.c
test-throttle.c throttle: Add throttle group infrastructure tests 2015-06-12 14:00:00 +01:00
test-visitor-serialization.c qapi: Drop tests for inline nested structs 2015-05-05 18:39:02 +02:00
test-vmstate.c
test-write-threshold.c
test-x86-cpuid.c target-i386: Move topology.h to include/hw/i386 2015-03-09 16:30:02 -03:00
test-xbzrle.c
tmp105-test.c
tpci200-test.c
usb-hcd-ehci-test.c
usb-hcd-ohci-test.c misc: fix typos in copyright declaration 2015-03-26 14:21:43 +01:00
usb-hcd-uhci-test.c misc: fix typos in copyright declaration 2015-03-26 14:21:43 +01:00
usb-hcd-xhci-test.c misc: fix typos in copyright declaration 2015-03-26 14:21:43 +01:00
vhost-user-test.c
virtio-9p-test.c
virtio-balloon-test.c
virtio-blk-test.c tests: Check QVIRTIO_F_ANY_LAYOUT flag in virtio-blk test 2015-03-10 14:02:23 +01:00
virtio-console-test.c
virtio-net-test.c
virtio-rng-test.c
virtio-scsi-test.c
virtio-serial-test.c
vmxnet3-test.c
wdt_ib700-test.c