mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-09 19:29:34 +08:00
Add basic tests
This commit is contained in:
parent
b0e69735ff
commit
5e0b7c9bbf
129
pdf/fjson/fielddata_test.go
Normal file
129
pdf/fjson/fielddata_test.go
Normal file
@ -0,0 +1,129 @@
|
||||
package fjson
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/unidoc/unidoc/pdf/model"
|
||||
)
|
||||
|
||||
func TestLoadPDFFormData(t *testing.T) {
|
||||
fdata, err := LoadPDFFromPath(`./testdata/basicform.pdf`)
|
||||
if err != nil {
|
||||
t.Fatalf("Error: %v", err)
|
||||
}
|
||||
|
||||
data, err := fdata.JSON()
|
||||
if err != nil {
|
||||
t.Fatalf("Error: %v", err)
|
||||
}
|
||||
|
||||
var fields []struct {
|
||||
Name string `json:"name"`
|
||||
Value string `json:"value"`
|
||||
Options []string `json:"options"`
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(data), &fields)
|
||||
if err != nil {
|
||||
t.Fatalf("Error: %v", err)
|
||||
}
|
||||
|
||||
if len(fields) != 9 {
|
||||
t.Fatalf("Should have 9 fields")
|
||||
}
|
||||
|
||||
// Check first field.
|
||||
if fields[0].Name != "full_name" {
|
||||
t.Fatalf("Incorrect field name (got %s)", fields[0].Name)
|
||||
}
|
||||
if fields[0].Value != "" {
|
||||
t.Fatalf("Value not empty")
|
||||
}
|
||||
if len(fields[0].Options) != 0 {
|
||||
t.Fatalf("Options not empty")
|
||||
}
|
||||
|
||||
// Check another field.
|
||||
if fields[7].Name != "female" {
|
||||
t.Fatalf("Incorrect field name (got %s)", fields[7].Name)
|
||||
}
|
||||
if fields[7].Value != "Off" {
|
||||
t.Fatalf("Value not Off (got %s)", fields[7].Value)
|
||||
}
|
||||
if strings.Join(fields[7].Options, ", ") != "Off, Yes" {
|
||||
t.Fatalf("Wrong options (got %#v)", fields[7].Options)
|
||||
}
|
||||
}
|
||||
|
||||
// Tests loading JSON form data, filling in a form and loading the PDF form data and comparing the results.
|
||||
func TestFillPDFForm(t *testing.T) {
|
||||
fdata, err := LoadJSONFromPath(`./testdata/formdata.json`)
|
||||
if err != nil {
|
||||
t.Fatalf("Error: %v", err)
|
||||
}
|
||||
data, err := fdata.JSON()
|
||||
if err != nil {
|
||||
t.Fatalf("Error: %v", err)
|
||||
}
|
||||
|
||||
// Open pdf to fill.
|
||||
var pdfReader *model.PdfReader
|
||||
{
|
||||
f, err := os.Open(`./testdata/basicform.pdf`)
|
||||
if err != nil {
|
||||
t.Fatalf("Error: %v", err)
|
||||
}
|
||||
defer f.Close()
|
||||
pdfReader, err = model.NewPdfReader(f)
|
||||
if err != nil {
|
||||
t.Fatalf("Error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
err = pdfReader.AcroForm.Fill(fdata)
|
||||
if err != nil {
|
||||
t.Fatalf("Error: %v", err)
|
||||
}
|
||||
|
||||
// Write to buffer.
|
||||
var buf bytes.Buffer
|
||||
{
|
||||
// TODO(gunnsth): Implement a simpler method for populating all pages from a reader.
|
||||
pdfWriter := model.NewPdfWriter()
|
||||
for i := range pdfReader.PageList {
|
||||
err := pdfWriter.AddPage(pdfReader.PageList[i])
|
||||
if err != nil {
|
||||
t.Fatalf("Error: %v", err)
|
||||
}
|
||||
}
|
||||
err := pdfWriter.SetForms(pdfReader.AcroForm)
|
||||
if err != nil {
|
||||
t.Fatalf("Error: %v", err)
|
||||
}
|
||||
err = pdfWriter.Write(&buf)
|
||||
if err != nil {
|
||||
t.Fatalf("Error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
bufReader := bytes.NewReader(buf.Bytes())
|
||||
|
||||
// Read back.
|
||||
fdata2, err := LoadPDF(bufReader)
|
||||
if err != nil {
|
||||
t.Fatalf("Error: %v", err)
|
||||
}
|
||||
|
||||
data2, err := fdata2.JSON()
|
||||
if err != nil {
|
||||
t.Fatalf("Error: %v", err)
|
||||
}
|
||||
|
||||
if data != data2 {
|
||||
t.Fatalf("%s != %s", data, data2)
|
||||
}
|
||||
}
|
BIN
pdf/fjson/testdata/basicform.pdf
vendored
Normal file
BIN
pdf/fjson/testdata/basicform.pdf
vendored
Normal file
Binary file not shown.
46
pdf/fjson/testdata/formdata.json
vendored
Normal file
46
pdf/fjson/testdata/formdata.json
vendored
Normal file
@ -0,0 +1,46 @@
|
||||
[
|
||||
{
|
||||
"name": "full_name",
|
||||
"value": "Jónas Þorgrímsson"
|
||||
},
|
||||
{
|
||||
"name": "address_line_1",
|
||||
"value": "Laugalæk 103"
|
||||
},
|
||||
{
|
||||
"name": "address_line_2",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"name": "age",
|
||||
"value": "39"
|
||||
},
|
||||
{
|
||||
"name": "city",
|
||||
"value": "Reykjavík"
|
||||
},
|
||||
{
|
||||
"name": "country",
|
||||
"value": "Ísland"
|
||||
},
|
||||
{
|
||||
"name": "male",
|
||||
"value": "Yes",
|
||||
"options": [
|
||||
"Off",
|
||||
"Yes"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "female",
|
||||
"value": "Off",
|
||||
"options": [
|
||||
"Off",
|
||||
"Yes"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "fav_color",
|
||||
"value": ""
|
||||
}
|
||||
]
|
Loading…
x
Reference in New Issue
Block a user