16d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 26d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 36d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// found in the LICENSE file. 46d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 56d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "chrome/browser/apps/drive/drive_app_mapping.h" 66d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 76d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "base/macros.h" 86d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 96d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "chrome/test/base/testing_pref_service_syncable.h" 106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)class DriveAppMappingTest : public testing::Test { 136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) public: 146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) DriveAppMappingTest() {} 156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) virtual ~DriveAppMappingTest() {} 166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // testing::Test: 186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) virtual void SetUp() OVERRIDE { 196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) pref_service_.reset(new TestingPrefServiceSyncable); 206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) DriveAppMapping::RegisterProfilePrefs(pref_service_->registry()); 216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) mapping_.reset(new DriveAppMapping(pref_service_.get())); 236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) DriveAppMapping* mapping() { return mapping_.get(); } 266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) private: 286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) scoped_ptr<TestingPrefServiceSyncable> pref_service_; 296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) scoped_ptr<DriveAppMapping> mapping_; 306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DriveAppMappingTest); 326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}; 336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)TEST_F(DriveAppMappingTest, Empty) { 356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("", mapping()->GetChromeApp("")); 366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("", mapping()->GetDriveApp("")); 376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("", mapping()->GetChromeApp("non-existent-drive-app")); 386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("", mapping()->GetDriveApp("non-existent-chrome-app")); 396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(0u, mapping()->GetDriveAppIds().size()); 406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)TEST_F(DriveAppMappingTest, Add) { 436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) std::set<std::string> drive_app_ids; 446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 456d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Add one. 466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) mapping()->Add("drive", "chrome", false); 476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("chrome", mapping()->GetChromeApp("drive")); 486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("drive", mapping()->GetDriveApp("chrome")); 496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_FALSE(mapping()->IsChromeAppGenerated("chrome")); 506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) drive_app_ids = mapping()->GetDriveAppIds(); 516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(1u, drive_app_ids.size()); 526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(1u, drive_app_ids.count("drive")); 536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Overwrite previous mapping if added under the same key. 556d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) mapping()->Add("drive", "another-chrome-app", true); 566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("", mapping()->GetDriveApp("chrome")); 576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_FALSE(mapping()->IsChromeAppGenerated("chrome")); 586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("another-chrome-app", mapping()->GetChromeApp("drive")); 596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("drive", mapping()->GetDriveApp("another-chrome-app")); 606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(mapping()->IsChromeAppGenerated("another-chrome-app")); 616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) drive_app_ids = mapping()->GetDriveAppIds(); 626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(1u, drive_app_ids.size()); 636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(1u, drive_app_ids.count("drive")); 646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Add another one. 666d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) mapping()->Add("drive-1", "chrome-1", false); 676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("chrome-1", mapping()->GetChromeApp("drive-1")); 686d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("drive-1", mapping()->GetDriveApp("chrome-1")); 696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) drive_app_ids = mapping()->GetDriveAppIds(); 706d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(2u, drive_app_ids.size()); 716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(1u, drive_app_ids.count("drive")); 726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(1u, drive_app_ids.count("drive-1")); 736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Previous mapping should not be affected by new mapping. 756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("another-chrome-app", mapping()->GetChromeApp("drive")); 766d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("drive", mapping()->GetDriveApp("another-chrome-app")); 776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_TRUE(mapping()->IsChromeAppGenerated("another-chrome-app")); 786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 796d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Non-existent value returns empty string. 806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("", mapping()->GetChromeApp("non-existent-drive-app")); 816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("", mapping()->GetDriveApp("non-existent-chrome-app")); 826d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 836d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 846d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)TEST_F(DriveAppMappingTest, Remove) { 856d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) std::set<std::string> drive_app_ids; 866d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Prepare data. 886d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) mapping()->Add("drive-1", "chrome-1", false); 896d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) mapping()->Add("drive-2", "chrome-2", false); 906d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) drive_app_ids = mapping()->GetDriveAppIds(); 916d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(2u, drive_app_ids.size()); 926d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 936d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Remove non-existent. 946d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) mapping()->Remove("non-existent-drive-app"); 956d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) drive_app_ids = mapping()->GetDriveAppIds(); 966d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(2u, drive_app_ids.size()); 976d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 986d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Remove one. 996d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("chrome-1", mapping()->GetChromeApp("drive-1")); 1006d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) mapping()->Remove("drive-1"); 1016d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("", mapping()->GetChromeApp("drive-1")); 1026d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) drive_app_ids = mapping()->GetDriveAppIds(); 1036d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(1u, drive_app_ids.size()); 1046d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1056d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Remove it again has no effect. 1066d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) mapping()->Remove("drive-1"); 1076d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) drive_app_ids = mapping()->GetDriveAppIds(); 1086d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(1u, drive_app_ids.size()); 1096d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Remove another one. 1116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("chrome-2", mapping()->GetChromeApp("drive-2")); 1126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) mapping()->Remove("drive-2"); 1136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ("", mapping()->GetChromeApp("drive-2")); 1146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) drive_app_ids = mapping()->GetDriveAppIds(); 1156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) EXPECT_EQ(0u, drive_app_ids.size()); 1166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 117