| // Copyright 2013 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/dom_distiller/core/distiller_url_fetcher.h" |
| #include "base/bind.h" |
| #include "base/bind_helpers.h" |
| #include "base/message_loop/message_loop.h" |
| #include "base/run_loop.h" |
| #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" |
| #include "services/network/test/test_url_loader_factory.h" |
| #include "services/network/test/test_utils.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "url/gurl.h" |
| |
| const char kTestPageA[] = "http://www.a.com/"; |
| const char kTestPageAResponse[] = { 1, 2, 3, 4, 5, 6, 7 }; |
| const char kTestPageB[] = "http://www.b.com/"; |
| const char kTestPageBResponse[] = { 'a', 'b', 'c' }; |
| |
| |
| class DistillerURLFetcherTest : public testing::Test { |
| public: |
| DistillerURLFetcherTest() |
| : test_shared_url_loader_factory_( |
| base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( |
| &test_url_loader_factory_)) {} |
| |
| void FetcherCallback(const std::string& response) { |
| response_ = response; |
| } |
| |
| protected: |
| // testing::Test implementation: |
| void SetUp() override { |
| url_fetcher_.reset(new dom_distiller::DistillerURLFetcher( |
| test_shared_url_loader_factory_)); |
| test_url_loader_factory_.AddResponse( |
| kTestPageA, |
| std::string(kTestPageAResponse, sizeof(kTestPageAResponse))); |
| test_url_loader_factory_.AddResponse( |
| GURL(kTestPageB), |
| network::CreateResourceResponseHead(net::HTTP_INTERNAL_SERVER_ERROR), |
| std::string(kTestPageBResponse, sizeof(kTestPageBResponse)), |
| network::URLLoaderCompletionStatus(net::OK)); |
| } |
| |
| void Fetch(const std::string& url, |
| const std::string& expected_response) { |
| base::MessageLoopForUI loop; |
| url_fetcher_->FetchURL( |
| url, |
| base::Bind(&DistillerURLFetcherTest::FetcherCallback, |
| base::Unretained(this))); |
| base::RunLoop().RunUntilIdle(); |
| CHECK_EQ(expected_response, response_); |
| } |
| |
| std::unique_ptr<dom_distiller::DistillerURLFetcher> url_fetcher_; |
| network::TestURLLoaderFactory test_url_loader_factory_; |
| scoped_refptr<network::SharedURLLoaderFactory> |
| test_shared_url_loader_factory_; |
| std::string response_; |
| }; |
| |
| TEST_F(DistillerURLFetcherTest, PopulateProto) { |
| Fetch(kTestPageA, |
| std::string(kTestPageAResponse, sizeof(kTestPageAResponse))); |
| } |
| |
| TEST_F(DistillerURLFetcherTest, PopulateProtoFailedFetch) { |
| // Expect the callback to contain an empty string for this URL. |
| Fetch(kTestPageB, std::string(std::string(), 0)); |
| } |