blob: 6cef62f7c5a03d6380c66eddfed090d55d707dd7 [file] [log] [blame]
// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef LORGNETTE_SANE_CLIENT_FAKE_H_
#define LORGNETTE_SANE_CLIENT_FAKE_H_
#include <cstdint>
#include <map>
#include <memory>
#include <string>
#include <vector>
#include <base/optional.h>
#include <sane/sane.h>
#include "lorgnette/sane_client.h"
namespace lorgnette {
class SaneDeviceFake;
class SaneClientFake : public SaneClient {
public:
base::Optional<std::vector<ScannerInfo>> ListDevices(
brillo::ErrorPtr* error) override {
return scanners_;
}
void SetListDevicesResult(bool value);
void AddDevice(const std::string& name,
const std::string& manufacturer,
const std::string& model,
const std::string& type);
void RemoveDevice(const std::string& name);
void SetDeviceForName(const std::string& device_name,
std::unique_ptr<SaneDeviceFake> device);
protected:
std::unique_ptr<SaneDevice> ConnectToDeviceInternal(
brillo::ErrorPtr* error,
SANE_Status* sane_status,
const std::string& device_name) override;
private:
std::map<std::string, std::unique_ptr<SaneDeviceFake>> devices_;
bool list_devices_result_;
std::vector<ScannerInfo> scanners_;
};
class SaneDeviceFake : public SaneDevice {
public:
SaneDeviceFake();
~SaneDeviceFake();
base::Optional<ValidOptionValues> GetValidOptionValues(
brillo::ErrorPtr* error) override;
base::Optional<int> GetScanResolution(brillo::ErrorPtr* error) override {
return resolution_;
}
bool SetScanResolution(brillo::ErrorPtr* error, int resolution) override;
base::Optional<std::string> GetDocumentSource(
brillo::ErrorPtr* error) override {
return source_name_;
}
bool SetDocumentSource(brillo::ErrorPtr* error,
const std::string& source_name) override;
base::Optional<ColorMode> GetColorMode(brillo::ErrorPtr* error) override {
return color_mode_;
}
bool SetColorMode(brillo::ErrorPtr* error, ColorMode color_mode) override;
bool SetScanRegion(brillo::ErrorPtr* error,
const ScanRegion& region) override;
SANE_Status StartScan(brillo::ErrorPtr* error) override;
base::Optional<ScanParameters> GetScanParameters(
brillo::ErrorPtr* error) override;
SANE_Status ReadScanData(brillo::ErrorPtr* error,
uint8_t* buf,
size_t count,
size_t* read_out) override;
bool CancelScan(brillo::ErrorPtr* error) override;
void SetValidOptionValues(const base::Optional<ValidOptionValues>& values);
void SetStartScanResult(SANE_Status status);
void SetScanParameters(const base::Optional<ScanParameters>& params);
void SetReadScanDataResult(SANE_Status result);
void SetScanData(const std::vector<std::vector<uint8_t>>& scan_data);
private:
int resolution_;
std::string source_name_;
ColorMode color_mode_;
base::Optional<ValidOptionValues> values_;
SANE_Status start_scan_result_;
SANE_Status read_scan_data_result_;
bool scan_running_;
bool cancelled_;
base::Optional<ScanParameters> params_;
std::vector<std::vector<uint8_t>> scan_data_;
size_t current_page_;
size_t scan_data_offset_;
};
} // namespace lorgnette
#endif // LORGNETTE_SANE_CLIENT_FAKE_H_