blob: 5dfd716de346e805a0ad8bf172c17a528e3fea01 [file] [log] [blame]
// Copyright 2018 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/printing/browser/printer_capabilities_mac.h"
#include "base/files/scoped_temp_dir.h"
#include "base/mac/foundation_util.h"
#include "base/mac/scoped_nsobject.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace printing {
namespace {
base::FilePath WriteOutCustomPapersPlist(const base::FilePath& dir,
const char* name,
NSDictionary* dict) {
base::FilePath path = dir.Append(name);
NSString* plist_path = base::mac::FilePathToNSString(path);
if (![dict writeToFile:plist_path atomically:YES])
path.clear();
return path;
}
} // namespace
TEST(PrinterCapabilitiesMacTest, GetMacCustomPaperSizesFromFile) {
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
{
base::scoped_nsobject<NSMutableDictionary> dict(
[[NSMutableDictionary alloc] initWithDictionary:@{
@"foo" : @{
@"name" : @"foo",
@"width" : @144,
@"height" : @288,
}
}]);
base::FilePath path =
WriteOutCustomPapersPlist(temp_dir.GetPath(), "good1.plist", dict);
ASSERT_FALSE(path.empty());
auto papers = internal::GetMacCustomPaperSizesFromFile(path);
ASSERT_EQ(1u, papers.size());
EXPECT_EQ("foo", papers[0].display_name);
EXPECT_EQ("", papers[0].vendor_id);
EXPECT_EQ(50800, papers[0].size_um.width());
EXPECT_EQ(101600, papers[0].size_um.height());
}
{
base::scoped_nsobject<NSMutableDictionary> dict(
[[NSMutableDictionary alloc] initWithDictionary:@{
@"foo" : @{
@"width" : @100,
@"height" : @200,
@"name" : @"bar",
}
}]);
base::FilePath path =
WriteOutCustomPapersPlist(temp_dir.GetPath(), "good2.plist", dict);
ASSERT_FALSE(path.empty());
auto papers = internal::GetMacCustomPaperSizesFromFile(path);
ASSERT_EQ(1u, papers.size());
EXPECT_EQ("bar", papers[0].display_name);
EXPECT_EQ("", papers[0].vendor_id);
EXPECT_EQ(35278, papers[0].size_um.width());
EXPECT_EQ(70556, papers[0].size_um.height());
}
{
base::scoped_nsobject<NSMutableDictionary> dict(
[[NSMutableDictionary alloc] initWithDictionary:@{}]);
base::FilePath path =
WriteOutCustomPapersPlist(temp_dir.GetPath(), "empty.plist", dict);
ASSERT_FALSE(path.empty());
auto papers = internal::GetMacCustomPaperSizesFromFile(path);
ASSERT_EQ(0u, papers.size());
}
{
base::scoped_nsobject<NSMutableDictionary> dict(
[[NSMutableDictionary alloc] initWithDictionary:@{
@"foo" : @{
@"height" : @200,
@"name" : @"bar",
}
}]);
base::FilePath path =
WriteOutCustomPapersPlist(temp_dir.GetPath(), "no_width.plist", dict);
ASSERT_FALSE(path.empty());
auto papers = internal::GetMacCustomPaperSizesFromFile(path);
ASSERT_EQ(0u, papers.size());
}
{
base::scoped_nsobject<NSMutableDictionary> dict(
[[NSMutableDictionary alloc] initWithDictionary:@{
@"foo" : @{
@"width" : @100,
@"name" : @"bar",
}
}]);
base::FilePath path =
WriteOutCustomPapersPlist(temp_dir.GetPath(), "no_height.plist", dict);
ASSERT_FALSE(path.empty());
auto papers = internal::GetMacCustomPaperSizesFromFile(path);
ASSERT_EQ(0u, papers.size());
}
{
base::scoped_nsobject<NSMutableDictionary> dict(
[[NSMutableDictionary alloc] initWithDictionary:@{
@"foo" : @{
@"width" : @100,
@"height" : @200,
}
}]);
base::FilePath path =
WriteOutCustomPapersPlist(temp_dir.GetPath(), "no_name.plist", dict);
ASSERT_FALSE(path.empty());
auto papers = internal::GetMacCustomPaperSizesFromFile(path);
ASSERT_EQ(0u, papers.size());
}
{
base::scoped_nsobject<NSMutableDictionary> dict(
[[NSMutableDictionary alloc] initWithDictionary:@{
@"foo" : @{
@"width" : @0,
@"height" : @200,
@"name" : @"bar",
}
}]);
base::FilePath path =
WriteOutCustomPapersPlist(temp_dir.GetPath(), "zero_width.plist", dict);
ASSERT_FALSE(path.empty());
auto papers = internal::GetMacCustomPaperSizesFromFile(path);
ASSERT_EQ(0u, papers.size());
}
{
base::scoped_nsobject<NSMutableDictionary> dict(
[[NSMutableDictionary alloc] initWithDictionary:@{
@"foo" : @{
@"width" : @100,
@"height" : @0,
@"name" : @"bar",
}
}]);
base::FilePath path = WriteOutCustomPapersPlist(temp_dir.GetPath(),
"zero_height.plist", dict);
ASSERT_FALSE(path.empty());
auto papers = internal::GetMacCustomPaperSizesFromFile(path);
ASSERT_EQ(0u, papers.size());
}
{
base::scoped_nsobject<NSMutableDictionary> dict(
[[NSMutableDictionary alloc] initWithDictionary:@{
@"foo" : @{
@"width" : @7199929,
@"height" : @200,
@"name" : @"bar",
}
}]);
base::FilePath path =
WriteOutCustomPapersPlist(temp_dir.GetPath(), "big_width.plist", dict);
ASSERT_FALSE(path.empty());
auto papers = internal::GetMacCustomPaperSizesFromFile(path);
ASSERT_EQ(0u, papers.size());
}
{
base::scoped_nsobject<NSMutableDictionary> dict(
[[NSMutableDictionary alloc] initWithDictionary:@{
@"foo" : @{
@"width" : @100,
@"height" : @7199929,
@"name" : @"bar",
}
}]);
base::FilePath path =
WriteOutCustomPapersPlist(temp_dir.GetPath(), "big_height.plist", dict);
ASSERT_FALSE(path.empty());
auto papers = internal::GetMacCustomPaperSizesFromFile(path);
ASSERT_EQ(0u, papers.size());
}
{
base::scoped_nsobject<NSMutableDictionary> dict(
[[NSMutableDictionary alloc] initWithDictionary:@{
@"foo" : @{
@"width" : @100,
@"height" : @200,
@"name" : @"",
}
}]);
base::FilePath path =
WriteOutCustomPapersPlist(temp_dir.GetPath(), "empty_name.plist", dict);
ASSERT_FALSE(path.empty());
auto papers = internal::GetMacCustomPaperSizesFromFile(path);
ASSERT_EQ(0u, papers.size());
}
}
} // namespace printing