[alsa-devel] [alsa-lib][PATCH] test: add a test for list operation to user-defined element sets
Takashi Sakamoto
o-takashi at sakamocchi.jp
Wed May 24 16:34:14 CEST 2017
Current implementation of test for user-defined element doesn't perform
list operation. This commit adds easy test for the operation.
Signed-off-by: Takashi Sakamoto <o-takashi at sakamocchi.jp>
---
test/user-ctl-element-set.c | 80 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 80 insertions(+)
diff --git a/test/user-ctl-element-set.c b/test/user-ctl-element-set.c
index 75083d21..8635c156 100644
--- a/test/user-ctl-element-set.c
+++ b/test/user-ctl-element-set.c
@@ -433,6 +433,78 @@ static int check_event(struct elem_set_trial *trial, unsigned int mask,
return 0;
}
+static int check_elem_list(struct elem_set_trial *trial)
+{
+ snd_ctl_elem_list_t *list;
+ snd_ctl_elem_id_t *id;
+ int e;
+ unsigned int i;
+ int err;
+
+ snd_ctl_elem_list_alloca(&list);
+ snd_ctl_elem_id_alloca(&id);
+
+ err = snd_ctl_elem_list(trial->handle, list);
+ if (err < 0)
+ return err;
+
+ /* Certainly some elements are already added. */
+ if (snd_ctl_elem_list_get_count(list) == 0)
+ return -EIO;
+
+ err = snd_ctl_elem_list_alloc_space(list,
+ snd_ctl_elem_list_get_count(list));
+ if (err < 0)
+ return err;
+
+ err = snd_ctl_elem_list(trial->handle, list);
+ if (err < 0)
+ goto end;
+
+ if (trial->element_count > snd_ctl_elem_list_get_count(list)) {
+ err = -EIO;
+ goto end;
+ }
+
+ i = 0;
+ for (e = 0; e < snd_ctl_elem_list_get_count(list); ++e) {
+ snd_ctl_elem_list_get_id(list, e, id);
+
+ if (strcmp(snd_ctl_elem_id_get_name(id),
+ snd_ctl_elem_id_get_name(trial->id)) != 0)
+ continue;
+ if (snd_ctl_elem_id_get_interface(id) !=
+ snd_ctl_elem_id_get_interface(trial->id))
+ continue;
+ if (snd_ctl_elem_id_get_device(id) !=
+ snd_ctl_elem_id_get_device(trial->id))
+ continue;
+ if (snd_ctl_elem_id_get_subdevice(id) !=
+ snd_ctl_elem_id_get_subdevice(trial->id))
+ continue;
+
+ /*
+ * Here, I expect the list includes element ID data in numerical
+ * order. Actually, it does.
+ */
+ if (snd_ctl_elem_id_get_numid(id) !=
+ snd_ctl_elem_id_get_numid(trial->id) + i)
+ continue;
+ if (snd_ctl_elem_id_get_index(id) !=
+ snd_ctl_elem_id_get_index(trial->id) + i)
+ continue;
+
+ ++i;
+ }
+
+ if (i != trial->element_count)
+ err = -EIO;
+end:
+ snd_ctl_elem_list_free_space(list);
+
+ return err;
+}
+
static int check_elem_set_props(struct elem_set_trial *trial)
{
snd_ctl_elem_id_t *id;
@@ -701,6 +773,14 @@ int main(void)
break;
}
+ /* Check added elements are retrieved in a list. */
+ err = check_elem_list(&trial);
+ if (err < 0) {
+ printf("Fail to list each element with %s type.\n",
+ snd_ctl_elem_type_name(trial.type));
+ break;
+ }
+
/* Check properties of each element in this element set. */
err = check_elem_set_props(&trial);
if (err < 0) {
--
2.11.0
More information about the Alsa-devel
mailing list