- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / media_galleries / linux / mtp_device_object_enumerator_unittest.cc
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
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 "chrome/browser/media_galleries/linux/mtp_device_object_enumerator.h"
6 #include "testing/gtest/include/gtest/gtest.h"
7
8 namespace {
9
10 struct MtpFileEntryData {
11   const char* const name;
12   int64 size;
13   bool is_directory;
14   time_t modification_time;
15 };
16
17 const MtpFileEntryData kTestCases[] = {
18   { "Foo", 123, false, 321 },
19   { "Bar", 234, true, 432 },
20   { "Baaz", 345, false, 543 },
21 };
22
23 void TestEnumeratorIsEmpty(MTPDeviceObjectEnumerator* enumerator) {
24   EXPECT_EQ(0, enumerator->Size());
25   EXPECT_FALSE(enumerator->IsDirectory());
26   EXPECT_TRUE(enumerator->LastModifiedTime().is_null());
27 }
28
29 void TestNextEntryIsEmpty(MTPDeviceObjectEnumerator* enumerator) {
30   EXPECT_TRUE(enumerator->Next().empty());
31 }
32
33 typedef testing::Test MTPDeviceObjectEnumeratorTest;
34
35 TEST_F(MTPDeviceObjectEnumeratorTest, Empty) {
36   std::vector<MtpFileEntry> entries;
37   MTPDeviceObjectEnumerator enumerator(entries);
38   TestEnumeratorIsEmpty(&enumerator);
39   TestNextEntryIsEmpty(&enumerator);
40   TestNextEntryIsEmpty(&enumerator);
41   TestEnumeratorIsEmpty(&enumerator);
42 }
43
44 TEST_F(MTPDeviceObjectEnumeratorTest, Traversal) {
45   std::vector<MtpFileEntry> entries;
46   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) {
47     MtpFileEntry entry;
48     entry.set_file_name(kTestCases[i].name);
49     entry.set_file_size(kTestCases[i].size);
50     entry.set_file_type(kTestCases[i].is_directory ?
51         MtpFileEntry::FILE_TYPE_FOLDER :
52         MtpFileEntry::FILE_TYPE_OTHER);
53     entry.set_modification_time(kTestCases[i].modification_time);
54     entries.push_back(entry);
55   }
56   MTPDeviceObjectEnumerator enumerator(entries);
57   TestEnumeratorIsEmpty(&enumerator);
58   TestEnumeratorIsEmpty(&enumerator);
59   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) {
60     EXPECT_EQ(kTestCases[i].name, enumerator.Next().value());
61     EXPECT_EQ(kTestCases[i].size, enumerator.Size());
62     EXPECT_EQ(kTestCases[i].is_directory, enumerator.IsDirectory());
63     EXPECT_EQ(kTestCases[i].modification_time,
64               enumerator.LastModifiedTime().ToTimeT());
65   }
66   TestNextEntryIsEmpty(&enumerator);
67   TestNextEntryIsEmpty(&enumerator);
68   TestEnumeratorIsEmpty(&enumerator);
69   TestNextEntryIsEmpty(&enumerator);
70   TestEnumeratorIsEmpty(&enumerator);
71 }
72
73 }  // namespace