mirror of https://github.com/dsoprea/go-exif.git
Fixed tests for recent changes.
parent
8ce7625fc9
commit
0a561e98ed
|
@ -352,9 +352,9 @@
|
|||
"unit_count": 264,
|
||||
"value": {
|
||||
"EncodingType": 3,
|
||||
"EncodingBytes": ""
|
||||
"EncodingBytes": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
|
||||
},
|
||||
"value_string": "UserComment\u003cSIZE=(0) ENCODING=[UNDEFINED] V=[]\u003e"
|
||||
"value_string": "UserComment\u003cSIZE=(256) ENCODING=[UNDEFINED] V=[0 0 0 0 0 0 0 0]... LEN=(256)\u003e"
|
||||
},
|
||||
{
|
||||
"ifd_name": "Exif",
|
||||
|
@ -691,29 +691,5 @@
|
|||
"unit_count": 1,
|
||||
"value": "2",
|
||||
"value_string": "2"
|
||||
},
|
||||
{
|
||||
"ifd_name": "IFD",
|
||||
"parent_ifd_name": "",
|
||||
"ifd_index": 1,
|
||||
"tag_id": 513,
|
||||
"tag_name": "JPEGInterchangeFormat",
|
||||
"tag_type_id": 4,
|
||||
"tag_type_name": "LONG",
|
||||
"unit_count": 1,
|
||||
"value": "11444",
|
||||
"value_string": "11444"
|
||||
},
|
||||
{
|
||||
"ifd_name": "IFD",
|
||||
"parent_ifd_name": "",
|
||||
"ifd_index": 1,
|
||||
"tag_id": 514,
|
||||
"tag_name": "JPEGInterchangeFormatLength",
|
||||
"tag_type_id": 4,
|
||||
"tag_type_name": "LONG",
|
||||
"unit_count": 1,
|
||||
"value": "21491",
|
||||
"value_string": "21491"
|
||||
}
|
||||
]
|
||||
|
|
|
@ -10,6 +10,7 @@ import (
|
|||
|
||||
"os/exec"
|
||||
"encoding/json"
|
||||
"io/ioutil"
|
||||
|
||||
"github.com/dsoprea/go-logging"
|
||||
)
|
||||
|
@ -65,7 +66,7 @@ IFD=[Exif] ID=(0x9207) NAME=[MeteringMode] COUNT=(1) TYPE=[SHORT] VALUE=[5]
|
|||
IFD=[Exif] ID=(0x9209) NAME=[Flash] COUNT=(1) TYPE=[SHORT] VALUE=[16]
|
||||
IFD=[Exif] ID=(0x920a) NAME=[FocalLength] COUNT=(1) TYPE=[RATIONAL] VALUE=[16/1]
|
||||
IFD=[Exif] ID=(0x927c) NAME=[MakerNote] COUNT=(8152) TYPE=[UNDEFINED] VALUE=[MakerNote<TYPE-ID=[28 00 01 00 03 00 31 00 00 00 74 05 00 00 02 00 03 00 04 00]>]
|
||||
IFD=[Exif] ID=(0x9286) NAME=[UserComment] COUNT=(264) TYPE=[UNDEFINED] VALUE=[UserComment<SIZE=(0) ENCODING=[UNDEFINED] V=[]>]
|
||||
IFD=[Exif] ID=(0x9286) NAME=[UserComment] COUNT=(264) TYPE=[UNDEFINED] VALUE=[UserComment<SIZE=(256) ENCODING=[UNDEFINED] V=[0 0 0 0 0 0 0 0]... LEN=(256)>]
|
||||
IFD=[Exif] ID=(0x9290) NAME=[SubSecTime] COUNT=(3) TYPE=[ASCII] VALUE=[00]
|
||||
IFD=[Exif] ID=(0x9291) NAME=[SubSecTimeOriginal] COUNT=(3) TYPE=[ASCII] VALUE=[00]
|
||||
IFD=[Exif] ID=(0x9292) NAME=[SubSecTimeDigitized] COUNT=(3) TYPE=[ASCII] VALUE=[00]
|
||||
|
@ -94,12 +95,10 @@ IFD=[IFD] ID=(0x0103) NAME=[Compression] COUNT=(1) TYPE=[SHORT] VALUE=[6]
|
|||
IFD=[IFD] ID=(0x011a) NAME=[XResolution] COUNT=(1) TYPE=[RATIONAL] VALUE=[72/1]
|
||||
IFD=[IFD] ID=(0x011b) NAME=[YResolution] COUNT=(1) TYPE=[RATIONAL] VALUE=[72/1]
|
||||
IFD=[IFD] ID=(0x0128) NAME=[ResolutionUnit] COUNT=(1) TYPE=[SHORT] VALUE=[2]
|
||||
IFD=[IFD] ID=(0x0201) NAME=[JPEGInterchangeFormat] COUNT=(1) TYPE=[LONG] VALUE=[11444]
|
||||
IFD=[IFD] ID=(0x0202) NAME=[JPEGInterchangeFormatLength] COUNT=(1) TYPE=[LONG] VALUE=[21491]
|
||||
`
|
||||
|
||||
if actual != expected {
|
||||
t.Fatalf("Output not as expected:\n%s", actual)
|
||||
t.Fatalf("Output not as expected:\nACTUAL:\n%s\nEXPECTED:\n%s", actual, expected)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -134,20 +133,17 @@ func TestMainJson(t *testing.T) {
|
|||
|
||||
jsonFilepath := path.Join(assetsPath, "exif_read.json")
|
||||
|
||||
f, err := os.Open(jsonFilepath)
|
||||
expectedRaw, err := ioutil.ReadFile(jsonFilepath)
|
||||
log.PanicIf(err)
|
||||
|
||||
defer f.Close()
|
||||
|
||||
expected := make([]map[string]interface{}, 0)
|
||||
|
||||
r := json.NewDecoder(f)
|
||||
err = r.Decode(&expected)
|
||||
err = json.Unmarshal(expectedRaw, &expected)
|
||||
log.PanicIf(err)
|
||||
|
||||
|
||||
if reflect.DeepEqual(actual, expected) == false {
|
||||
t.Fatalf("Output not as expected:\n%s", actual)
|
||||
t.Fatalf("Output not as expected:\nACTUAL:\n%s\nEXPECTED:\n%s", actualRaw, expectedRaw)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -145,7 +145,7 @@ func TestVisit(t *testing.T) {
|
|||
"IFD=[Exif] ID=(0x9209) NAME=[Flash] COUNT=(1) TYPE=[SHORT] VALUE=[16]",
|
||||
"IFD=[Exif] ID=(0x920a) NAME=[FocalLength] COUNT=(1) TYPE=[RATIONAL] VALUE=[16/1]",
|
||||
"IFD=[Exif] ID=(0x927c) NAME=[MakerNote] COUNT=(8152) TYPE=[UNDEFINED] VALUE=[MakerNote<TYPE-ID=[28 00 01 00 03 00 31 00 00 00 74 05 00 00 02 00 03 00 04 00]>]",
|
||||
"IFD=[Exif] ID=(0x9286) NAME=[UserComment] COUNT=(264) TYPE=[UNDEFINED] VALUE=[UserComment<SIZE=(0) ENCODING=[UNDEFINED] V=[]>]",
|
||||
"IFD=[Exif] ID=(0x9286) NAME=[UserComment] COUNT=(264) TYPE=[UNDEFINED] VALUE=[UserComment<SIZE=(256) ENCODING=[UNDEFINED] V=[0 0 0 0 0 0 0 0]... LEN=(256)>]",
|
||||
"IFD=[Exif] ID=(0x9290) NAME=[SubSecTime] COUNT=(3) TYPE=[ASCII] VALUE=[00]",
|
||||
"IFD=[Exif] ID=(0x9291) NAME=[SubSecTimeOriginal] COUNT=(3) TYPE=[ASCII] VALUE=[00]",
|
||||
"IFD=[Exif] ID=(0x9292) NAME=[SubSecTimeDigitized] COUNT=(3) TYPE=[ASCII] VALUE=[00]",
|
||||
|
@ -174,8 +174,6 @@ func TestVisit(t *testing.T) {
|
|||
"IFD=[IFD] ID=(0x011a) NAME=[XResolution] COUNT=(1) TYPE=[RATIONAL] VALUE=[72/1]",
|
||||
"IFD=[IFD] ID=(0x011b) NAME=[YResolution] COUNT=(1) TYPE=[RATIONAL] VALUE=[72/1]",
|
||||
"IFD=[IFD] ID=(0x0128) NAME=[ResolutionUnit] COUNT=(1) TYPE=[SHORT] VALUE=[2]",
|
||||
"IFD=[IFD] ID=(0x0201) NAME=[JPEGInterchangeFormat] COUNT=(1) TYPE=[LONG] VALUE=[11444]",
|
||||
"IFD=[IFD] ID=(0x0202) NAME=[JPEGInterchangeFormatLength] COUNT=(1) TYPE=[LONG] VALUE=[21491]",
|
||||
}
|
||||
|
||||
if reflect.DeepEqual(tags, expected) == false {
|
||||
|
|
|
@ -918,10 +918,10 @@ func ExampleIfdByteEncoder_EncodeToExif() {
|
|||
|
||||
// Output:
|
||||
//
|
||||
// 0: IfdTagEntry<TAG-IFD=[] TAG-ID=(0x0b) TAG-TYPE=[ASCII] UNIT-COUNT=(11)> [asciivalue]
|
||||
// 1: IfdTagEntry<TAG-IFD=[] TAG-ID=(0x150) TAG-TYPE=[BYTE] UNIT-COUNT=(1)> [[17]]
|
||||
// 2: IfdTagEntry<TAG-IFD=[] TAG-ID=(0xff) TAG-TYPE=[SHORT] UNIT-COUNT=(1)> [[8755]]
|
||||
// 3: IfdTagEntry<TAG-IFD=[] TAG-ID=(0x100) TAG-TYPE=[LONG] UNIT-COUNT=(1)> [[1146447479]]
|
||||
// 4: IfdTagEntry<TAG-IFD=[] TAG-ID=(0x13e) TAG-TYPE=[RATIONAL] UNIT-COUNT=(1)> [[{286335522 858997828}]]
|
||||
// 0: IfdTagEntry<TAG-IFD=[] TAG-ID=(0x000b) TAG-TYPE=[ASCII] UNIT-COUNT=(11)> [asciivalue]
|
||||
// 1: IfdTagEntry<TAG-IFD=[] TAG-ID=(0x0150) TAG-TYPE=[BYTE] UNIT-COUNT=(1)> [[17]]
|
||||
// 2: IfdTagEntry<TAG-IFD=[] TAG-ID=(0x00ff) TAG-TYPE=[SHORT] UNIT-COUNT=(1)> [[8755]]
|
||||
// 3: IfdTagEntry<TAG-IFD=[] TAG-ID=(0x0100) TAG-TYPE=[LONG] UNIT-COUNT=(1)> [[1146447479]]
|
||||
// 4: IfdTagEntry<TAG-IFD=[] TAG-ID=(0x013e) TAG-TYPE=[RATIONAL] UNIT-COUNT=(1)> [[{286335522 858997828}]]
|
||||
// 5: IfdTagEntry<TAG-IFD=[] TAG-ID=(0x9201) TAG-TYPE=[SRATIONAL] UNIT-COUNT=(1)> [[{286335522 858997828}]]
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ import (
|
|||
"bytes"
|
||||
"path"
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/dsoprea/go-logging"
|
||||
)
|
||||
|
@ -148,7 +148,7 @@ func TestAddChildIb(t *testing.T) {
|
|||
if ib.tags[0].tagId != 0x11 {
|
||||
t.Fatalf("first tag not correct")
|
||||
} else if ib.tags[1].tagId != ibChild.ifdTagId {
|
||||
t.Fatalf("second tag ID does not match child-IFD tag-ID: (0x%02x) != (0x%02x)", ib.tags[1].tagId, ibChild.ifdTagId)
|
||||
t.Fatalf("second tag ID does not match child-IFD tag-ID: (0x%04x) != (0x%04x)", ib.tags[1].tagId, ibChild.ifdTagId)
|
||||
} else if ib.tags[1].value.Ib() != ibChild {
|
||||
t.Fatalf("second tagvalue does not match child-IFD")
|
||||
} else if ib.tags[2].tagId != 0x22 {
|
||||
|
@ -169,6 +169,7 @@ func TestAddTagsFromExisting(t *testing.T) {
|
|||
entries := make([]*IfdTagEntry, 3)
|
||||
|
||||
entries[0] = &IfdTagEntry{
|
||||
Ii: ExifIi,
|
||||
TagId: 0x11,
|
||||
TagType: TypeByte,
|
||||
UnitCount: 4,
|
||||
|
@ -176,11 +177,14 @@ func TestAddTagsFromExisting(t *testing.T) {
|
|||
}
|
||||
|
||||
entries[1] = &IfdTagEntry{
|
||||
Ii: ExifIi,
|
||||
TagId: 0x22,
|
||||
TagType: TypeLong,
|
||||
ChildIfdName: "some ifd",
|
||||
}
|
||||
|
||||
entries[2] = &IfdTagEntry{
|
||||
Ii: ExifIi,
|
||||
TagId: 0x33,
|
||||
TagType: TypeByte,
|
||||
UnitCount: 4,
|
||||
|
@ -197,9 +201,11 @@ func TestAddTagsFromExisting(t *testing.T) {
|
|||
|
||||
if ib.tags[0].tagId != 0x11 {
|
||||
t.Fatalf("tag (0) not correct")
|
||||
} else if ib.tags[1].tagId != 0x33 {
|
||||
} else if ib.tags[1].tagId != 0x22 {
|
||||
t.Fatalf("tag (1) not correct")
|
||||
} else if len(ib.tags) != 2 {
|
||||
} else if ib.tags[2].tagId != 0x33 {
|
||||
t.Fatalf("tag (2) not correct")
|
||||
} else if len(ib.tags) != 3 {
|
||||
t.Fatalf("tag count not correct")
|
||||
}
|
||||
}
|
||||
|
@ -275,9 +281,9 @@ func TestAddTagsFromExisting__Excludes(t *testing.T) {
|
|||
err := ib.AddTagsFromExisting(ifd, nil, nil, []uint16 { 0x11 })
|
||||
log.PanicIf(err)
|
||||
|
||||
if ib.tags[0].tagId != 0x33 {
|
||||
if ib.tags[0].tagId != 0x22 {
|
||||
t.Fatalf("tag not correct")
|
||||
} else if len(ib.tags) != 1 {
|
||||
} else if len(ib.tags) != 2 {
|
||||
t.Fatalf("tag count not correct")
|
||||
}
|
||||
}
|
||||
|
@ -328,7 +334,7 @@ func TestFindN_First_1(t *testing.T) {
|
|||
bt = tags[found[0]]
|
||||
|
||||
if bt.tagId != 0x11 {
|
||||
log.Panicf("Found entry is not correct: (0x%02x)", bt.tagId)
|
||||
log.Panicf("Found entry is not correct: (0x%04x)", bt.tagId)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -378,7 +384,7 @@ func TestFindN_First_2_1Returned(t *testing.T) {
|
|||
bt = tags[found[0]]
|
||||
|
||||
if bt.tagId != 0x11 {
|
||||
log.Panicf("Found entry is not correct: (0x%02x)", bt.tagId)
|
||||
log.Panicf("Found entry is not correct: (0x%04x)", bt.tagId)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -450,12 +456,12 @@ func TestFindN_First_2_2Returned(t *testing.T) {
|
|||
|
||||
bt = tags[found[0]]
|
||||
if bt.tagId != 0x11 || bytes.Compare(bt.value.Bytes(), []byte("test string")) != 0 {
|
||||
log.Panicf("Found entry 0 is not correct: (0x%02x) [%s]", bt.tagId, bt.value)
|
||||
log.Panicf("Found entry 0 is not correct: (0x%04x) [%s]", bt.tagId, bt.value)
|
||||
}
|
||||
|
||||
bt = tags[found[1]]
|
||||
if bt.tagId != 0x11 || bytes.Compare(bt.value.Bytes(), []byte("test string4")) != 0 {
|
||||
log.Panicf("Found entry 1 is not correct: (0x%02x) [%s]", bt.tagId, bt.value)
|
||||
log.Panicf("Found entry 1 is not correct: (0x%04x) [%s]", bt.tagId, bt.value)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -535,7 +541,7 @@ func TestFindN_Middle_WithDuplicates(t *testing.T) {
|
|||
bt = tags[found[0]]
|
||||
|
||||
if bt.tagId != 0x33 {
|
||||
log.Panicf("Found entry is not correct: (0x%02x)", bt.tagId)
|
||||
log.Panicf("Found entry is not correct: (0x%04x)", bt.tagId)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -595,7 +601,7 @@ func TestFindN_Middle_NoDuplicates(t *testing.T) {
|
|||
bt = tags[found[0]]
|
||||
|
||||
if bt.tagId != 0x33 {
|
||||
log.Panicf("Found entry is not correct: (0x%02x)", bt.tagId)
|
||||
log.Panicf("Found entry is not correct: (0x%04x)", bt.tagId)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -664,7 +670,7 @@ func TestFind_Hit(t *testing.T) {
|
|||
bt = tags[position]
|
||||
|
||||
if bt.tagId != 0x33 {
|
||||
log.Panicf("Found entry is not correct: (0x%02x)", bt.tagId)
|
||||
log.Panicf("Found entry is not correct: (0x%04x)", bt.tagId)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1232,20 +1238,20 @@ func Test_IfdBuilder_CreateIfdBuilderFromExistingChain(t *testing.T) {
|
|||
itevr := NewIfdTagEntryValueResolver(rawExif, index.RootIfd.ByteOrder)
|
||||
ib := NewIfdBuilderFromExistingChain(index.RootIfd, itevr)
|
||||
|
||||
lines := ib.DumpToStrings()
|
||||
actual := ib.DumpToStrings()
|
||||
|
||||
expected := []string {
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(0) TAG=[0x10f]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(1) TAG=[0x110]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(2) TAG=[0x112]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(3) TAG=[0x11a]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(4) TAG=[0x11b]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(5) TAG=[0x128]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(6) TAG=[0x132]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(7) TAG=[0x13b]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(8) TAG=[0x213]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(9) TAG=[0x8298]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x00) CHILD-IFD=[Exif] INDEX=(10) TAG=[0x8769]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(0) TAG=[0x010f]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(1) TAG=[0x0110]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(2) TAG=[0x0112]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(3) TAG=[0x011a]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(4) TAG=[0x011b]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(5) TAG=[0x0128]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(6) TAG=[0x0132]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(7) TAG=[0x013b]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(8) TAG=[0x0213]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(9) TAG=[0x8298]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x0000) CHILD-IFD=[Exif] INDEX=(10) TAG=[0x8769]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(0) TAG=[0x829a]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(1) TAG=[0x829d]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(2) TAG=[0x8822]",
|
||||
|
@ -1271,27 +1277,28 @@ func Test_IfdBuilder_CreateIfdBuilderFromExistingChain(t *testing.T) {
|
|||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(22) TAG=[0xa001]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(23) TAG=[0xa002]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(24) TAG=[0xa003]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(25) TAG=[0xa20e]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(26) TAG=[0xa20f]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(27) TAG=[0xa210]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(28) TAG=[0xa401]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(29) TAG=[0xa402]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(30) TAG=[0xa403]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(31) TAG=[0xa406]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(32) TAG=[0xa430]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(33) TAG=[0xa431]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(34) TAG=[0xa432]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(35) TAG=[0xa434]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(36) TAG=[0xa435]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[Iop] INDEX=(37) TAG=[0xa005]",
|
||||
"<PARENTS=[IFD->Exif] IFD-NAME=[Iop]> IFD-TAG-ID=(0xa005) CHILD-IFD=[] INDEX=(0) TAG=[0x01]",
|
||||
"<PARENTS=[IFD->Exif] IFD-NAME=[Iop]> IFD-TAG-ID=(0xa005) CHILD-IFD=[] INDEX=(1) TAG=[0x02]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x00) CHILD-IFD=[GPSInfo] INDEX=(11) TAG=[0x8825]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[GPSInfo]> IFD-TAG-ID=(0x8825) CHILD-IFD=[] INDEX=(0) TAG=[0x00]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[Iop] INDEX=(25) TAG=[0xa005]",
|
||||
"<PARENTS=[IFD->Exif] IFD-NAME=[Iop]> IFD-TAG-ID=(0xa005) CHILD-IFD=[] INDEX=(0) TAG=[0x0001]",
|
||||
"<PARENTS=[IFD->Exif] IFD-NAME=[Iop]> IFD-TAG-ID=(0xa005) CHILD-IFD=[] INDEX=(1) TAG=[0x0002]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(26) TAG=[0xa20e]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(27) TAG=[0xa20f]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(28) TAG=[0xa210]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(29) TAG=[0xa401]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(30) TAG=[0xa402]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(31) TAG=[0xa403]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(32) TAG=[0xa406]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(33) TAG=[0xa430]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(34) TAG=[0xa431]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(35) TAG=[0xa432]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(36) TAG=[0xa434]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[Exif]> IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(37) TAG=[0xa435]",
|
||||
"<PARENTS=[] IFD-NAME=[IFD]> IFD-TAG-ID=(0x0000) CHILD-IFD=[GPSInfo] INDEX=(11) TAG=[0x8825]",
|
||||
"<PARENTS=[IFD] IFD-NAME=[GPSInfo]> IFD-TAG-ID=(0x8825) CHILD-IFD=[] INDEX=(0) TAG=[0x0000]",
|
||||
}
|
||||
|
||||
if reflect.DeepEqual(lines, expected) == false {
|
||||
t.Fatalf("IB did not [correctly] duplicate the IFD structure")
|
||||
if reflect.DeepEqual(actual, expected) == false {
|
||||
fmt.Printf("ACTUAL:\n%s\n\nEXPECTED:\n%s\n", strings.Join(actual, "\n"), strings.Join(expected, "\n"))
|
||||
t.Fatalf("IB did not [correctly] duplicate the IFD structure.")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1308,32 +1315,44 @@ func Test_IfdBuilder_CreateIfdBuilderFromExistingChain_RealData(t *testing.T) {
|
|||
|
||||
// Decode from binary.
|
||||
|
||||
_, index, err := e.Collect(rawExif)
|
||||
_, originalIndex, err := e.Collect(rawExif)
|
||||
log.PanicIf(err)
|
||||
|
||||
originalTags := index.RootIfd.DumpTags()
|
||||
index.RootIfd.PrintTagTree(true)
|
||||
originalThumbnailData, err := originalIndex.RootIfd.NextIfd.Thumbnail()
|
||||
log.PanicIf(err)
|
||||
|
||||
originalTags := originalIndex.RootIfd.DumpTags()
|
||||
|
||||
|
||||
// Encode back to binary.
|
||||
|
||||
ibe := NewIfdByteEncoder()
|
||||
|
||||
itevr := NewIfdTagEntryValueResolver(rawExif, index.RootIfd.ByteOrder)
|
||||
rootIb := NewIfdBuilderFromExistingChain(index.RootIfd, itevr)
|
||||
itevr := NewIfdTagEntryValueResolver(rawExif, originalIndex.RootIfd.ByteOrder)
|
||||
rootIb := NewIfdBuilderFromExistingChain(originalIndex.RootIfd, itevr)
|
||||
|
||||
updatedExif, err := ibe.EncodeToExif(rootIb)
|
||||
log.PanicIf(err)
|
||||
|
||||
|
||||
// Parse again.
|
||||
|
||||
_, index, err = e.Collect(updatedExif)
|
||||
_, recoveredIndex, err := e.Collect(updatedExif)
|
||||
log.PanicIf(err)
|
||||
|
||||
recoveredTags := index.RootIfd.DumpTags()
|
||||
index.RootIfd.PrintTagTree(true)
|
||||
recoveredTags := recoveredIndex.RootIfd.DumpTags()
|
||||
|
||||
|
||||
return
|
||||
recoveredThumbnailData, err := recoveredIndex.RootIfd.NextIfd.Thumbnail()
|
||||
log.PanicIf(err)
|
||||
|
||||
|
||||
// Check the thumbnail.
|
||||
|
||||
if bytes.Compare(recoveredThumbnailData, originalThumbnailData) != 0 {
|
||||
t.Fatalf("recovered thumbnail does not match original")
|
||||
}
|
||||
|
||||
|
||||
// Validate that all of the same IFDs were presented.
|
||||
|
||||
|
@ -1370,45 +1389,34 @@ return
|
|||
}
|
||||
|
||||
|
||||
// Validate that all of the tags owned by the IFDs were presented. The tags
|
||||
// might not be in the same order since the IFD tags are allocated after
|
||||
// the non-IFD ones.
|
||||
// Validate that all of the tags owned by the IFDs were presented. Note
|
||||
// that the thumbnail tags are not kept but only produced on the fly, which
|
||||
// is why we check it above.
|
||||
|
||||
originalNonIfdTags := make([]string, 0)
|
||||
for _, ite := range originalTags {
|
||||
if ite.ChildIfdName == "" {
|
||||
originalNonIfdTags = append(originalNonIfdTags, fmt.Sprintf("%s 0x%02x", ite.Ii, ite.TagId))
|
||||
}
|
||||
}
|
||||
|
||||
sort.StringSlice(originalNonIfdTags).Sort()
|
||||
|
||||
recoveredNonIfdTags := make([]string, 0)
|
||||
for _, ite := range recoveredTags {
|
||||
if ite.ChildIfdName == "" {
|
||||
recoveredNonIfdTags = append(recoveredNonIfdTags, fmt.Sprintf("%s 0x%02x", ite.Ii, ite.TagId))
|
||||
}
|
||||
}
|
||||
|
||||
sort.StringSlice(recoveredNonIfdTags).Sort()
|
||||
|
||||
|
||||
if reflect.DeepEqual(recoveredNonIfdTags, originalNonIfdTags) != true {
|
||||
fmt.Printf("Original non-IFD tags:\n\n")
|
||||
|
||||
for i, x := range originalNonIfdTags {
|
||||
fmt.Printf(" %02d %v\n", i, x)
|
||||
for i, recoveredIte := range recoveredTags {
|
||||
if recoveredIte.ChildIfdName != "" {
|
||||
continue
|
||||
}
|
||||
|
||||
fmt.Printf("\nRecovered non-IFD tags:\n\n")
|
||||
originalIte := originalTags[i]
|
||||
|
||||
for i, x := range recoveredNonIfdTags {
|
||||
fmt.Printf(" %02d %v\n", i, x)
|
||||
if recoveredIte.Ii != originalIte.Ii {
|
||||
t.Fatalf("IfdIdentify not as expected: %s != %s ITE=%s", recoveredIte.Ii, originalIte.Ii, recoveredIte)
|
||||
} else if recoveredIte.TagId != originalIte.TagId {
|
||||
t.Fatalf("Tag-ID not as expected: %s != %s ITE=%s", recoveredIte.TagId, originalIte.TagId, recoveredIte)
|
||||
} else if recoveredIte.TagType != originalIte.TagType {
|
||||
t.Fatalf("Tag-type not as expected: %d != %d ITE=%s", recoveredIte.TagType, originalIte.TagType, recoveredIte)
|
||||
}
|
||||
|
||||
fmt.Printf("\n")
|
||||
originalValueBytes, err := originalIte.ValueBytes(originalIndex.RootIfd.addressableData, originalIndex.RootIfd.ByteOrder)
|
||||
log.PanicIf(err)
|
||||
|
||||
t.Fatalf("Recovered non-IFD tags are not correct.")
|
||||
recoveredValueBytes, err := recoveredIte.ValueBytes(recoveredIndex.RootIfd.addressableData, recoveredIndex.RootIfd.ByteOrder)
|
||||
log.PanicIf(err)
|
||||
|
||||
if bytes.Compare(originalValueBytes, recoveredValueBytes) != 0 {
|
||||
t.Fatalf("bytes of tag content not correct: %s != %s", originalIte, recoveredIte)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1496,7 +1504,7 @@ func TestAddFromConfigWithName(t *testing.T) {
|
|||
if bt.ii != RootIi {
|
||||
t.Fatalf("II not correct: %s", bt.ii)
|
||||
} else if bt.tagId != 0x000b {
|
||||
t.Fatalf("Tag-ID not correct: (0x%02x)", bt.tagId)
|
||||
t.Fatalf("Tag-ID not correct: (0x%04x)", bt.tagId)
|
||||
}
|
||||
|
||||
s := string(bt.value.Bytes())
|
||||
|
|
|
@ -173,7 +173,7 @@ func Test_IfdTagEntry_String(t *testing.T) {
|
|||
Ii: RootIi,
|
||||
}
|
||||
|
||||
expected := "IfdTagEntry<TAG-IFD=[] TAG-ID=(0x01) TAG-TYPE=[BYTE] UNIT-COUNT=(6)>"
|
||||
expected := "IfdTagEntry<TAG-IFD=[] TAG-ID=(0x0001) TAG-TYPE=[BYTE] UNIT-COUNT=(6)>"
|
||||
if ite.String() != expected {
|
||||
t.Fatalf("string representation not expected: [%s] != [%s]", ite.String(), expected)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue