Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7980)

Unified Diff: chrome/service/cloud_print/printer_job_handler_unittest.cc

Issue 12248009: Created unit test for PrinterJobHandler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@test_printerjobhandler
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/chrome_tests_unit.gypi ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/service/cloud_print/printer_job_handler_unittest.cc
diff --git a/chrome/service/cloud_print/printer_job_handler_unittest.cc b/chrome/service/cloud_print/printer_job_handler_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..b18f5fd30306ad3d69ed53fd1d2702a240c5884c
--- /dev/null
+++ b/chrome/service/cloud_print/printer_job_handler_unittest.cc
@@ -0,0 +1,613 @@
+// Copyright (c) 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 "base/file_path.h"
+#include "base/md5.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/message_loop.h"
+#include "base/message_loop_proxy.h"
+#include "base/stringprintf.h"
+#include "chrome/common/cloud_print/cloud_print_constants.h"
+#include "chrome/service/cloud_print/cloud_print_helpers.h"
+#include "chrome/service/cloud_print/cloud_print_token_store.h"
+#include "chrome/service/cloud_print/print_system.h"
+#include "chrome/service/cloud_print/printer_job_handler.h"
+#include "net/http/http_response_headers.h"
+#include "net/url_request/test_url_fetcher_factory.h"
+#include "net/url_request/url_request_test_util.h"
+#include "printing/backend/print_backend.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using ::testing::AtLeast;
+using ::testing::Exactly;
+using ::testing::Sequence;
+using ::testing::Return;
+using ::testing::SaveArg;
+using ::testing::DoAll;
+using ::testing::_;
+using ::testing::NiceMock;
+using ::testing::StrictMock;
+using ::testing::Invoke;
+using ::testing::SetArgPointee;
+using ::testing::InvokeWithoutArgs;
+
+namespace cloud_print {
+
+const char kExampleJobListResponse[] = "{"
+" \"success\": true,"
+" \"jobs\": ["
+" {"
+" \"tags\": ["
+" \"^own\""
+" ],"
+" \"printerName\": \"Example Printer\","
+" \"status\": \"QUEUED\","
+" \"ownerId\": \"sampleuser@gmail.com\","
+" \"ticketUrl\": \"https://www.google.com/cloudprint/ticket?exampleURI1\","
+" \"printerid\": \"__example_printer_id\","
+" \"printerType\": \"GOOGLE\","
+" \"contentType\": \"text/html\","
+" \"fileUrl\": \"https://www.google.com/cloudprint/download?exampleURI1\","
+" \"id\": \"__example_job_id1\","
+" \"message\": \"\","
+" \"title\": \"Example Job 1\","
+" \"errorCode\": \"\","
+" \"numberOfPages\": 3"
+" }"
+" ],"
+" \"xsrf_token\": \"AIp06DjUd3AV6BO0aujB9NvM2a9ZbogxOQ:1360021066932\","
+" \"request\": {"
+" \"time\": \"0\","
+" \"users\": ["
+" \"sampleuser@gmail.com\""
+" ],"
+" \"params\": {"
+" \"printerid\": ["
+" \"__example_printer_id\""
+" ]"
+" },"
+" \"user\": \"sampleuser@gmail.com\""
+" }"
+"}";
+
+const char kExampleJobListResponseEmpty[] = "{"
+" \"success\": true,"
+" \"jobs\": ["
+" ],"
+" \"xsrf_token\": \"AIp06DjUd3AV6BO0aujB9NvM2a9ZbogxOQ:1360021066932\","
+" \"request\": {"
+" \"time\": \"0\","
+" \"users\": ["
+" \"sampleuser@gmail.com\""
+" ],"
+" \"params\": {"
+" \"printerid\": ["
+" \"__example_printer_id\""
+" ]"
+" },"
+" \"user\": \"sampleuser@gmail.com\""
+" }"
+"}";
+
+
+
+const char kExampleJobID[] = "__example_job_id1";
+
+const char kExampleCloudPrintServerURL[] = "https://www.google.com/cloudprint/";
+
+const char kExamplePrintTicket[] = "{\"MediaType\":\"plain\","
+ "\"Resolution\":\"300x300dpi\",\"PageRegion\":\"Letter\","
+ "\"InputSlot\":\"auto\",\"PageSize\":\"Letter\",\"EconoMode\":\"off\"}";
+
+const char kExamplePrintTicketURI[] =
+ "https://www.google.com/cloudprint/ticket?exampleURI1";
+
+const char kExamplePrintDownloadURI[] =
+ "https://www.google.com/cloudprint/download?exampleURI1";
+
+// Use StringPrintf to construct
+const char kExamplePrinterJobListURI[] =
+ "https://www.google.com/cloudprint/fetch"
+ "?printerid=__example_printer_id&deb=%s";
+
+// Use StringPrintf to construct
+const char kExamplePrinterJobControlURI[] =
+ "https://www.google.com/cloudprint/control"
+ "?jobid=__example_printer_id&status=%s";
+
+
+// Use StringPrintf to construct
+const char kExampleControlResponse[] = "{"
+" \"success\": true,"
+" \"message\": \"Print job updated successfully.\","
+" \"xsrf_token\": \"AIp06DjKgbfGalbqzj23V1bU6i-vtR2B4w:1360023068789\","
+" \"request\": {"
+" \"time\": \"0\","
+" \"users\": ["
+" \"sampleuser@gmail.com\""
+" ],"
+" \"params\": {"
+" \"xsrf\": ["
+" \"AIp06DgeGIETs42Cj28QWmxGPWVDiaXwVQ:1360023041852\""
+" ],"
+" \"status\": ["
+" \"%s\""
+" ],"
+" \"jobid\": ["
+" \"__example_job_id1\""
+" ]"
+" },"
+" \"user\": \"sampleuser@gmail.com\""
+" },"
+" \"job\": {"
+" \"tags\": ["
+" \"^own\""
+" ],"
+" \"printerName\": \"Example Printer\","
+" \"status\": \"%s\","
+" \"ownerId\": \"sampleuser@gmail.com\","
+" \"ticketUrl\": \"https://www.google.com/cloudprint/ticket?exampleURI1\","
+" \"printerid\": \"__example_printer_id\","
+" \"contentType\": \"text/html\","
+" \"fileUrl\": \"https://www.google.com/cloudprint/download?exampleURI1\","
+" \"id\": \"__example_job_id1\","
+" \"message\": \"\","
+" \"title\": \"Example Job\","
+" \"errorCode\": \"\","
+" \"numberOfPages\": 3"
+" }"
+"}";
+
+const char kExamplePrinterID[] = "__example_printer_id";
+
+const char kExamplePrinterCapabilities[] = "";
+
+const char kExampleCapsMimeType[] = "";
+
+// These can stay empty
+const char kExampleDefaults[] = "";
+
+const char kExampleDefaultMimeType[] = "";
+
+// Since we're not connecting to the server, this can be any non-empty string.
+const char kExampleCloudPrintOAuthToken[] = "__SAMPLE_TOKEN";
+
+
+// Not actually printing, no need for real PDF.
+const char kExamplePrintData[] = "__EXAMPLE_PRINT_DATA";
+
+const char kExampleJobDownloadResponseHeaders[] =
+ "Content-Type: Application/PDF\n";
+
+const char kExampleUpdateDoneURL[] =
+ "https://www.google.com/cloudprint/control?jobid=__example_job_id1"
+ "&status=DONE&code=0&message=&numpages=0&pagesprinted=0";
+
+const char kExamplePrinterName[] = "Example Printer";
+
+const char kExamplePrinterDescription[] = "Example Description";
+
+class CloudPrintURLFetcherNoServiceProcess
+ : public CloudPrintURLFetcher {
+ protected:
+ virtual net::URLRequestContextGetter* GetRequestContextGetter() {
+ return new net::TestURLRequestContextGetter(
+ base::MessageLoopProxy::current());
+ }
+
+ virtual ~CloudPrintURLFetcherNoServiceProcess() {}
+};
+
+
+class CloudPrintURLFetcherNoServiceProcessFactory
+ : public CloudPrintURLFetcherFactory {
+ public:
+ virtual CloudPrintURLFetcher* CreateCloudPrintURLFetcher() {
+ return new CloudPrintURLFetcherNoServiceProcess;
+ }
+
+ virtual ~CloudPrintURLFetcherNoServiceProcessFactory() {}
+};
+
+
+// This class handles the callback from FakeURLFetcher
+// It is a separate class because callback methods must be
+// on RefCounted classes
+
+class TestURLFetcherCallback {
+ public:
+ scoped_ptr<net::FakeURLFetcher> CreateURLFetcher(
+ const GURL& url,
+ net::URLFetcherDelegate* d,
+ const std::string& response_data,
+ bool success) {
+ scoped_ptr<net::FakeURLFetcher> fetcher(
+ new net::FakeURLFetcher(url, d, response_data, success));
+ OnRequestCreate(url, fetcher.get());
+ return fetcher.Pass();
+ }
+ MOCK_METHOD2(OnRequestCreate,
+ void(const GURL&, net::FakeURLFetcher*));
+};
+
+
+class MockPrinterJobHandlerDelegate
+ : public PrinterJobHandler::Delegate {
+ public:
+ MOCK_METHOD0(OnAuthError, void());
+ MOCK_METHOD1(OnPrinterDeleted, void(const std::string& str));
+
+ virtual ~MockPrinterJobHandlerDelegate() {}
+};
+
+
+class MockPrintServerWatcher
+ : public PrintSystem::PrintServerWatcher {
+ public:
+ MOCK_METHOD1(StartWatching,
+ bool(PrintSystem::PrintServerWatcher::Delegate* d));
+ MOCK_METHOD0(StopWatching, bool());
+
+ MockPrintServerWatcher();
+ PrintSystem::PrintServerWatcher::Delegate* delegate() const {
+ return delegate_;
+ }
+
+ friend class scoped_refptr<NiceMock<MockPrintServerWatcher> >;
+ friend class scoped_refptr<StrictMock<MockPrintServerWatcher> >;
+ friend class scoped_refptr<MockPrintServerWatcher>;
+
+ protected:
+ virtual ~MockPrintServerWatcher() {}
+
+ private:
+ PrintSystem::PrintServerWatcher::Delegate* delegate_;
+};
+
+class MockPrinterWatcher : public PrintSystem::PrinterWatcher {
+ public:
+ MOCK_METHOD1(StartWatching, bool(PrintSystem::PrinterWatcher::Delegate* d));
+ MOCK_METHOD0(StopWatching, bool());
+ MOCK_METHOD1(GetCurrentPrinterInfo,
+ bool(printing::PrinterBasicInfo* printer_info));
+
+ MockPrinterWatcher();
+ PrintSystem::PrinterWatcher::Delegate* delegate() const { return delegate_; }
+
+ friend class scoped_refptr<NiceMock<MockPrinterWatcher> >;
+ friend class scoped_refptr<StrictMock<MockPrinterWatcher> >;
+ friend class scoped_refptr<MockPrinterWatcher>;
+
+ protected:
+ virtual ~MockPrinterWatcher() {}
+
+ private:
+ PrintSystem::PrinterWatcher::Delegate* delegate_;
+};
+
+
+class MockJobSpooler : public PrintSystem::JobSpooler {
+ public:
+ MOCK_METHOD7(Spool, bool(
+ const std::string& print_ticket,
+ const base::FilePath& print_data_file_path,
+ const std::string& print_data_mime_type,
+ const std::string& printer_name,
+ const std::string& job_title,
+ const std::vector<std::string>& tags,
+ PrintSystem::JobSpooler::Delegate* delegate));
+
+ MockJobSpooler();
+ PrintSystem::JobSpooler::Delegate* delegate() const { return delegate_; }
+
+ friend class scoped_refptr<NiceMock<MockJobSpooler> >;
+ friend class scoped_refptr<StrictMock<MockJobSpooler> >;
+ friend class scoped_refptr<MockJobSpooler>;
+
+ protected:
+ virtual ~MockJobSpooler() {}
+
+ private:
+ PrintSystem::JobSpooler::Delegate* delegate_;
+};
+
+
+
+class MockPrintSystem : public PrintSystem {
+ public:
+ MockPrintSystem();
+ PrintSystem::PrintSystemResult succeed() {
+ return PrintSystem::PrintSystemResult(true, "success");
+ }
+
+ PrintSystem::PrintSystemResult fail() {
+ return PrintSystem::PrintSystemResult(false, "failure");
+ }
+
+ MockJobSpooler& JobSpooler() {
+ return *job_spooler_;
+ }
+
+ MockPrinterWatcher& PrinterWatcher() {
+ return *printer_watcher_;
+ }
+
+ MockPrintServerWatcher& PrintServerWatcher() {
+ return *print_server_watcher_;
+ }
+
+ MOCK_METHOD0(Init, PrintSystem::PrintSystemResult());
+ MOCK_METHOD1(EnumeratePrinters, PrintSystem::PrintSystemResult(
+ printing::PrinterList* printer_list));
+
+ MOCK_METHOD2(
+ GetPrinterCapsAndDefaults,
+ void(const std::string& printer_name,
+ const PrintSystem::PrinterCapsAndDefaultsCallback& callback));
+
+ MOCK_METHOD1(IsValidPrinter, bool(const std::string& printer_name));
+
+ MOCK_METHOD2(ValidatePrintTicket, bool(const std::string& printer_name,
+ const std::string& print_ticket_data));
+
+ MOCK_METHOD3(GetJobDetails, bool(const std::string& printer_name,
+ PlatformJobId job_id,
+ PrintJobDetails* job_details));
+
+ MOCK_METHOD0(CreatePrintServerWatcher, PrintSystem::PrintServerWatcher*());
+ MOCK_METHOD1(CreatePrinterWatcher,
+ PrintSystem::PrinterWatcher*(const std::string& printer_name));
+ MOCK_METHOD0(CreateJobSpooler, PrintSystem::JobSpooler*());
+
+ MOCK_METHOD0(GetSupportedMimeTypes, std::string());
+
+ friend class scoped_refptr<NiceMock<MockPrintSystem> >;
+ friend class scoped_refptr<StrictMock<MockPrintSystem> >;
+ friend class scoped_refptr<MockPrintSystem>;
+
+ protected:
+ virtual ~MockPrintSystem() {}
+
+ private:
+ scoped_refptr<MockJobSpooler> job_spooler_;
+ scoped_refptr<MockPrinterWatcher> printer_watcher_;
+ scoped_refptr<MockPrintServerWatcher> print_server_watcher_;
+};
+
+
+class PrinterJobHandlerTest : public ::testing::Test {
+ public:
+ PrinterJobHandlerTest();
+ void SetUp() OVERRIDE;
+ void TearDown() OVERRIDE;
+ void IdleOut();
+ bool GetPrinterInfo(printing::PrinterBasicInfo* info);
+ void SendCapsAndDefaults(
+ const std::string& printer_name,
+ const PrintSystem::PrinterCapsAndDefaultsCallback& callback);
+ void AddMimeHeader(const GURL& url, net::FakeURLFetcher* fetcher);
+ bool PostSpoolSuccess();
+
+ static void MessageLoopQuitNowHelper(MessageLoop* message_loop);
+ static void MessageLoopQuitSoonHelper(MessageLoop* message_loop);
+
+ MessageLoopForIO loop_;
+ TestURLFetcherCallback url_callback_;
+ MockPrinterJobHandlerDelegate jobhandler_delegate_;
+ CloudPrintTokenStore token_store_;
+ CloudPrintURLFetcherNoServiceProcessFactory cloud_print_factory_;
+ scoped_refptr<PrinterJobHandler> job_handler_;
+ scoped_refptr<NiceMock<MockPrintSystem> > print_system_;
+ net::FakeURLFetcherFactory factory_;
+ printing::PrinterBasicInfo basic_info_;
+ printing::PrinterCapsAndDefaults caps_and_defaults_;
+ PrinterJobHandler::PrinterInfoFromCloud info_from_cloud_;
+};
+
+
+void PrinterJobHandlerTest::SetUp() {
+ basic_info_.printer_name = kExamplePrinterName;
+ basic_info_.printer_description = kExamplePrinterDescription;
+ basic_info_.is_default = 0;
+
+ info_from_cloud_.printer_id = kExamplePrinterID;
+ info_from_cloud_.tags_hash = GetHashOfPrinterInfo(basic_info_);
+
+ info_from_cloud_.caps_hash = base::MD5String(kExamplePrinterCapabilities);
+
+ caps_and_defaults_.printer_capabilities = kExamplePrinterCapabilities;
+ caps_and_defaults_.caps_mime_type = kExampleCapsMimeType;
+ caps_and_defaults_.printer_defaults = kExampleDefaults;
+ caps_and_defaults_.defaults_mime_type = kExampleDefaultMimeType;
+
+ print_system_ = new NiceMock<MockPrintSystem>();
+
+ token_store_.SetToken(kExampleCloudPrintOAuthToken);
+
+ ON_CALL(print_system_->PrinterWatcher(), GetCurrentPrinterInfo(_))
+ .WillByDefault(Invoke(this, &PrinterJobHandlerTest::GetPrinterInfo));
+
+ ON_CALL(*print_system_, GetPrinterCapsAndDefaults(_, _))
+ .WillByDefault(Invoke(this, &PrinterJobHandlerTest::SendCapsAndDefaults));
+
+ CloudPrintURLFetcher::set_factory(&cloud_print_factory_);
+}
+
+void PrinterJobHandlerTest::MessageLoopQuitNowHelper(
+ MessageLoop* message_loop) {
+ message_loop->QuitWhenIdle();
+}
+
+void PrinterJobHandlerTest::MessageLoopQuitSoonHelper(
+ MessageLoop* message_loop) {
+ message_loop->message_loop_proxy()->PostTask(
+ FROM_HERE,
+ base::Bind(&MessageLoopQuitNowHelper, message_loop));
+}
+
+PrinterJobHandlerTest::PrinterJobHandlerTest()
+ : factory_(NULL, base::Bind(&TestURLFetcherCallback::CreateURLFetcher,
+ base::Unretained(&url_callback_))) {
+}
+
+bool PrinterJobHandlerTest::PostSpoolSuccess() {
+ MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(
+ &PrinterJobHandler::OnJobSpoolSucceeded,
+ job_handler_, 0));
+
+ // Everything that would be posted on the printer thread queue
+ // has been posted, we can tell the main message loop to quit when idle
+ // and not worry about it idling while the print thread does work
+ MessageLoop::current()->PostTask(FROM_HERE,
+ base::Bind(&MessageLoopQuitSoonHelper, &loop_));
+ return true;
+}
+
+void PrinterJobHandlerTest::AddMimeHeader(const GURL& url,
+ net::FakeURLFetcher* fetcher) {
+ scoped_refptr<net::HttpResponseHeaders> download_headers =
+ new net::HttpResponseHeaders(kExampleJobDownloadResponseHeaders);
+ fetcher->set_response_headers(download_headers);
+}
+
+
+void PrinterJobHandlerTest::SendCapsAndDefaults(
+ const std::string& printer_name,
+ const PrintSystem::PrinterCapsAndDefaultsCallback& callback) {
+ callback.Run(true, printer_name, caps_and_defaults_);
+}
+
+bool PrinterJobHandlerTest::GetPrinterInfo(printing::PrinterBasicInfo* info) {
+ *info = basic_info_;
+ return true;
+}
+
+void PrinterJobHandlerTest::TearDown() {
+ IdleOut();
+ CloudPrintURLFetcher::set_factory(NULL);
+}
+
+void PrinterJobHandlerTest::IdleOut() {
+ MessageLoop::current()->RunUntilIdle();
+}
+
+MockPrintServerWatcher::MockPrintServerWatcher() : delegate_(NULL) {
+ ON_CALL(*this, StartWatching(_))
+ .WillByDefault(DoAll(SaveArg<0>(&delegate_), Return(true)));
+ ON_CALL(*this, StopWatching()).WillByDefault(Return(true));
+}
+
+
+MockPrinterWatcher::MockPrinterWatcher() : delegate_(NULL) {
+ ON_CALL(*this, StartWatching(_))
+ .WillByDefault(DoAll(SaveArg<0>(&delegate_), Return(true)));
+ ON_CALL(*this, StopWatching()).WillByDefault(Return(true));
+}
+
+MockJobSpooler::MockJobSpooler() : delegate_(NULL) {
+ ON_CALL(*this, Spool(_, _, _, _, _, _, _))
+ .WillByDefault(DoAll(SaveArg<6>(&delegate_), Return(true)));
+}
+
+
+MockPrintSystem::MockPrintSystem()
+ : job_spooler_(new NiceMock<MockJobSpooler>()),
+ printer_watcher_(new NiceMock<MockPrinterWatcher>()),
+ print_server_watcher_(new NiceMock<MockPrintServerWatcher>()) {
+ ON_CALL(*this, CreateJobSpooler())
+ .WillByDefault(Return(job_spooler_));
+
+ ON_CALL(*this, CreatePrinterWatcher(_))
+ .WillByDefault(Return(printer_watcher_));
+
+ ON_CALL(*this, CreatePrintServerWatcher())
+ .WillByDefault(Return(print_server_watcher_));
+
+ ON_CALL(*this, IsValidPrinter(_)).
+ WillByDefault(Return(true));
+
+ ON_CALL(*this, ValidatePrintTicket(_, _)).
+ WillByDefault(Return(true));
+};
+
+// This test simulates an end-to-end printing of a document
+// but tests only non-failure cases.
+TEST_F(PrinterJobHandlerTest, HappyPathTest) {
+ GURL InProgressURL =
+ GetUrlForJobStatusUpdate(GURL(kExampleCloudPrintServerURL),
+ kExampleJobID,
+ PRINT_JOB_STATUS_IN_PROGRESS);
+
+ factory_.SetFakeResponse(kExamplePrintTicketURI, kExamplePrintTicket, true);
+ factory_.SetFakeResponse(kExamplePrintDownloadURI, kExamplePrintData, true);
+ factory_.SetFakeResponse(
+ StringPrintf(kExamplePrinterJobListURI, kJobFetchReasonStartup),
+ kExampleJobListResponse, true);
+
+
+ factory_.SetFakeResponse(
+ base::StringPrintf(kExamplePrinterJobListURI, kJobFetchReasonQueryMore),
+ kExampleJobListResponseEmpty, true);
+
+ factory_.SetFakeResponse(
+ kExampleUpdateDoneURL,
+ base::StringPrintf(kExampleControlResponse, "DONE", "DONE"), true);
+
+ factory_.SetFakeResponse(
+ InProgressURL.spec(),
+ base::StringPrintf(kExampleControlResponse,
+ "IN_PROGRESS", "IN_PROGRESS"),
+ true);
+
+
+ job_handler_ = new PrinterJobHandler(basic_info_, info_from_cloud_,
+ GURL(kExampleCloudPrintServerURL),
+ print_system_, &jobhandler_delegate_);
+
+ EXPECT_CALL(url_callback_, OnRequestCreate(
+ GURL(base::StringPrintf(kExamplePrinterJobListURI, "startup")), _))
+ .Times(Exactly(1));
+
+ EXPECT_CALL(url_callback_, OnRequestCreate(
+ GURL(base::StringPrintf(kExamplePrinterJobListURI, "querymore")), _))
+ .Times(Exactly(1));
+
+ EXPECT_CALL(url_callback_, OnRequestCreate(GURL(kExamplePrintTicketURI), _))
+ .Times(Exactly(1));
+
+ EXPECT_CALL(url_callback_, OnRequestCreate(
+ GURL(kExamplePrintDownloadURI), _))
+ .Times(Exactly(1))
+ .WillOnce(Invoke(this, &PrinterJobHandlerTest::AddMimeHeader));
+
+ EXPECT_CALL(url_callback_, OnRequestCreate(InProgressURL, _))
+ .Times(Exactly(1));
+
+ EXPECT_CALL(url_callback_, OnRequestCreate(GURL(kExampleUpdateDoneURL), _))
+ .Times(Exactly(1));
+
+ EXPECT_CALL(print_system_->JobSpooler(),
+ Spool(kExamplePrintTicket, _, _, _, _, _, _))
+ .Times(Exactly(1))
+ .WillOnce(InvokeWithoutArgs(this,
+ &PrinterJobHandlerTest::PostSpoolSuccess));
+
+
+ job_handler_->Initialize();
+
+ MessageLoop::current()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&PrinterJobHandlerTest::MessageLoopQuitSoonHelper,
+ MessageLoop::current()),
+ base::TimeDelta::FromSeconds(1));
+
+ MessageLoop::current()->Run();
+}
+
+} // namespace cloud_print
+
« no previous file with comments | « chrome/chrome_tests_unit.gypi ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698