From 0a561e98edd75f7803b9c6a48a5d626a8e58b47e Mon Sep 17 00:00:00 2001 From: Dustin Oprea Date: Tue, 29 May 2018 00:55:43 -0400 Subject: [PATCH] Fixed tests for recent changes. --- assets/exif_read.json | 28 +----- exif-read-tool/main_test.go | 16 ++-- exif_test.go | 4 +- ifd_builder_encode_test.go | 10 +- ifd_builder_test.go | 180 +++++++++++++++++++----------------- ifd_tag_entry_test.go | 2 +- 6 files changed, 109 insertions(+), 131 deletions(-) diff --git a/assets/exif_read.json b/assets/exif_read.json index 63c2d2e..a42665d 100644 --- a/assets/exif_read.json +++ b/assets/exif_read.json @@ -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" } ] diff --git a/exif-read-tool/main_test.go b/exif-read-tool/main_test.go index 96e00dc..0565a5c 100644 --- a/exif-read-tool/main_test.go +++ b/exif-read-tool/main_test.go @@ -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] -IFD=[Exif] ID=(0x9286) NAME=[UserComment] COUNT=(264) TYPE=[UNDEFINED] VALUE=[UserComment] +IFD=[Exif] ID=(0x9286) NAME=[UserComment] COUNT=(264) TYPE=[UNDEFINED] VALUE=[UserComment] 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) } } diff --git a/exif_test.go b/exif_test.go index 250188b..adec4f4 100644 --- a/exif_test.go +++ b/exif_test.go @@ -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]", - "IFD=[Exif] ID=(0x9286) NAME=[UserComment] COUNT=(264) TYPE=[UNDEFINED] VALUE=[UserComment]", + "IFD=[Exif] ID=(0x9286) NAME=[UserComment] COUNT=(264) TYPE=[UNDEFINED] VALUE=[UserComment]", "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 { diff --git a/ifd_builder_encode_test.go b/ifd_builder_encode_test.go index dd16876..23d93f9 100644 --- a/ifd_builder_encode_test.go +++ b/ifd_builder_encode_test.go @@ -918,10 +918,10 @@ func ExampleIfdByteEncoder_EncodeToExif() { // Output: // - // 0: IfdTagEntry [asciivalue] - // 1: IfdTagEntry [[17]] - // 2: IfdTagEntry [[8755]] - // 3: IfdTagEntry [[1146447479]] - // 4: IfdTagEntry [[{286335522 858997828}]] + // 0: IfdTagEntry [asciivalue] + // 1: IfdTagEntry [[17]] + // 2: IfdTagEntry [[8755]] + // 3: IfdTagEntry [[1146447479]] + // 4: IfdTagEntry [[{286335522 858997828}]] // 5: IfdTagEntry [[{286335522 858997828}]] } diff --git a/ifd_builder_test.go b/ifd_builder_test.go index 85750dc..b865b6f 100644 --- a/ifd_builder_test.go +++ b/ifd_builder_test.go @@ -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 { - " IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(0) TAG=[0x10f]", - " IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(1) TAG=[0x110]", - " IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(2) TAG=[0x112]", - " IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(3) TAG=[0x11a]", - " IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(4) TAG=[0x11b]", - " IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(5) TAG=[0x128]", - " IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(6) TAG=[0x132]", - " IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(7) TAG=[0x13b]", - " IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(8) TAG=[0x213]", - " IFD-TAG-ID=(0x00) CHILD-IFD=[] INDEX=(9) TAG=[0x8298]", - " IFD-TAG-ID=(0x00) CHILD-IFD=[Exif] INDEX=(10) TAG=[0x8769]", + " IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(0) TAG=[0x010f]", + " IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(1) TAG=[0x0110]", + " IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(2) TAG=[0x0112]", + " IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(3) TAG=[0x011a]", + " IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(4) TAG=[0x011b]", + " IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(5) TAG=[0x0128]", + " IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(6) TAG=[0x0132]", + " IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(7) TAG=[0x013b]", + " IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(8) TAG=[0x0213]", + " IFD-TAG-ID=(0x0000) CHILD-IFD=[] INDEX=(9) TAG=[0x8298]", + " IFD-TAG-ID=(0x0000) CHILD-IFD=[Exif] INDEX=(10) TAG=[0x8769]", " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(0) TAG=[0x829a]", " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(1) TAG=[0x829d]", " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(2) TAG=[0x8822]", @@ -1271,27 +1277,28 @@ func Test_IfdBuilder_CreateIfdBuilderFromExistingChain(t *testing.T) { " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(22) TAG=[0xa001]", " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(23) TAG=[0xa002]", " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(24) TAG=[0xa003]", - " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(25) TAG=[0xa20e]", - " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(26) TAG=[0xa20f]", - " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(27) TAG=[0xa210]", - " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(28) TAG=[0xa401]", - " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(29) TAG=[0xa402]", - " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(30) TAG=[0xa403]", - " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(31) TAG=[0xa406]", - " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(32) TAG=[0xa430]", - " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(33) TAG=[0xa431]", - " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(34) TAG=[0xa432]", - " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(35) TAG=[0xa434]", - " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(36) TAG=[0xa435]", - " IFD-TAG-ID=(0x8769) CHILD-IFD=[Iop] INDEX=(37) TAG=[0xa005]", - "Exif] IFD-NAME=[Iop]> IFD-TAG-ID=(0xa005) CHILD-IFD=[] INDEX=(0) TAG=[0x01]", - "Exif] IFD-NAME=[Iop]> IFD-TAG-ID=(0xa005) CHILD-IFD=[] INDEX=(1) TAG=[0x02]", - " IFD-TAG-ID=(0x00) CHILD-IFD=[GPSInfo] INDEX=(11) TAG=[0x8825]", - " IFD-TAG-ID=(0x8825) CHILD-IFD=[] INDEX=(0) TAG=[0x00]", + " IFD-TAG-ID=(0x8769) CHILD-IFD=[Iop] INDEX=(25) TAG=[0xa005]", + "Exif] IFD-NAME=[Iop]> IFD-TAG-ID=(0xa005) CHILD-IFD=[] INDEX=(0) TAG=[0x0001]", + "Exif] IFD-NAME=[Iop]> IFD-TAG-ID=(0xa005) CHILD-IFD=[] INDEX=(1) TAG=[0x0002]", + " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(26) TAG=[0xa20e]", + " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(27) TAG=[0xa20f]", + " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(28) TAG=[0xa210]", + " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(29) TAG=[0xa401]", + " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(30) TAG=[0xa402]", + " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(31) TAG=[0xa403]", + " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(32) TAG=[0xa406]", + " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(33) TAG=[0xa430]", + " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(34) TAG=[0xa431]", + " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(35) TAG=[0xa432]", + " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(36) TAG=[0xa434]", + " IFD-TAG-ID=(0x8769) CHILD-IFD=[] INDEX=(37) TAG=[0xa435]", + " IFD-TAG-ID=(0x0000) CHILD-IFD=[GPSInfo] INDEX=(11) TAG=[0x8825]", + " 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()) diff --git a/ifd_tag_entry_test.go b/ifd_tag_entry_test.go index 6a52ce9..5235483 100644 --- a/ifd_tag_entry_test.go +++ b/ifd_tag_entry_test.go @@ -173,7 +173,7 @@ func Test_IfdTagEntry_String(t *testing.T) { Ii: RootIi, } - expected := "IfdTagEntry" + expected := "IfdTagEntry" if ite.String() != expected { t.Fatalf("string representation not expected: [%s] != [%s]", ite.String(), expected) }