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