| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "third_party/blink/renderer/core/clipboard/data_object.h" |
| |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "third_party/blink/renderer/core/clipboard/data_object_item.h" |
| #include "third_party/blink/renderer/platform/file_metadata.h" |
| #include "third_party/blink/renderer/platform/testing/unit_test_helpers.h" |
| |
| namespace blink { |
| |
| class DataObjectTest : public testing::Test { |
| public: |
| DataObjectTest() : data_object_(DataObject::Create()) {} |
| |
| protected: |
| Persistent<DataObject> data_object_; |
| }; |
| |
| class DataObjectObserver : public GarbageCollected<DataObjectObserver>, |
| public DataObject::Observer { |
| USING_GARBAGE_COLLECTED_MIXIN(DataObjectObserver); |
| |
| public: |
| DataObjectObserver() : call_count_(0) {} |
| void OnItemListChanged() override { call_count_++; } |
| size_t call_count() { return call_count_; } |
| |
| private: |
| size_t call_count_; |
| }; |
| |
| TEST_F(DataObjectTest, DataObjectObserver) { |
| DataObjectObserver* observer = MakeGarbageCollected<DataObjectObserver>(); |
| data_object_->AddObserver(observer); |
| |
| data_object_->ClearAll(); |
| EXPECT_EQ(0U, data_object_->length()); |
| EXPECT_EQ(0U, observer->call_count()); |
| |
| data_object_->SetData("text/plain", "foobar"); |
| EXPECT_EQ(1U, data_object_->length()); |
| EXPECT_EQ(1U, observer->call_count()); |
| |
| DataObjectItem* item = data_object_->Add("bar quux", "text/plain"); |
| EXPECT_EQ(nullptr, item); |
| EXPECT_EQ(1U, data_object_->length()); |
| EXPECT_EQ(1U, observer->call_count()); |
| |
| item = data_object_->Add("bar quux", "application/octet-stream"); |
| EXPECT_NE(nullptr, item); |
| EXPECT_EQ(2U, data_object_->length()); |
| EXPECT_EQ(2U, observer->call_count()); |
| |
| data_object_->DeleteItem(42); |
| EXPECT_EQ(2U, data_object_->length()); |
| EXPECT_EQ(2U, observer->call_count()); |
| |
| data_object_->DeleteItem(0); |
| EXPECT_EQ(1U, data_object_->length()); |
| EXPECT_EQ(3U, observer->call_count()); |
| |
| DataObjectObserver* observer2 = MakeGarbageCollected<DataObjectObserver>(); |
| data_object_->AddObserver(observer2); |
| |
| String file_path = |
| test::BlinkRootDir() + "/renderer/core/clipboard/dat_aobject_test.cc"; |
| data_object_->AddFilename(file_path, String(), String()); |
| EXPECT_EQ(2U, data_object_->length()); |
| EXPECT_EQ(4U, observer->call_count()); |
| EXPECT_EQ(1U, observer2->call_count()); |
| |
| data_object_->ClearData("application/octet-stream"); |
| EXPECT_EQ(1U, data_object_->length()); |
| EXPECT_EQ(5U, observer->call_count()); |
| EXPECT_EQ(2U, observer2->call_count()); |
| |
| data_object_->ClearAll(); |
| EXPECT_EQ(0U, data_object_->length()); |
| EXPECT_EQ(6U, observer->call_count()); |
| EXPECT_EQ(3U, observer2->call_count()); |
| } |
| |
| TEST_F(DataObjectTest, addItemWithFilenameAndNoTitle) { |
| String file_path = |
| test::BlinkRootDir() + "/renderer/core/clipboard/data_object_test.cc"; |
| |
| data_object_->AddFilename(file_path, String(), String()); |
| EXPECT_EQ(1U, data_object_->length()); |
| |
| DataObjectItem* item = data_object_->Item(0); |
| EXPECT_EQ(DataObjectItem::kFileKind, item->Kind()); |
| |
| Blob* blob = item->GetAsFile(); |
| ASSERT_TRUE(blob->IsFile()); |
| auto* file = DynamicTo<File>(blob); |
| ASSERT_TRUE(file); |
| EXPECT_TRUE(file->HasBackingFile()); |
| EXPECT_EQ(File::kIsUserVisible, file->GetUserVisibility()); |
| EXPECT_EQ(file_path, file->GetPath()); |
| } |
| |
| TEST_F(DataObjectTest, addItemWithFilenameAndTitle) { |
| String file_path = |
| test::BlinkRootDir() + "/renderer/core/clipboard/data_object_test.cc"; |
| |
| data_object_->AddFilename(file_path, "name.cpp", String()); |
| EXPECT_EQ(1U, data_object_->length()); |
| |
| DataObjectItem* item = data_object_->Item(0); |
| EXPECT_EQ(DataObjectItem::kFileKind, item->Kind()); |
| |
| Blob* blob = item->GetAsFile(); |
| auto* file = DynamicTo<File>(blob); |
| ASSERT_TRUE(file); |
| EXPECT_TRUE(file->HasBackingFile()); |
| EXPECT_EQ(File::kIsUserVisible, file->GetUserVisibility()); |
| EXPECT_EQ(file_path, file->GetPath()); |
| EXPECT_EQ("name.cpp", file->name()); |
| } |
| |
| TEST_F(DataObjectTest, fileSystemId) { |
| String file_path = |
| test::BlinkRootDir() + "/renderer/core/clipboard/data_object_test.cpp"; |
| KURL url; |
| |
| data_object_->AddFilename(file_path, String(), String()); |
| data_object_->AddFilename(file_path, String(), "fileSystemIdForFilename"); |
| data_object_->Add( |
| File::CreateForFileSystemFile(url, FileMetadata(), File::kIsUserVisible), |
| "fileSystemIdForFileSystemFile"); |
| |
| ASSERT_EQ(3U, data_object_->length()); |
| |
| { |
| DataObjectItem* item = data_object_->Item(0); |
| EXPECT_FALSE(item->HasFileSystemId()); |
| } |
| |
| { |
| DataObjectItem* item = data_object_->Item(1); |
| EXPECT_TRUE(item->HasFileSystemId()); |
| EXPECT_EQ("fileSystemIdForFilename", item->FileSystemId()); |
| } |
| |
| { |
| DataObjectItem* item = data_object_->Item(2); |
| EXPECT_TRUE(item->HasFileSystemId()); |
| EXPECT_EQ("fileSystemIdForFileSystemFile", item->FileSystemId()); |
| } |
| } |
| |
| } // namespace blink |