| // 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 <memory> |
| |
| #include "base/values.h" |
| #include "headless/lib/browser/headless_devtools_manager_delegate.h" |
| #include "headless/lib/browser/headless_print_manager.h" |
| #include "printing/buildflags/buildflags.h" |
| #include "printing/units.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace headless { |
| |
| TEST(PageRangeTextToPagesTest, General) { |
| using PM = HeadlessPrintManager; |
| std::vector<int> pages; |
| std::vector<int> expected_pages; |
| |
| // "-" is full range of pages. |
| PM::PageRangeStatus status = PM::PageRangeTextToPages("-", false, 10, &pages); |
| expected_pages = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; |
| EXPECT_EQ(expected_pages, pages); |
| EXPECT_EQ(PM::PRINT_NO_ERROR, status); |
| |
| // If no start page is specified, we start at first page. |
| status = PM::PageRangeTextToPages("-5", false, 10, &pages); |
| expected_pages = {0, 1, 2, 3, 4}; |
| EXPECT_EQ(expected_pages, pages); |
| EXPECT_EQ(PM::PRINT_NO_ERROR, status); |
| |
| // If no end page is specified, we end at last page. |
| status = PM::PageRangeTextToPages("5-", false, 10, &pages); |
| expected_pages = {4, 5, 6, 7, 8, 9}; |
| EXPECT_EQ(expected_pages, pages); |
| EXPECT_EQ(PM::PRINT_NO_ERROR, status); |
| |
| // Multiple ranges are separated by commas. |
| status = PM::PageRangeTextToPages("1-3,9-10,4-6", false, 10, &pages); |
| expected_pages = {0, 1, 2, 3, 4, 5, 8, 9}; |
| EXPECT_EQ(expected_pages, pages); |
| EXPECT_EQ(PM::PRINT_NO_ERROR, status); |
| |
| // White space is ignored. |
| status = PM::PageRangeTextToPages("1- 3, 9-10,4 -6", false, 10, &pages); |
| expected_pages = {0, 1, 2, 3, 4, 5, 8, 9}; |
| EXPECT_EQ(expected_pages, pages); |
| EXPECT_EQ(PM::PRINT_NO_ERROR, status); |
| |
| // End page beyond number of pages is supported and capped to number of pages. |
| status = PM::PageRangeTextToPages("1-10", false, 5, &pages); |
| expected_pages = {0, 1, 2, 3, 4}; |
| EXPECT_EQ(expected_pages, pages); |
| EXPECT_EQ(PM::PRINT_NO_ERROR, status); |
| |
| // Start page beyond number of pages results in error. |
| status = PM::PageRangeTextToPages("1-3,9-10,4-6", false, 5, &pages); |
| EXPECT_EQ(PM::LIMIT_ERROR, status); |
| |
| // Invalid page ranges are ignored if |ignore_invalid_page_ranges| is true. |
| status = PM::PageRangeTextToPages("9-10,4-6,3-1", true, 5, &pages); |
| expected_pages = {3, 4}; |
| EXPECT_EQ(expected_pages, pages); |
| EXPECT_EQ(PM::PRINT_NO_ERROR, status); |
| |
| // Invalid input results in error. |
| status = PM::PageRangeTextToPages("abcd", false, 10, &pages); |
| EXPECT_EQ(PM::SYNTAX_ERROR, status); |
| |
| // Invalid input results in error. |
| status = PM::PageRangeTextToPages("1-3,9-a10,4-6", false, 10, &pages); |
| EXPECT_EQ(PM::SYNTAX_ERROR, status); |
| } |
| |
| } // namespace headless |