[M120 Migration][hbbtv] Audio tracks count notification
[platform/framework/web/chromium-efl.git] / media / filters / hls_data_source_provider_unittest.cc
1 // Copyright 2023 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "media/filters/hls_data_source_provider.h"
6 #include "testing/gmock/include/gmock/gmock.h"
7 #include "testing/gtest/include/gtest/gtest.h"
8
9 namespace media {
10
11 class HlsDataSourceStreamUnittest : public testing::Test {
12  public:
13   HlsDataSourceStreamUnittest() = default;
14
15   void OnReleaseInternal(HlsDataSourceStream::StreamId id) { OnRelease(id); }
16
17   MOCK_METHOD(void, OnRelease, (HlsDataSourceStream::StreamId), ());
18
19  protected:
20   std::unique_ptr<HlsDataSourceStream> CreateStream(
21       absl::optional<hls::types::ByteRange> range) {
22     auto stream_id = stream_id_generator_.GenerateNextId();
23     EXPECT_CALL(*this, OnRelease(stream_id));
24     return std::make_unique<HlsDataSourceStream>(
25         stream_id,
26         base::BindOnce(&HlsDataSourceStreamUnittest::OnReleaseInternal,
27                        base::Unretained(this), stream_id),
28         range);
29   }
30
31   HlsDataSourceStream::StreamId::Generator stream_id_generator_;
32 };
33
34 TEST_F(HlsDataSourceStreamUnittest, TestNewStreamHasProperties) {
35   auto stream = CreateStream(absl::nullopt);
36
37   ASSERT_EQ(stream->read_position(), static_cast<size_t>(0));
38   ASSERT_EQ(stream->buffer_size(), static_cast<size_t>(0));
39   ASSERT_EQ(stream->max_read_position(), absl::nullopt);
40   ASSERT_EQ(stream->CanReadMore(), true);
41
42   auto capped = CreateStream(hls::types::ByteRange::Validate(10, 20));
43   ASSERT_EQ(capped->read_position(), static_cast<size_t>(20));
44   ASSERT_EQ(capped->buffer_size(), static_cast<size_t>(0));
45   ASSERT_EQ(capped->max_read_position().value_or(0), static_cast<size_t>(30));
46   ASSERT_EQ(capped->CanReadMore(), true);
47 }
48
49 TEST_F(HlsDataSourceStreamUnittest, TestWritesAndClears) {
50   auto stream = CreateStream(absl::nullopt);
51
52   stream->LockStreamForWriting(10);
53   ASSERT_EQ(stream->read_position(), static_cast<size_t>(0));
54   ASSERT_EQ(stream->buffer_size(), static_cast<size_t>(10));
55   ASSERT_EQ(stream->max_read_position(), absl::nullopt);
56   ASSERT_EQ(stream->CanReadMore(), true);
57
58   // No changes, because no write.
59   stream->UnlockStreamPostWrite(0, false);
60   stream->LockStreamForWriting(10);
61   ASSERT_EQ(stream->read_position(), static_cast<size_t>(0));
62   ASSERT_EQ(stream->buffer_size(), static_cast<size_t>(10));
63   ASSERT_EQ(stream->max_read_position(), absl::nullopt);
64   ASSERT_EQ(stream->CanReadMore(), true);
65
66   stream->UnlockStreamPostWrite(10, false);
67   ASSERT_EQ(stream->read_position(), static_cast<size_t>(10));
68   ASSERT_EQ(stream->buffer_size(), static_cast<size_t>(10));
69   ASSERT_EQ(stream->max_read_position(), absl::nullopt);
70   ASSERT_EQ(stream->CanReadMore(), true);
71
72   stream->LockStreamForWriting(10);
73   ASSERT_EQ(stream->read_position(), static_cast<size_t>(10));
74   ASSERT_EQ(stream->buffer_size(), static_cast<size_t>(20));
75   ASSERT_EQ(stream->max_read_position(), absl::nullopt);
76   ASSERT_EQ(stream->CanReadMore(), true);
77
78   stream->UnlockStreamPostWrite(10, false);
79   stream->Clear();
80   ASSERT_EQ(stream->read_position(), static_cast<size_t>(20));
81   ASSERT_EQ(stream->buffer_size(), static_cast<size_t>(0));
82   ASSERT_EQ(stream->max_read_position(), absl::nullopt);
83   ASSERT_EQ(stream->CanReadMore(), true);
84 }
85
86 }  // namespace media