ifd_builder_test.go: Fix test

dustin/add_skipped_tags_tracking
Dustin Oprea 2020-05-16 16:47:03 -04:00
parent a45cc7cfd5
commit efa6e2d6c0
1 changed files with 106 additions and 94 deletions

View File

@ -4,7 +4,7 @@ import (
"bytes"
"fmt"
"reflect"
// "sort"
"sort"
"strings"
"testing"
@ -1550,142 +1550,154 @@ func ExampleIfdBuilder_SetStandardWithName_updateGps() {
// Degrees<O=[N] D=(11) M=(22) S=(33)>
}
// TODO(dustin): There's some current discrepancy in-between the original and recovered that needs to be investigated.
func TestIfdBuilder_NewIfdBuilderFromExistingChain_RealData(t *testing.T) {
testImageFilepath := getTestImageFilepath()
// func TestIfdBuilder_NewIfdBuilderFromExistingChain_RealData(t *testing.T) {
// testImageFilepath := getTestImageFilepath()
rawExif, err := SearchFileAndExtractExif(testImageFilepath)
log.PanicIf(err)
// rawExif, err := SearchFileAndExtractExif(testImageFilepath)
// log.PanicIf(err)
// Decode from binary.
// // Decode from binary.
im := NewIfdMapping()
// im := NewIfdMapping()
err = LoadStandardIfds(im)
log.PanicIf(err)
// err = LoadStandardIfds(im)
// log.PanicIf(err)
ti := NewTagIndex()
// ti := NewTagIndex()
_, originalIndex, err := Collect(im, ti, rawExif)
log.PanicIf(err)
// _, originalIndex, err := Collect(im, ti, rawExif)
// log.PanicIf(err)
originalThumbnailData, err := originalIndex.RootIfd.NextIfd.Thumbnail()
log.PanicIf(err)
// originalThumbnailData, err := originalIndex.RootIfd.NextIfd.Thumbnail()
// log.PanicIf(err)
originalTags := originalIndex.RootIfd.DumpTags()
// originalTags := originalIndex.RootIfd.DumpTags()
// Encode back to binary.
// // Encode back to binary.
ibe := NewIfdByteEncoder()
// ibe := NewIfdByteEncoder()
rootIb := NewIfdBuilderFromExistingChain(originalIndex.RootIfd)
// rootIb := NewIfdBuilderFromExistingChain(originalIndex.RootIfd)
updatedExif, err := ibe.EncodeToExif(rootIb)
log.PanicIf(err)
// updatedExif, err := ibe.EncodeToExif(rootIb)
// log.PanicIf(err)
// Parse again.
// // Parse again.
_, recoveredIndex, err := Collect(im, ti, updatedExif)
log.PanicIf(err)
// _, recoveredIndex, err := Collect(im, ti, updatedExif)
// log.PanicIf(err)
recoveredTags := recoveredIndex.RootIfd.DumpTags()
// recoveredTags := recoveredIndex.RootIfd.DumpTags()
recoveredThumbnailData, err := recoveredIndex.RootIfd.NextIfd.Thumbnail()
log.PanicIf(err)
// recoveredThumbnailData, err := recoveredIndex.RootIfd.NextIfd.Thumbnail()
// log.PanicIf(err)
// Check the thumbnail.
// // Check the thumbnail.
if bytes.Compare(recoveredThumbnailData, originalThumbnailData) != 0 {
t.Fatalf("recovered thumbnail does not match original")
}
// if bytes.Compare(recoveredThumbnailData, originalThumbnailData) != 0 {
// t.Fatalf("recovered thumbnail does not match original")
// }
// Validate that all of the same IFDs were presented.
// // Validate that all of the same IFDs were presented.
originalIfdTags := make([][2]interface{}, 0)
for _, ite := range originalTags {
if ite.ChildIfdPath() != "" {
originalIfdTags = append(originalIfdTags, [2]interface{}{ite.IfdPath(), ite.TagId()})
}
}
// originalIfdTags := make([][2]interface{}, 0)
// for _, ite := range originalTags {
// if ite.ChildIfdPath() != "" {
// originalIfdTags = append(originalIfdTags, [2]interface{}{ite.IfdPath(), ite.TagId()})
// }
// }
recoveredIfdTags := make([][2]interface{}, 0)
for _, ite := range recoveredTags {
if ite.ChildIfdPath() != "" {
recoveredIfdTags = append(recoveredIfdTags, [2]interface{}{ite.IfdPath(), ite.TagId()})
}
}
// recoveredIfdTags := make([][2]interface{}, 0)
// for _, ite := range recoveredTags {
// if ite.ChildIfdPath() != "" {
// recoveredIfdTags = append(recoveredIfdTags, [2]interface{}{ite.IfdPath(), ite.TagId()})
// }
// }
if reflect.DeepEqual(recoveredIfdTags, originalIfdTags) != true {
fmt.Printf("Original IFD tags:\n\n")
// if reflect.DeepEqual(recoveredIfdTags, originalIfdTags) != true {
// fmt.Printf("Original IFD tags:\n\n")
for i, x := range originalIfdTags {
fmt.Printf(" %02d %v\n", i, x)
}
// for i, x := range originalIfdTags {
// fmt.Printf(" %02d %v\n", i, x)
// }
fmt.Printf("\nRecovered IFD tags:\n\n")
// fmt.Printf("\nRecovered IFD tags:\n\n")
for i, x := range recoveredIfdTags {
fmt.Printf(" %02d %v\n", i, x)
}
// for i, x := range recoveredIfdTags {
// fmt.Printf(" %02d %v\n", i, x)
// }
fmt.Printf("\n")
// fmt.Printf("\n")
t.Fatalf("Recovered IFD tags are not correct.")
}
// t.Fatalf("Recovered IFD tags are not correct.")
// }
// 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.
// // 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.
if len(recoveredTags) != len(originalTags) {
t.Fatalf("Recovered tag-count does not match original.")
}
// if len(recoveredTags) != len(originalTags) {
// t.Fatalf("Recovered tag-count does not match original.")
// }
originalTagPhrases := make([]string, 0)
for _, ite := range originalTags {
phrase := ite.String()
// originalTagPhrases := make([]string, 0)
// for _, ite := range originalTags {
// valuePhrase, err := ite.Format()
// log.PanicIf(err)
// The value (the offset) of IFDs will almost never be the same after
// reconstruction (by design).
if ite.ChildIfdName() == "" {
valuePhrase, err := ite.FormatFirst()
log.PanicIf(err)
// phrase := ite.String() + " " + valuePhrase
// originalTagPhrases = append(originalTagPhrases, phrase)
// }
phrase += " " + valuePhrase
}
// sort.Strings(originalTagPhrases)
originalTagPhrases = append(originalTagPhrases, phrase)
}
// recoveredTagPhrases := make([]string, 0)
// for _, ite := range recoveredTags {
// valuePhrase, err := ite.Format()
// log.PanicIf(err)
sort.Strings(originalTagPhrases)
// phrase := ite.String() + " " + valuePhrase
// recoveredTagPhrases = append(recoveredTagPhrases, phrase)
// }
recoveredTagPhrases := make([]string, 0)
for _, ite := range recoveredTags {
phrase := ite.String()
// sort.Strings(recoveredTagPhrases)
// The value (the offset) of IFDs will almost never be the same after
// reconstruction (by design).
if ite.ChildIfdName() == "" {
valuePhrase, err := ite.FormatFirst()
log.PanicIf(err)
// if reflect.DeepEqual(recoveredTagPhrases, originalTagPhrases) != true {
// fmt.Printf("ORIGINAL:\n")
// fmt.Printf("\n")
phrase += " " + valuePhrase
}
// for _, tag := range originalTagPhrases {
// fmt.Printf("%s\n", tag)
// }
recoveredTagPhrases = append(recoveredTagPhrases, phrase)
}
// fmt.Printf("\n")
sort.Strings(recoveredTagPhrases)
// fmt.Printf("RECOVERED:\n")
// fmt.Printf("\n")
if reflect.DeepEqual(recoveredTagPhrases, originalTagPhrases) != true {
fmt.Printf("ORIGINAL:\n")
fmt.Printf("\n")
// for _, tag := range recoveredTagPhrases {
// fmt.Printf("%s\n", tag)
// }
for _, tag := range originalTagPhrases {
fmt.Printf("%s\n", tag)
}
// fmt.Printf("\n")
fmt.Printf("\n")
// t.Fatalf("Recovered tags do not equal original tags.")
// }
// }
fmt.Printf("RECOVERED:\n")
fmt.Printf("\n")
for _, tag := range recoveredTagPhrases {
fmt.Printf("%s\n", tag)
}
fmt.Printf("\n")
t.Fatalf("Recovered tags do not equal original tags.")
}
}
// func TestIfdBuilder_NewIfdBuilderFromExistingChain_RealData_WithUpdate(t *testing.T) {
// testImageFilepath := getTestImageFilepath()