1 // Copyright (c) 2013 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 // MTPDeviceObjectEnumerator unit tests. 6 7 #include "chrome/browser/media_galleries/win/mtp_device_object_enumerator.h" 8 9 #include <ctime> 10 11 #include "base/basictypes.h" 12 #include "base/strings/string16.h" 13 #include "base/time/time.h" 14 #include "chrome/browser/media_galleries/win/mtp_device_object_entry.h" 15 #include "testing/gtest/include/gtest/gtest.h" 16 17 namespace { 18 19 struct MTPDeviceObjectEntryData { 20 // Friendly name of the object, e.g. "IMG_9911.jpeg". 21 base::string16 name; 22 23 // The object identifier, e.g. "o299". 24 base::string16 object_id; 25 26 // True if the current object is a directory/folder/album content type. 27 bool is_directory; 28 29 // The object file size in bytes, e.g. "882992". 30 int64 size; 31 32 // Last modified time of the object. 33 time_t last_modified_time; 34 }; 35 36 const MTPDeviceObjectEntryData kTestCases[] = { 37 { L"File_1", L"o100", false, 10023, 1121 }, 38 { L"Directory_1", L"o52", true, 99833, 2231 }, 39 { L"File_2", L"o230", false, 8733, 7372 }, 40 }; 41 42 void TestEnumeratorIsEmpty(MTPDeviceObjectEnumerator* enumerator) { 43 EXPECT_EQ(base::string16(), enumerator->GetObjectId()); 44 EXPECT_EQ(0, enumerator->Size()); 45 EXPECT_FALSE(enumerator->IsDirectory()); 46 EXPECT_TRUE(enumerator->LastModifiedTime().is_null()); 47 } 48 49 void TestNextEntryIsEmpty(MTPDeviceObjectEnumerator* enumerator) { 50 EXPECT_TRUE(enumerator->Next().empty()); 51 } 52 53 typedef testing::Test MTPDeviceObjectEnumeratorWinTest; 54 55 TEST_F(MTPDeviceObjectEnumeratorWinTest, Empty) { 56 MTPDeviceObjectEntries entries; 57 MTPDeviceObjectEnumerator enumerator(entries); 58 TestEnumeratorIsEmpty(&enumerator); 59 TestNextEntryIsEmpty(&enumerator); 60 TestNextEntryIsEmpty(&enumerator); 61 TestEnumeratorIsEmpty(&enumerator); 62 } 63 64 TEST_F(MTPDeviceObjectEnumeratorWinTest, Traversal) { 65 MTPDeviceObjectEntries entries; 66 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { 67 entries.push_back(MTPDeviceObjectEntry( 68 kTestCases[i].object_id, 69 kTestCases[i].name, 70 kTestCases[i].is_directory, 71 kTestCases[i].size, 72 base::Time::FromTimeT(kTestCases[i].last_modified_time))); 73 } 74 MTPDeviceObjectEnumerator enumerator(entries); 75 TestEnumeratorIsEmpty(&enumerator); 76 TestEnumeratorIsEmpty(&enumerator); 77 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { 78 EXPECT_EQ(kTestCases[i].name, enumerator.Next().value()); 79 EXPECT_EQ(kTestCases[i].object_id, enumerator.GetObjectId()); 80 EXPECT_EQ(kTestCases[i].size, enumerator.Size()); 81 EXPECT_EQ(kTestCases[i].is_directory, enumerator.IsDirectory()); 82 EXPECT_EQ(kTestCases[i].last_modified_time, 83 enumerator.LastModifiedTime().ToTimeT()); 84 } 85 TestNextEntryIsEmpty(&enumerator); 86 TestNextEntryIsEmpty(&enumerator); 87 TestEnumeratorIsEmpty(&enumerator); 88 TestNextEntryIsEmpty(&enumerator); 89 TestEnumeratorIsEmpty(&enumerator); 90 } 91 92 } // namespace 93