diff options
Diffstat (limited to 'vendor/github.com/rwcarlsen/goexif/exif/exif_test.go')
-rw-r--r-- | vendor/github.com/rwcarlsen/goexif/exif/exif_test.go | 202 |
1 files changed, 0 insertions, 202 deletions
diff --git a/vendor/github.com/rwcarlsen/goexif/exif/exif_test.go b/vendor/github.com/rwcarlsen/goexif/exif/exif_test.go deleted file mode 100644 index c53f1ddda..000000000 --- a/vendor/github.com/rwcarlsen/goexif/exif/exif_test.go +++ /dev/null @@ -1,202 +0,0 @@ -package exif - -//go:generate go run regen_regress.go -- regress_expected_test.go -//go:generate go fmt regress_expected_test.go - -import ( - "flag" - "fmt" - "math" - "os" - "path/filepath" - "strings" - "testing" - - "github.com/rwcarlsen/goexif/tiff" -) - -var dataDir = flag.String("test_data_dir", ".", "Directory where the data files for testing are located") - -func TestDecode(t *testing.T) { - fpath := filepath.Join(*dataDir, "samples") - f, err := os.Open(fpath) - if err != nil { - t.Fatalf("Could not open sample directory '%s': %v", fpath, err) - } - - names, err := f.Readdirnames(0) - if err != nil { - t.Fatalf("Could not read sample directory '%s': %v", fpath, err) - } - - cnt := 0 - for _, name := range names { - if !strings.HasSuffix(name, ".jpg") { - t.Logf("skipping non .jpg file %v", name) - continue - } - t.Logf("testing file %v", name) - f, err := os.Open(filepath.Join(fpath, name)) - if err != nil { - t.Fatal(err) - } - - x, err := Decode(f) - if err != nil { - t.Fatal(err) - } else if x == nil { - t.Fatalf("No error and yet %v was not decoded", name) - } - - t.Logf("checking pic %v", name) - x.Walk(&walker{name, t}) - cnt++ - } - if cnt != len(regressExpected) { - t.Errorf("Did not process enough samples, got %d, want %d", cnt, len(regressExpected)) - } -} - -type walker struct { - picName string - t *testing.T -} - -func (w *walker) Walk(field FieldName, tag *tiff.Tag) error { - // this needs to be commented out when regenerating regress expected vals - pic := regressExpected[w.picName] - if pic == nil { - w.t.Errorf(" regression data not found") - return nil - } - - exp, ok := pic[field] - if !ok { - w.t.Errorf(" regression data does not have field %v", field) - return nil - } - - s := tag.String() - if tag.Count == 1 && s != "\"\"" { - s = fmt.Sprintf("[%s]", s) - } - got := tag.String() - - if exp != got { - fmt.Println("s: ", s) - fmt.Printf("len(s)=%v\n", len(s)) - w.t.Errorf(" field %v bad tag: expected '%s', got '%s'", field, exp, got) - } - return nil -} - -func TestMarshal(t *testing.T) { - name := filepath.Join(*dataDir, "sample1.jpg") - f, err := os.Open(name) - if err != nil { - t.Fatalf("%v\n", err) - } - defer f.Close() - - x, err := Decode(f) - if err != nil { - t.Fatal(err) - } - if x == nil { - t.Fatal("bad err") - } - - b, err := x.MarshalJSON() - if err != nil { - t.Fatal(err) - } - - t.Logf("%s", b) -} - -func testSingleParseDegreesString(t *testing.T, s string, w float64) { - g, err := parseTagDegreesString(s) - if err != nil { - t.Fatal(err) - } - if math.Abs(w-g) > 1e-10 { - t.Errorf("Wrong parsing result %s: Want %.12f, got %.12f", s, w, g) - } -} - -func TestParseTagDegreesString(t *testing.T) { - // semicolon as decimal mark - testSingleParseDegreesString(t, "52,00000,50,00000,34,01180", 52.842781055556) // comma as separator - testSingleParseDegreesString(t, "52,00000;50,00000;34,01180", 52.842781055556) // semicolon as separator - - // point as decimal mark - testSingleParseDegreesString(t, "14.00000,44.00000,34.01180", 14.742781055556) // comma as separator - testSingleParseDegreesString(t, "14.00000;44.00000;34.01180", 14.742781055556) // semicolon as separator - testSingleParseDegreesString(t, "14.00000;44.00000,34.01180", 14.742781055556) // mixed separators - - testSingleParseDegreesString(t, "-008.0,30.0,03.6", -8.501) // leading zeros - - // no decimal places - testSingleParseDegreesString(t, "-10,15,54", -10.265) - testSingleParseDegreesString(t, "-10;15;54", -10.265) - - // incorrect mix of comma and point as decimal mark - s := "-17,00000,15.00000,04.80000" - if _, err := parseTagDegreesString(s); err == nil { - t.Error("parseTagDegreesString: false positive for " + s) - } -} - -// Make sure we error out early when a tag had a count of MaxUint32 -func TestMaxUint32CountError(t *testing.T) { - name := filepath.Join(*dataDir, "corrupt/max_uint32_exif.jpg") - f, err := os.Open(name) - if err != nil { - t.Fatalf("%v\n", err) - } - defer f.Close() - - _, err = Decode(f) - if err == nil { - t.Fatal("no error on bad exif data") - } - if !strings.Contains(err.Error(), "invalid Count offset") { - t.Fatal("wrong error:", err.Error()) - } -} - -// Make sure we error out early with tag data sizes larger than the image file -func TestHugeTagError(t *testing.T) { - name := filepath.Join(*dataDir, "corrupt/huge_tag_exif.jpg") - f, err := os.Open(name) - if err != nil { - t.Fatalf("%v\n", err) - } - defer f.Close() - - _, err = Decode(f) - if err == nil { - t.Fatal("no error on bad exif data") - } - if !strings.Contains(err.Error(), "short read") { - t.Fatal("wrong error:", err.Error()) - } -} - -// Check for a 0-length tag value -func TestZeroLengthTagError(t *testing.T) { - name := filepath.Join(*dataDir, "corrupt/infinite_loop_exif.jpg") - f, err := os.Open(name) - if err != nil { - t.Fatalf("%v\n", err) - } - defer f.Close() - - _, err = Decode(f) - if err == nil { - t.Fatal("no error on bad exif data") - } - if !strings.Contains(err.Error(), "zero length tag value") { - t.Fatal("wrong error:", err.Error()) - } -} |