blob: 13ca91e8597b8dcf1d11d7ec46bbb5040b6c9c80 [file] [log] [blame]
// Copyright 2017 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 "components/exo/data_source.h"
#include "base/bind.h"
#include "base/files/file_util.h"
#include "base/test/scoped_task_environment.h"
#include "components/exo/data_source_delegate.h"
#include "components/exo/test/exo_test_base.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace exo {
namespace {
constexpr char kTestData[] = "Test Data";
class DataSourceTest : public testing::Test {
protected:
base::test::ScopedTaskEnvironment scoped_task_environment_ = {
base::test::ScopedTaskEnvironment::MainThreadType::DEFAULT,
base::test::ScopedTaskEnvironment::ExecutionMode::QUEUED};
};
class TestDataSourceDelegate : public DataSourceDelegate {
public:
TestDataSourceDelegate() {}
~TestDataSourceDelegate() override {}
// Overridden from DataSourceDelegate:
void OnDataSourceDestroying(DataSource* source) override {}
void OnTarget(const std::string& mime_type) override {}
void OnSend(const std::string& mime_type, base::ScopedFD fd) override {
ASSERT_TRUE(
base::WriteFileDescriptor(fd.get(), kTestData, strlen(kTestData)));
}
void OnCancelled() override {}
void OnDndDropPerformed() override {}
void OnDndFinished() override {}
void OnAction(DndAction dnd_action) override {}
};
TEST_F(DataSourceTest, ReadData) {
TestDataSourceDelegate delegate;
DataSource data_source(&delegate);
data_source.Offer("text/plain;charset=utf-8");
data_source.ReadData(base::BindOnce([](const std::vector<uint8_t>& data) {
std::string string_data(data.begin(), data.end());
EXPECT_EQ(std::string(kTestData), string_data);
}));
scoped_task_environment_.RunUntilIdle();
}
TEST_F(DataSourceTest, ReadData_UnknwonMimeType) {
TestDataSourceDelegate delegate;
DataSource data_source(&delegate);
data_source.Offer("text/unknown");
data_source.ReadData(base::BindOnce([](const std::vector<uint8_t>& data) {
FAIL()
<< "Callback should not be invoked when known mimetype is not offerred";
}));
scoped_task_environment_.RunUntilIdle();
}
TEST_F(DataSourceTest, ReadData_Destroyed) {
TestDataSourceDelegate delegate;
{
DataSource data_source(&delegate);
data_source.Offer("text/plain;charset=utf-8");
data_source.ReadData(base::BindOnce([](const std::vector<uint8_t>& data) {
FAIL() << "Callback should not be invoked after data source is destroyed";
}));
}
scoped_task_environment_.RunUntilIdle();
}
TEST_F(DataSourceTest, ReadData_Cancelled) {
TestDataSourceDelegate delegate;
DataSource data_source(&delegate);
data_source.Offer("text/plain;charset=utf-8");
data_source.ReadData(base::BindOnce([](const std::vector<uint8_t>& data) {
FAIL() << "Callback should not be invoked after cancelled";
}));
data_source.Cancelled();
scoped_task_environment_.RunUntilIdle();
}
} // namespace
} // namespace exo