Files
pdfsign/sign/helpers_test.go
Paul van Brouwershaven 44ac3c7806 Check errors
2022-06-30 18:04:25 +02:00

184 lines
4.3 KiB
Go

package sign
import (
"bufio"
"bytes"
"os"
"testing"
"time"
"github.com/digitorus/pdf"
)
func TestFindFirstPage(t *testing.T) {
input_file, reader := loadHelpersTestPDF()
if input_file == nil || reader == nil {
t.Errorf("Failed to load test PDF")
return
}
root := reader.Trailer().Key("Root")
root_keys := root.Keys()
found_pages := false
for _, key := range root_keys {
if key == "Pages" {
found_pages = true
break
}
}
if !found_pages {
input_file.Close()
t.Errorf("Could not find pages element")
return
}
first_page, err := findFirstPage(root.Key("Pages"))
if err != nil {
input_file.Close()
t.Errorf("Could not find first page")
return
}
first_page_ptr := first_page.GetPtr()
if first_page_ptr.GetGen() != 0 {
input_file.Close()
t.Errorf("First page gen mismatch")
}
if first_page_ptr.GetID() != 4 {
t.Errorf("First page ID mismatch")
}
input_file.Close()
}
func TestPDFString(t *testing.T) {
string_compare := map[string]string{
"Test": "(Test)",
"((Test)": "(\\(\\(Test\\))",
"\\TEst": "(\\\\TEst)",
"\rnew": "(\\rnew)",
}
for text, expected := range string_compare {
if pdfString(text) != expected {
t.Errorf("Error while escaping %s. Expected %s, got %s.", text, expected, pdfString(text))
}
}
}
func TestPdfDateTime(t *testing.T) {
timezone, _ := time.LoadLocation("Europe/Tallinn")
timezone_1, _ := time.LoadLocation("Africa/Casablanca")
timezone_2, _ := time.LoadLocation("America/New_York")
timezone_3, _ := time.LoadLocation("Asia/Jerusalem")
timezone_4, _ := time.LoadLocation("Europe/Amsterdam")
timezone_5, _ := time.LoadLocation("Pacific/Honolulu")
now := time.Date(2017, 9, 23, 14, 39, 0, 0, timezone)
date_compare := map[time.Time]string{
now.In(timezone_1): "(D:20170923123900+01'00')",
now.In(timezone_2): "(D:20170923073900-04'00')",
now.In(timezone_3): "(D:20170923143900+03'00')",
now.In(timezone_4): "(D:20170923133900+02'00')",
now.In(timezone_5): "(D:20170923013900-10'00')",
}
for date, expected := range date_compare {
if pdfDateTime(date) != expected {
t.Errorf("Error while converting date %s to string. Expected %s, got %s.", date.String(), expected, pdfDateTime(date))
}
}
}
func TestLeftPad(t *testing.T) {
string_compare := map[string]string{
"123456789": "123456789",
"12345678": "12345678",
"1234567": "_1234567",
"123456": "__123456",
"12345": "___12345",
"1234": "____1234",
"123": "_____123",
"12": "______12",
"1": "_______1",
"": "________",
}
for text, expected := range string_compare {
if leftPad(text, "_", 8-len(text)) != expected {
t.Errorf("Error while left padding %s. Expected %s, got %s.", text, expected, leftPad(text, "_", 8-len(text)))
}
}
}
func TestWritePartFromSourceFileToTargetFile(t *testing.T) {
var b bytes.Buffer
writer := bufio.NewWriter(&b)
input_file, err := os.Open("../testfiles/testfile20.pdf")
if err != nil {
t.Errorf("Failed to load test PDF")
return
}
_ = writePartFromSourceFileToTargetFile(input_file, writer, 0, 0)
writer.Flush()
if writer.Buffered() != 0 {
t.Errorf("Content was copied while length was 0")
}
_ = writePartFromSourceFileToTargetFile(input_file, writer, 0, -20)
writer.Flush()
if writer.Buffered() != 0 {
t.Errorf("Content was copied while length was smaller than 0")
}
_ = writePartFromSourceFileToTargetFile(input_file, writer, 0, 8)
writer.Flush()
if b.String() != "%PDF-2.0" {
t.Errorf("Wrong content was copied, got %s but expected %s", b.String(), "%PDF-2.0")
}
_ = writePartFromSourceFileToTargetFile(input_file, writer, 33, 8)
writer.Flush()
if b.String() != "%PDF-2.0/Catalog" {
t.Errorf("Wrong content was copied, got %s but expected %s", b.String(), "%PDF-2.0/Catalog")
}
_ = writePartFromSourceFileToTargetFile(input_file, writer, 0, 1200)
if writer.Buffered() != 1200 {
t.Errorf("Requested 1200 bytes but only got %d", writer.Buffered())
}
input_file.Close()
}
func loadHelpersTestPDF() (*os.File, *pdf.Reader) {
input_file, err := os.Open("../testfiles/testfile20.pdf")
if err != nil {
return nil, nil
}
finfo, err := input_file.Stat()
if err != nil {
input_file.Close()
return nil, nil
}
size := finfo.Size()
rdr, err := pdf.NewReader(input_file, size)
if err != nil {
return nil, nil
}
return input_file, rdr
}