summaryrefslogtreecommitdiffstats
path: root/chrome/browser/printing/print_job_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/printing/print_job_unittest.cc')
-rw-r--r--chrome/browser/printing/print_job_unittest.cc117
1 files changed, 117 insertions, 0 deletions
diff --git a/chrome/browser/printing/print_job_unittest.cc b/chrome/browser/printing/print_job_unittest.cc
new file mode 100644
index 0000000..6c65a5d
--- /dev/null
+++ b/chrome/browser/printing/print_job_unittest.cc
@@ -0,0 +1,117 @@
+// Copyright (c) 2008 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/message_loop.h"
+#include "chrome/browser/printing/print_job.h"
+#include "chrome/browser/printing/printed_pages_source.h"
+#include "googleurl/src/gurl.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+class TestSource : public printing::PrintedPagesSource {
+ public:
+ virtual void RenderOnePrintedPage(printing::PrintedDocument* document,
+ int page_number) {
+ }
+ virtual std::wstring RenderSourceName() {
+ return L"";
+ }
+ virtual GURL RenderSourceUrl() {
+ return GURL();
+ }
+};
+
+class TestPrintJob : public printing::PrintJob {
+ public:
+ TestPrintJob(printing::PrintedPagesSource* source, volatile bool* check)
+ : printing::PrintJob(source), check_(check) {
+ }
+ TestPrintJob(volatile bool* check) : check_(check) {
+ }
+ ~TestPrintJob() {
+ *check_ = true;
+ }
+ private:
+ volatile bool* check_;
+};
+
+class TestPrintNotifObserv : public NotificationObserver {
+ public:
+ // NotificationObserver
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ ASSERT_EQ(NOTIFY_PRINT_JOB_EVENT, type);
+ printing::JobEventDetails::Type event_type =
+ Details<printing::JobEventDetails>(details)->type();
+ EXPECT_NE(printing::JobEventDetails::NEW_DOC, event_type);
+ EXPECT_NE(printing::JobEventDetails::NEW_PAGE, event_type);
+ EXPECT_NE(printing::JobEventDetails::PAGE_DONE, event_type);
+ EXPECT_NE(printing::JobEventDetails::DOC_DONE, event_type);
+ EXPECT_NE(printing::JobEventDetails::JOB_DONE, event_type);
+ EXPECT_NE(printing::JobEventDetails::ALL_PAGES_REQUESTED, event_type);
+ if (event_type == printing::JobEventDetails::USER_INIT_DONE ||
+ event_type == printing::JobEventDetails::USER_INIT_CANCELED ||
+ event_type == printing::JobEventDetails::DEFAULT_INIT_DONE ||
+ event_type == printing::JobEventDetails::FAILED) {
+ MessageLoop::current()->Quit();
+ return;
+ }
+ }
+};
+
+} // namespace
+
+TEST(PrintJobTest, SimplePrint) {
+ // Test the multithreaded nature of PrintJob to make sure we can use it with
+ // known livetime.
+ TestPrintNotifObserv observ;
+ MessageLoop current;
+ NotificationService::current()->AddObserver(
+ &observ, NOTIFY_ALL,
+ NotificationService::AllSources());
+ TestSource source;
+ volatile bool check = false;
+ scoped_refptr<printing::PrintJob> job(new TestPrintJob(&source, &check));
+ job->GetSettings(printing::PrintJob::DEFAULTS, NULL);
+ EXPECT_EQ(MessageLoop::current(), job->message_loop());
+ current.Run();
+ job->Stop();
+ job = NULL;
+ EXPECT_TRUE(check);
+}
+
+TEST(PrintJobTest, SimplePrintLateInit) {
+ volatile bool check = false;
+ MessageLoop current;
+ scoped_refptr<printing::PrintJob> job(new TestPrintJob(&check));
+ job = NULL;
+ EXPECT_TRUE(check);
+ /* TODO(maruel): Test these.
+ job->Initialize()
+ job->Observe();
+ job->GetSettingsDone();
+ job->DetachWorker();
+ job->message_loop();
+ job->settings();
+ job->cookie();
+ job->GetSettings(printing::DEFAULTS, printing::ASK_USER, NULL);
+ job->StartPrinting();
+ job->Stop();
+ job->Cancel();
+ job->RequestMissingPages();
+ job->FlushJob(timeout_ms);
+ job->DisconnectSource();
+ job->is_job_pending();
+ job->is_print_dialog_box_shown();
+ job->document();
+ // Private
+ job->UpdatePrintedDocument(NULL);
+ scoped_refptr<printing::JobEventDetails> event_details;
+ job->OnNotifyPrintJobEvent(event_details);
+ job->OnDocumentDone();
+ job->ControlledWorkerShutdown();
+ */
+}