| Index: headless/lib/browser/headless_printing_unittest.cc
 | 
| diff --git a/headless/lib/browser/headless_printing_unittest.cc b/headless/lib/browser/headless_printing_unittest.cc
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..9c624f28818de1a2431a01b4e554da91c83cd235
 | 
| --- /dev/null
 | 
| +++ b/headless/lib/browser/headless_printing_unittest.cc
 | 
| @@ -0,0 +1,213 @@
 | 
| +// 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 "base/memory/ptr_util.h"
 | 
| +#include "base/values.h"
 | 
| +#include "headless/lib/browser/headless_devtools_manager_delegate.h"
 | 
| +#include "headless/lib/browser/headless_print_manager.h"
 | 
| +#include "printing/features/features.h"
 | 
| +#include "testing/gtest/include/gtest/gtest.h"
 | 
| +
 | 
| +namespace headless {
 | 
| +
 | 
| +TEST(ParsePrintSettingsTest, Landscape) {
 | 
| +  printing::HeadlessPrintSettings settings;
 | 
| +  EXPECT_FALSE(settings.landscape);
 | 
| +
 | 
| +  auto params = base::MakeUnique<base::DictionaryValue>();
 | 
| +  params->SetBoolean("landscape", true);
 | 
| +  std::unique_ptr<base::DictionaryValue> response =
 | 
| +      ParsePrintSettings(0, params.get(), &settings);
 | 
| +  EXPECT_TRUE(settings.landscape);
 | 
| +  EXPECT_EQ(nullptr, response);
 | 
| +}
 | 
| +
 | 
| +TEST(ParsePrintSettingsTest, HeaderFooter) {
 | 
| +  printing::HeadlessPrintSettings settings;
 | 
| +  EXPECT_FALSE(settings.display_header_footer);
 | 
| +
 | 
| +  auto params = base::MakeUnique<base::DictionaryValue>();
 | 
| +  params->SetBoolean("displayHeaderFooter", true);
 | 
| +  std::unique_ptr<base::DictionaryValue> response =
 | 
| +      ParsePrintSettings(0, params.get(), &settings);
 | 
| +  EXPECT_TRUE(settings.display_header_footer);
 | 
| +  EXPECT_EQ(nullptr, response);
 | 
| +}
 | 
| +
 | 
| +TEST(ParsePrintSettingsTest, PrintBackgrounds) {
 | 
| +  printing::HeadlessPrintSettings settings;
 | 
| +  EXPECT_FALSE(settings.should_print_backgrounds);
 | 
| +
 | 
| +  auto params = base::MakeUnique<base::DictionaryValue>();
 | 
| +  params->SetBoolean("printBackgrounds", true);
 | 
| +  std::unique_ptr<base::DictionaryValue> response =
 | 
| +      ParsePrintSettings(0, params.get(), &settings);
 | 
| +  EXPECT_TRUE(settings.should_print_backgrounds);
 | 
| +  EXPECT_EQ(nullptr, response);
 | 
| +}
 | 
| +
 | 
| +TEST(ParsePrintSettingsTest, Scale) {
 | 
| +  printing::HeadlessPrintSettings settings;
 | 
| +  EXPECT_DOUBLE_EQ(1, settings.scale);
 | 
| +
 | 
| +  auto params = base::MakeUnique<base::DictionaryValue>();
 | 
| +  params->SetDouble("scale", 0.5);
 | 
| +  std::unique_ptr<base::DictionaryValue> response =
 | 
| +      ParsePrintSettings(0, params.get(), &settings);
 | 
| +  EXPECT_DOUBLE_EQ(0.5, settings.scale);
 | 
| +  EXPECT_EQ(nullptr, response);
 | 
| +
 | 
| +  params->SetDouble("scale", -1);
 | 
| +  response = ParsePrintSettings(0, params.get(), &settings);
 | 
| +  EXPECT_NE(nullptr, response);
 | 
| +
 | 
| +  params->SetDouble("scale", 10);
 | 
| +  response = ParsePrintSettings(0, params.get(), &settings);
 | 
| +  EXPECT_NE(nullptr, response);
 | 
| +}
 | 
| +
 | 
| +TEST(ParsePrintSettingsTest, PageRanges) {
 | 
| +  printing::HeadlessPrintSettings settings;
 | 
| +  EXPECT_EQ("", settings.page_ranges);
 | 
| +
 | 
| +  auto params = base::MakeUnique<base::DictionaryValue>();
 | 
| +  params->SetString("pageRanges", "abcd");
 | 
| +  std::unique_ptr<base::DictionaryValue> response =
 | 
| +      ParsePrintSettings(0, params.get(), &settings);
 | 
| +  EXPECT_EQ("abcd", settings.page_ranges);
 | 
| +  EXPECT_EQ(nullptr, response);
 | 
| +}
 | 
| +
 | 
| +TEST(ParsePrintSettingsTest, PaperType) {
 | 
| +  printing::HeadlessPrintSettings settings;
 | 
| +  EXPECT_EQ(printing::HeadlessPrintSettings::NA_LETTER, settings.paper_type);
 | 
| +
 | 
| +  auto params = base::MakeUnique<base::DictionaryValue>();
 | 
| +  params->SetString("paperType", "NA_LETTER");
 | 
| +  std::unique_ptr<base::DictionaryValue> response =
 | 
| +      ParsePrintSettings(0, params.get(), &settings);
 | 
| +  EXPECT_EQ(printing::HeadlessPrintSettings::NA_LETTER, settings.paper_type);
 | 
| +  EXPECT_EQ(nullptr, response);
 | 
| +
 | 
| +  params->SetString("paperType", "NA_LEGAL");
 | 
| +  response = ParsePrintSettings(0, params.get(), &settings);
 | 
| +  EXPECT_EQ(printing::HeadlessPrintSettings::NA_LEGAL, settings.paper_type);
 | 
| +  EXPECT_EQ(nullptr, response);
 | 
| +
 | 
| +  params->SetString("paperType", "ISO_A4");
 | 
| +  response = ParsePrintSettings(0, params.get(), &settings);
 | 
| +  EXPECT_EQ(printing::HeadlessPrintSettings::ISO_A4, settings.paper_type);
 | 
| +  EXPECT_EQ(nullptr, response);
 | 
| +
 | 
| +  params->SetString("paperType", "ISO_A3");
 | 
| +  response = ParsePrintSettings(0, params.get(), &settings);
 | 
| +  EXPECT_EQ(printing::HeadlessPrintSettings::ISO_A3, settings.paper_type);
 | 
| +  EXPECT_EQ(nullptr, response);
 | 
| +
 | 
| +  params->SetString("paperType", "CUSTOM");
 | 
| +  params->SetDouble("paperWidth", 1);
 | 
| +  params->SetDouble("paperHeight", 2);
 | 
| +  response = ParsePrintSettings(0, params.get(), &settings);
 | 
| +  EXPECT_EQ(printing::HeadlessPrintSettings::CUSTOM, settings.paper_type);
 | 
| +  EXPECT_DOUBLE_EQ(1, settings.paper_width_in_inch);
 | 
| +  EXPECT_DOUBLE_EQ(2, settings.paper_height_in_inch);
 | 
| +  EXPECT_EQ(nullptr, response);
 | 
| +
 | 
| +  params->SetString("paperType", "abcd");
 | 
| +  response = ParsePrintSettings(0, params.get(), &settings);
 | 
| +  EXPECT_NE(nullptr, response);
 | 
| +}
 | 
| +
 | 
| +TEST(ParsePrintSettingsTest, Margin) {
 | 
| +  printing::HeadlessPrintSettings settings;
 | 
| +  EXPECT_EQ(printing::DEFAULT_MARGINS, settings.margin_type);
 | 
| +
 | 
| +  auto params = base::MakeUnique<base::DictionaryValue>();
 | 
| +  std::unique_ptr<base::DictionaryValue> response =
 | 
| +      ParsePrintSettings(0, params.get(), &settings);
 | 
| +  EXPECT_EQ(printing::DEFAULT_MARGINS, settings.margin_type);
 | 
| +  EXPECT_EQ(nullptr, response);
 | 
| +
 | 
| +  params->SetDouble("marginTop", 1);
 | 
| +  params->SetDouble("marginBottom", 2);
 | 
| +  params->SetDouble("marginLeft", 3);
 | 
| +  params->SetDouble("marginRight", 4);
 | 
| +  response = ParsePrintSettings(0, params.get(), &settings);
 | 
| +  EXPECT_EQ(printing::CUSTOM_MARGINS, settings.margin_type);
 | 
| +  EXPECT_DOUBLE_EQ(1, settings.margin_top_in_inch);
 | 
| +  EXPECT_DOUBLE_EQ(2, settings.margin_bottom_in_inch);
 | 
| +  EXPECT_DOUBLE_EQ(3, settings.margin_left_in_inch);
 | 
| +  EXPECT_DOUBLE_EQ(4, settings.margin_right_in_inch);
 | 
| +  EXPECT_EQ(nullptr, response);
 | 
| +}
 | 
| +
 | 
| +TEST(ParsePrintSettingsTest, Unit) {
 | 
| +  printing::HeadlessPrintSettings settings;
 | 
| +  auto params = base::MakeUnique<base::DictionaryValue>();
 | 
| +  params->SetString("unit", "MM");
 | 
| +  params->SetString("paperType", "CUSTOM");
 | 
| +  params->SetDouble("paperWidth", 1);
 | 
| +  params->SetDouble("paperHeight", 2);
 | 
| +  params->SetDouble("marginTop", 3);
 | 
| +  params->SetDouble("marginBottom", 4);
 | 
| +  params->SetDouble("marginLeft", 5);
 | 
| +  params->SetDouble("marginRight", 6);
 | 
| +
 | 
| +  std::unique_ptr<base::DictionaryValue> response =
 | 
| +      ParsePrintSettings(0, params.get(), &settings);
 | 
| +  EXPECT_EQ(printing::HeadlessPrintSettings::CUSTOM, settings.paper_type);
 | 
| +  EXPECT_DOUBLE_EQ(1 / 25.4, settings.paper_width_in_inch);
 | 
| +  EXPECT_DOUBLE_EQ(2 / 25.4, settings.paper_height_in_inch);
 | 
| +  EXPECT_EQ(printing::CUSTOM_MARGINS, settings.margin_type);
 | 
| +  EXPECT_DOUBLE_EQ(3 / 25.4, settings.margin_top_in_inch);
 | 
| +  EXPECT_DOUBLE_EQ(4 / 25.4, settings.margin_bottom_in_inch);
 | 
| +  EXPECT_DOUBLE_EQ(5 / 25.4, settings.margin_left_in_inch);
 | 
| +  EXPECT_DOUBLE_EQ(6 / 25.4, settings.margin_right_in_inch);
 | 
| +  EXPECT_EQ(nullptr, response);
 | 
| +
 | 
| +  params->SetString("unit", "abcd");
 | 
| +  response = ParsePrintSettings(0, params.get(), &settings);
 | 
| +  EXPECT_NE(nullptr, response);
 | 
| +}
 | 
| +
 | 
| +TEST(PageRangeTextToPagesTest, General) {
 | 
| +  using PM = printing::HeadlessPrintManager;
 | 
| +  std::vector<int> pages, expected_pages;
 | 
| +
 | 
| +  PM::PageRangeStatus status = PM::PageRangeTextToPages("-", 10, &pages);
 | 
| +  expected_pages = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
 | 
| +  EXPECT_EQ(expected_pages, pages);
 | 
| +  EXPECT_EQ(PM::NO_ERROR, status);
 | 
| +
 | 
| +  status = PM::PageRangeTextToPages("-5", 10, &pages);
 | 
| +  expected_pages = {0, 1, 2, 3, 4};
 | 
| +  EXPECT_EQ(expected_pages, pages);
 | 
| +  EXPECT_EQ(PM::NO_ERROR, status);
 | 
| +
 | 
| +  status = PM::PageRangeTextToPages("5-", 10, &pages);
 | 
| +  expected_pages = {4, 5, 6, 7, 8, 9};
 | 
| +  EXPECT_EQ(expected_pages, pages);
 | 
| +  EXPECT_EQ(PM::NO_ERROR, status);
 | 
| +
 | 
| +  status = PM::PageRangeTextToPages("1-3,9-10,4-6", 10, &pages);
 | 
| +  expected_pages = {0, 1, 2, 3, 4, 5, 8, 9};
 | 
| +  EXPECT_EQ(expected_pages, pages);
 | 
| +  EXPECT_EQ(PM::NO_ERROR, status);
 | 
| +
 | 
| +  status = PM::PageRangeTextToPages("1- 3, 9-10,4 -6", 10, &pages);
 | 
| +  expected_pages = {0, 1, 2, 3, 4, 5, 8, 9};
 | 
| +  EXPECT_EQ(expected_pages, pages);
 | 
| +  EXPECT_EQ(PM::NO_ERROR, status);
 | 
| +
 | 
| +  status = PM::PageRangeTextToPages("1-3,9-10,4-6", 5, &pages);
 | 
| +  EXPECT_EQ(PM::LIMIT_ERROR, status);
 | 
| +
 | 
| +  status = PM::PageRangeTextToPages("abcd", 10, &pages);
 | 
| +  EXPECT_EQ(PM::SYNTAX_ERROR, status);
 | 
| +
 | 
| +  status = PM::PageRangeTextToPages("1-3,9-a10,4-6", 10, &pages);
 | 
| +  EXPECT_EQ(PM::SYNTAX_ERROR, status);
 | 
| +}
 | 
| +
 | 
| +}  // namespace headless
 | 
| 
 |