mirror of https://github.com/dsoprea/go-exif.git
ifd_builder_test.go: Fix test
parent
a45cc7cfd5
commit
efa6e2d6c0
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue