diff options
Diffstat (limited to 'cras/src/tests/stream_list_unittest.cc')
-rw-r--r-- | cras/src/tests/stream_list_unittest.cc | 63 |
1 files changed, 60 insertions, 3 deletions
diff --git a/cras/src/tests/stream_list_unittest.cc b/cras/src/tests/stream_list_unittest.cc index 8f3c2e3e..40be35d0 100644 --- a/cras/src/tests/stream_list_unittest.cc +++ b/cras/src/tests/stream_list_unittest.cc @@ -28,13 +28,16 @@ static int removed_cb(struct cras_rstream* rstream) { static unsigned int create_called; static struct cras_rstream_config* create_config; -static struct cras_rstream dummy_rstream; static int create_rstream_cb(struct cras_rstream_config* stream_config, struct cras_rstream** stream) { create_called++; create_config = stream_config; - *stream = &dummy_rstream; - dummy_rstream.stream_id = 0x3003; + *stream = (struct cras_rstream*)malloc(sizeof(struct cras_rstream)); + (*stream)->stream_id = stream_config->stream_id; + (*stream)->direction = stream_config->direction; + if (stream_config->format) + (*stream)->format = *(stream_config->format); + return 0; } @@ -43,6 +46,7 @@ static struct cras_rstream* destroyed_stream; static void destroy_rstream_cb(struct cras_rstream* rstream) { destroy_called++; destroyed_stream = rstream; + free(rstream); } static void reset_test_data() { @@ -57,6 +61,10 @@ TEST(StreamList, AddRemove) { struct cras_rstream* s1; struct cras_rstream_config s1_config; + s1_config.stream_id = 0x3003; + s1_config.direction = CRAS_STREAM_OUTPUT; + s1_config.format = NULL; + reset_test_data(); l = stream_list_create(added_cb, removed_cb, create_rstream_cb, destroy_rstream_cb, NULL); @@ -72,6 +80,55 @@ TEST(StreamList, AddRemove) { stream_list_destroy(l); } +TEST(StreamList, AddInDescendingOrderByChannels) { + struct stream_list* l; + struct cras_rstream* s1; + struct cras_rstream* s2; + struct cras_rstream* s3; + struct cras_audio_format s1_format, s2_format, s3_format; + struct cras_rstream_config s1_config, s2_config, s3_config; + + s1_config.stream_id = 0x4001; + s1_config.direction = CRAS_STREAM_INPUT; + s1_format.num_channels = 6; + s1_config.format = &s1_format; + + s2_config.stream_id = 0x4002; + s2_config.direction = CRAS_STREAM_OUTPUT; + s2_format.num_channels = 8; + s2_config.format = &s2_format; + + s3_config.stream_id = 0x4003; + s3_config.direction = CRAS_STREAM_OUTPUT; + s3_format.num_channels = 2; + s3_config.format = &s3_format; + + reset_test_data(); + l = stream_list_create(added_cb, removed_cb, create_rstream_cb, + destroy_rstream_cb, NULL); + stream_list_add(l, &s1_config, &s1); + EXPECT_EQ(1, add_called); + EXPECT_EQ(1, create_called); + EXPECT_EQ(6, stream_list_get(l)->format.num_channels); + + stream_list_add(l, &s2_config, &s2); + EXPECT_EQ(2, add_called); + EXPECT_EQ(2, create_called); + EXPECT_EQ(8, stream_list_get(l)->format.num_channels); + EXPECT_EQ(6, stream_list_get(l)->next->format.num_channels); + + stream_list_add(l, &s3_config, &s3); + EXPECT_EQ(3, add_called); + EXPECT_EQ(3, create_called); + EXPECT_EQ(8, stream_list_get(l)->format.num_channels); + EXPECT_EQ(6, stream_list_get(l)->next->format.num_channels); + EXPECT_EQ(2, stream_list_get(l)->next->next->format.num_channels); + EXPECT_EQ(0, stream_list_rm(l, 0x4001)); + EXPECT_EQ(0, stream_list_rm(l, 0x4002)); + EXPECT_EQ(0, stream_list_rm(l, 0x4003)); + stream_list_destroy(l); +} + extern "C" { struct cras_timer* cras_tm_create_timer(struct cras_tm* tm, |