blob: 4a4ea66096d76f74ca80a06d792973b0ae75b32a [file] [log] [blame]
// Copyright 2022 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.
package main
import (
"flag"
"fmt"
"log"
"path"
"chromiumos/scanning/hwtests"
"chromiumos/scanning/utils"
)
// Tests each scan source of a scanner to make sure the scanning behavior
// conforms to the WWCB specification. Each scan source should be at least
// letter-sized.
func main() {
identifierFlag := flag.String("identifier", "", "Substring of the identifier printed by lorgnette_cli of the scanner to test.")
flag.Parse()
logFile, err := utils.CreateLogFile("test_scan_source")
if err != nil {
log.Fatal(err)
}
log.SetOutput(logFile)
fmt.Printf("Created log file at: %s\n", logFile.Name())
listOutput, err := utils.LorgnetteCLIList()
if err != nil {
log.Fatal(err)
}
scannerInfo, err := utils.GetLorgnetteScannerInfo(listOutput, *identifierFlag)
if err != nil {
log.Fatal(err)
}
log.Print("INFO: Testing scanner: ", scannerInfo.ToLorgnetteScannerName())
rawLorgnetteCaps, err := utils.LorgnetteCLIGetJSONCaps(scannerInfo.ToLorgnetteScannerName())
if err != nil {
log.Fatal(err)
}
lorgnetteCaps, err := utils.ParseLorgnetteCapabilities(rawLorgnetteCaps)
if err != nil {
log.Fatal(err)
}
outputDir := path.Dir(logFile.Name())
tests := map[string]utils.TestFunction{
"PlatenScanSource": hwtests.AllScanCombinationsTest(lorgnetteCaps.PlatenCaps, "Platen", scannerInfo.ToLorgnetteScannerName(), outputDir),
"AdfSimplexScanSource": hwtests.AllScanCombinationsTest(lorgnetteCaps.AdfSimplexCaps, "ADF Simplex", scannerInfo.ToLorgnetteScannerName(), outputDir),
"AdfDuplexScanSource": hwtests.AllScanCombinationsTest(lorgnetteCaps.AdfDuplexCaps, "ADF Duplex", scannerInfo.ToLorgnetteScannerName(), outputDir)}
failed := []string{}
skipped := []string{}
errors := []string{}
for name, test := range tests {
testResult := utils.RunTest(name, test)
if testResult == utils.Failed {
failed = append(failed, name)
} else if testResult == utils.Skipped {
skipped = append(skipped, name)
} else if testResult == utils.Error {
errors = append(errors, name)
}
}
fmt.Printf("Ran %d tests.\n", len(tests))
if len(failed) != 0 {
fmt.Printf("%d tests failed:\n", len(failed))
for _, failedTest := range failed {
fmt.Println(failedTest)
}
}
if len(skipped) != 0 {
fmt.Printf("%d tests skipped:\n", len(skipped))
for _, skippedTest := range skipped {
fmt.Println(skippedTest)
}
}
if len(errors) != 0 {
fmt.Printf("%d tests had errors:\n", len(errors))
for _, errorTest := range errors {
fmt.Println(errorTest)
}
}
}