1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// found in the LICENSE file.
4c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "media/blink/buffered_data_source_host_impl.h"
6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace media {
9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
10c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass BufferedDataSourceHostImplTest : public testing::Test {
11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public:
12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  BufferedDataSourceHostImplTest() {}
13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  void Add() {
15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    host_.AddBufferedTimeRanges(&ranges_, base::TimeDelta::FromSeconds(10));
16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  }
17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch protected:
19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  BufferedDataSourceHostImpl host_;
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Ranges<base::TimeDelta> ranges_;
21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  DISALLOW_COPY_AND_ASSIGN(BufferedDataSourceHostImplTest);
23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch};
24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(BufferedDataSourceHostImplTest, Empty) {
26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_FALSE(host_.DidLoadingProgress());
27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  Add();
28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(0u, ranges_.size());
29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(BufferedDataSourceHostImplTest, AddBufferedTimeRanges) {
32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  host_.AddBufferedByteRange(10, 20);
33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  host_.SetTotalBytes(100);
34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  Add();
35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(1u, ranges_.size());
36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(base::TimeDelta::FromSeconds(1), ranges_.start(0));
37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(base::TimeDelta::FromSeconds(2), ranges_.end(0));
38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
39c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
40c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(BufferedDataSourceHostImplTest, AddBufferedTimeRanges_Merges) {
41c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ranges_.Add(base::TimeDelta::FromSeconds(0), base::TimeDelta::FromSeconds(1));
42c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  host_.AddBufferedByteRange(10, 20);
43c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  host_.SetTotalBytes(100);
44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  Add();
45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(1u, ranges_.size());
46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(base::TimeDelta::FromSeconds(0), ranges_.start(0));
47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(base::TimeDelta::FromSeconds(2), ranges_.end(0));
48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(BufferedDataSourceHostImplTest, AddBufferedTimeRanges_Snaps) {
51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  host_.AddBufferedByteRange(5, 995);
52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  host_.SetTotalBytes(1000);
53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  Add();
54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(1u, ranges_.size());
55c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(base::TimeDelta::FromSeconds(0), ranges_.start(0));
56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(base::TimeDelta::FromSeconds(10), ranges_.end(0));
57c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(BufferedDataSourceHostImplTest, SetTotalBytes) {
60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  host_.AddBufferedByteRange(10, 20);
61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  Add();
62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(0u, ranges_.size());
63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  host_.SetTotalBytes(100);
65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  Add();
66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_EQ(1u, ranges_.size());
67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
68c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(BufferedDataSourceHostImplTest, DidLoadingProgress) {
70c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  host_.AddBufferedByteRange(10, 20);
71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_TRUE(host_.DidLoadingProgress());
72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  EXPECT_FALSE(host_.DidLoadingProgress());
73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace media
76