190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "chrome/browser/sync_file_system/file_change.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace sync_file_system { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FileChange AddOrUpdateFile() { 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, SYNC_FILE_TYPE_FILE); 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FileChange DeleteFile() { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return FileChange(FileChange::FILE_CHANGE_DELETE, SYNC_FILE_TYPE_FILE); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FileChange AddDirectory() { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SYNC_FILE_TYPE_DIRECTORY); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FileChange DeleteDirectory() { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return FileChange(FileChange::FILE_CHANGE_DELETE, SYNC_FILE_TYPE_DIRECTORY); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <size_t INPUT_SIZE> 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CreateList(FileChangeList* list, const FileChange (&inputs)[INPUT_SIZE]) { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list->clear(); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < INPUT_SIZE; ++i) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list->Update(inputs[i]); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <size_t EXPECTED_SIZE> 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void VerifyList(const FileChangeList& list, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange (&expected)[EXPECTED_SIZE]) { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE(testing::Message() << "actual:" << list.DebugString()); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(EXPECTED_SIZE, list.size()); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < list.size(); ++i) { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE(testing::Message() << i << ": " 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << " expected:" << expected[i].DebugString() 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << " actual:" << list.list().at(i).DebugString()); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected[i], list.list().at(i)); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(FileChangeListTest, UpdateSimple) { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileChangeList list; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange kInput1[] = { AddOrUpdateFile() }; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange kExpected1[] = { AddOrUpdateFile() }; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateList(&list, kInput1); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyList(list, kExpected1); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AddOrUpdate + Delete -> Delete. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange kInput2[] = { AddOrUpdateFile(), DeleteFile() }; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange kExpected2[] = { DeleteFile() }; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateList(&list, kInput2); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyList(list, kExpected2); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add + Delete -> empty (directory). 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange kInput3[] = { AddDirectory(), DeleteDirectory() }; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateList(&list, kInput3); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(list.empty()); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delete + AddOrUpdate -> AddOrUpdate. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange kInput4[] = { DeleteFile(), AddOrUpdateFile() }; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange kExpected4[] = { AddOrUpdateFile() }; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateList(&list, kInput4); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyList(list, kExpected4); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delete + Add -> Add (directory). 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange kInput5[] = { DeleteDirectory(), AddDirectory() }; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange kExpected5[] = { AddDirectory() }; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateList(&list, kInput5); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyList(list, kExpected5); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(FileChangeListTest, UpdateCombined) { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileChangeList list; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Longer ones. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange kInput1[] = { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddOrUpdateFile(), 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddOrUpdateFile(), 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddOrUpdateFile(), 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddOrUpdateFile(), 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteFile(), 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddDirectory(), 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange kExpected1[] = { DeleteFile(), AddDirectory() }; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateList(&list, kInput1); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyList(list, kExpected1); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange kInput2[] = { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddOrUpdateFile(), 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteFile(), 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddOrUpdateFile(), 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddOrUpdateFile(), 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddOrUpdateFile(), 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange kExpected2[] = { AddOrUpdateFile() }; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateList(&list, kInput2); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyList(list, kExpected2); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange kInput3[] = { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddDirectory(), 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteDirectory(), 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddOrUpdateFile(), 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddOrUpdateFile(), 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddOrUpdateFile(), 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange kExpected3[] = { AddOrUpdateFile() }; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateList(&list, kInput3); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyList(list, kExpected3); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange kInput4[] = { 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddDirectory(), 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteDirectory(), 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddOrUpdateFile(), 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteFile(), 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddOrUpdateFile(), 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteFile(), 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileChange kExpected4[] = { DeleteFile() }; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateList(&list, kInput4); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyList(list, kExpected4); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace sync_file_system 137