blob: 86caa07a334339361c0f5ecbf53c7e167f105e7f [file] [log] [blame]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "lorgnette/scanner_match.h"
#include <string>
#include <gtest/gtest.h>
#include <base/containers/flat_set.h>
namespace lorgnette {
namespace {
const char* kScannerNameVidpid = "pixma:12344321_AF123";
const char* kScannerNameBusdev = "epsonds:libusb:001:002";
TEST(ScannerMatchTest, ExtractVidPidOk) {
auto vid_pid_result = ExtractIdentifiersFromDeviceName(
kScannerNameVidpid,
"pixma:([0-9a-fA-F]{4})([0-9a-fA-F]{4})_[0-9a-fA-F]*");
EXPECT_TRUE(vid_pid_result.has_value());
EXPECT_EQ(vid_pid_result.value().first, "1234");
EXPECT_EQ(vid_pid_result.value().second, "4321");
}
TEST(ScannerMatchTest, ExtractBusDevOk) {
auto bus_dev_result = ExtractIdentifiersFromDeviceName(
kScannerNameBusdev, "epson(?:2|ds)?:libusb:([0-9]{3}):([0-9]{3})");
EXPECT_TRUE(bus_dev_result.has_value());
EXPECT_EQ(bus_dev_result.value().first, "001");
EXPECT_EQ(bus_dev_result.value().second, "002");
}
TEST(ScannerMatchTest, NoMatchFound) {
auto vid_pid_result = ExtractIdentifiersFromDeviceName(
"pixma:123421_AB3",
"pixma:([0-9a-fA-F]{4})([0-9a-fA-F]{4})_[0-9a-fA-F]*");
EXPECT_FALSE(vid_pid_result.has_value());
}
TEST(ScannerMatchTest, DuplicateVidPidOk) {
base::flat_set<std::string> seen_vidpids;
base::flat_set<std::string> seen_busdevs;
seen_vidpids.insert("1234:4321");
EXPECT_TRUE(
DuplicateScannerExists(kScannerNameVidpid, seen_vidpids, seen_busdevs));
}
TEST(ScannerMatchTest, DuplicateBusDevOk) {
base::flat_set<std::string> seen_vidpids;
base::flat_set<std::string> seen_busdevs;
seen_busdevs.insert("001:002");
EXPECT_TRUE(
DuplicateScannerExists(kScannerNameBusdev, seen_vidpids, seen_busdevs));
}
TEST(ScannerMatchTest, NoDuplicatesFound) {
base::flat_set<std::string> seen_vidpids;
base::flat_set<std::string> seen_busdevs;
seen_vidpids.insert("5678:8765");
seen_busdevs.insert("003:004");
EXPECT_FALSE(
DuplicateScannerExists(kScannerNameVidpid, seen_vidpids, seen_busdevs));
EXPECT_FALSE(
DuplicateScannerExists(kScannerNameBusdev, seen_vidpids, seen_busdevs));
}
TEST(ScannerMatchTest, EpsonConnections) {
ScannerInfo info;
info.set_name("epson2:net:1.2.3.4");
EXPECT_EQ(ConnectionTypeForScanner(info), CONNECTION_NETWORK);
info.set_name("epsonds:net:1.2.3.4");
EXPECT_EQ(ConnectionTypeForScanner(info), CONNECTION_NETWORK);
info.set_name("epson2:libusb:001:002");
EXPECT_EQ(ConnectionTypeForScanner(info), CONNECTION_USB);
info.set_name("epsonds:libusb:001:002");
EXPECT_EQ(ConnectionTypeForScanner(info), CONNECTION_USB);
}
TEST(ScannerMatchTest, PixmaConnections) {
ScannerInfo info;
info.set_name("pixma:MF2600_1.2.3.4");
EXPECT_EQ(ConnectionTypeForScanner(info), CONNECTION_NETWORK);
info.set_name("pixma:04A91234_ABC123");
EXPECT_EQ(ConnectionTypeForScanner(info), CONNECTION_USB);
}
TEST(ScannerMatchTest, OtherConnections) {
ScannerInfo info;
info.set_name("ippusb:escl:therest");
EXPECT_EQ(ConnectionTypeForScanner(info), CONNECTION_USB);
}
TEST(ScannerMatchTest, ProtocolTypeMopriaNet) {
ScannerInfo info;
info.set_name("airscan:escl:therest");
EXPECT_EQ(ProtocolTypeForScanner(info), "Mopria");
}
TEST(ScannerMatchTest, ProtocolTypeMopriaUSB) {
ScannerInfo info;
info.set_name("ippusb:escl:therest");
EXPECT_EQ(ProtocolTypeForScanner(info), "Mopria");
}
TEST(ScannerMatchTest, ProtocolTypeWSD) {
ScannerInfo info;
info.set_name("airscan:wsd:therest");
EXPECT_EQ(ProtocolTypeForScanner(info), "WSD");
}
TEST(ScannerMatchTest, ProtocolTypeOther) {
ScannerInfo info;
info.set_name("epson2:net:therest");
EXPECT_EQ(ProtocolTypeForScanner(info), "epson2");
info.set_name("epsonds:libusb:001:002");
EXPECT_EQ(ProtocolTypeForScanner(info), "epsonds");
info.set_name("pixma:04a91234_ABC321");
EXPECT_EQ(ProtocolTypeForScanner(info), "pixma");
info.set_name("fujitsu:fi-8120:10000");
EXPECT_EQ(ProtocolTypeForScanner(info), "fujitsu");
}
TEST(ScannerMatchTest, IppUsbDevice) {
EXPECT_TRUE(IsIppUsbDevice("airscan:otherstuff"));
EXPECT_TRUE(IsIppUsbDevice("ippusb:otherstuff"));
EXPECT_FALSE(IsIppUsbDevice("pixma:otherstuff"));
EXPECT_FALSE(IsIppUsbDevice("epson2:otherstuff"));
EXPECT_FALSE(IsIppUsbDevice("epsonds:otherstuff"));
EXPECT_FALSE(IsIppUsbDevice("fujitsu:otherstuff"));
}
} // namespace
} // namespace lorgnette