Selaa lähdekoodia

Introduced matrix save-load test (#1552)

Victor Sokolov 2 päivää sitten
vanhempi
commit
28f55c5b13
100 muutettua tiedostoa jossa 140 lisäystä ja 118 poistoa
  1. 0 111
      integration/load_test.go
  2. 128 0
      integration/matrix_test.go
  3. 12 7
      integration/suite.go
  4. BIN
      testdata/test-hashes/TestIntegration/TestLoadSaveToPng/svg.hash
  5. 0 0
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/1-bpp.bmp.hash
  6. 0 0
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/16-bpp.bmp.hash
  7. 0 0
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/24-bpp-no-alpha-mask.bmp.hash
  8. 0 0
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/24-bpp.bmp.hash
  9. 0 0
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/32-bpp-with-alpha-self-gen.bmp.hash
  10. 0 0
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/32-bpp-with-alpha.bmp.hash
  11. 0 0
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/4-bpp.bmp.hash
  12. 0 0
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/8-bpp-rle-move-to-x.bmp.hash
  13. 0 0
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/8-bpp-rle-single-color.bmp.hash
  14. 0 0
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/8-bpp-rle-small.bmp.hash
  15. 0 0
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/8-bpp-rle.bmp.hash
  16. 0 0
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/8-bpp.bmp.hash
  17. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/1-bpp.bmp.hash
  18. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/16-bpp.bmp.hash
  19. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/24-bpp-no-alpha-mask.bmp.hash
  20. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/24-bpp.bmp.hash
  21. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/32-bpp-with-alpha-self-gen.bmp.hash
  22. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/32-bpp-with-alpha.bmp.hash
  23. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/4-bpp.bmp.hash
  24. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/8-bpp-rle-move-to-x.bmp.hash
  25. 0 0
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/8-bpp-rle-single-color.bmp.hash
  26. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/8-bpp-rle-small.bmp.hash
  27. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/8-bpp-rle.bmp.hash
  28. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/8-bpp.bmp.hash
  29. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/1-bpp.bmp.hash
  30. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/16-bpp.bmp.hash
  31. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/24-bpp-no-alpha-mask.bmp.hash
  32. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/24-bpp.bmp.hash
  33. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/32-bpp-with-alpha-self-gen.bmp.hash
  34. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/32-bpp-with-alpha.bmp.hash
  35. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/4-bpp.bmp.hash
  36. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/8-bpp-rle-move-to-x.bmp.hash
  37. 0 0
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/8-bpp-rle-single-color.bmp.hash
  38. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/8-bpp-rle-small.bmp.hash
  39. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/8-bpp-rle.bmp.hash
  40. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/8-bpp.bmp.hash
  41. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/1-bpp.bmp.hash
  42. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/16-bpp.bmp.hash
  43. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/24-bpp-no-alpha-mask.bmp.hash
  44. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/24-bpp.bmp.hash
  45. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/32-bpp-with-alpha-self-gen.bmp.hash
  46. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/32-bpp-with-alpha.bmp.hash
  47. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/4-bpp.bmp.hash
  48. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/8-bpp-rle-move-to-x.bmp.hash
  49. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/8-bpp-rle-single-color.bmp.hash
  50. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/8-bpp-rle-small.bmp.hash
  51. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/8-bpp-rle.bmp.hash
  52. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/8-bpp.bmp.hash
  53. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/1-bpp.bmp.hash
  54. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/16-bpp.bmp.hash
  55. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/24-bpp-no-alpha-mask.bmp.hash
  56. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/24-bpp.bmp.hash
  57. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/32-bpp-with-alpha-self-gen.bmp.hash
  58. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/32-bpp-with-alpha.bmp.hash
  59. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/4-bpp.bmp.hash
  60. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/8-bpp-rle-move-to-x.bmp.hash
  61. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/8-bpp-rle-single-color.bmp.hash
  62. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/8-bpp-rle-small.bmp.hash
  63. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/8-bpp-rle.bmp.hash
  64. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/8-bpp.bmp.hash
  65. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/1-bpp.bmp.hash
  66. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/16-bpp.bmp.hash
  67. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/24-bpp-no-alpha-mask.bmp.hash
  68. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/24-bpp.bmp.hash
  69. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/32-bpp-with-alpha-self-gen.bmp.hash
  70. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/32-bpp-with-alpha.bmp.hash
  71. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/4-bpp.bmp.hash
  72. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/8-bpp-rle-move-to-x.bmp.hash
  73. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/8-bpp-rle-single-color.bmp.hash
  74. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/8-bpp-rle-small.bmp.hash
  75. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/8-bpp-rle.bmp.hash
  76. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/8-bpp.bmp.hash
  77. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/1-bpp.bmp.hash
  78. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/16-bpp.bmp.hash
  79. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/24-bpp-no-alpha-mask.bmp.hash
  80. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/24-bpp.bmp.hash
  81. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/32-bpp-with-alpha-self-gen.bmp.hash
  82. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/32-bpp-with-alpha.bmp.hash
  83. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/4-bpp.bmp.hash
  84. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/8-bpp-rle-move-to-x.bmp.hash
  85. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/8-bpp-rle-single-color.bmp.hash
  86. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/8-bpp-rle-small.bmp.hash
  87. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/8-bpp-rle.bmp.hash
  88. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/8-bpp.bmp.hash
  89. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/1-bpp.bmp.hash
  90. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/16-bpp.bmp.hash
  91. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/24-bpp-no-alpha-mask.bmp.hash
  92. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/24-bpp.bmp.hash
  93. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/32-bpp-with-alpha-self-gen.bmp.hash
  94. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/32-bpp-with-alpha.bmp.hash
  95. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/4-bpp.bmp.hash
  96. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/8-bpp-rle-move-to-x.bmp.hash
  97. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/8-bpp-rle-single-color.bmp.hash
  98. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/8-bpp-rle-small.bmp.hash
  99. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/8-bpp-rle.bmp.hash
  100. BIN
      testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/8-bpp.bmp.hash

+ 0 - 111
integration/load_test.go

@@ -1,111 +0,0 @@
-package integration
-
-import (
-	"fmt"
-	"net/http"
-	"os"
-	"path"
-	"path/filepath"
-	"testing"
-
-	"github.com/imgproxy/imgproxy/v3/imagetype"
-	"github.com/imgproxy/imgproxy/v3/testutil"
-	"github.com/imgproxy/imgproxy/v3/vips"
-	"github.com/stretchr/testify/suite"
-)
-
-const (
-	maxDistance = 0 // maximum image distance
-)
-
-type LoadTestSuite struct {
-	Suite
-
-	matcher           *testutil.ImageHashMatcher
-	testImagesPath    string
-	saveTmpImagesPath string
-}
-
-func (s *LoadTestSuite) SetupTest() {
-	s.testImagesPath = s.TestData.Path("test-images")
-	s.saveTmpImagesPath = os.Getenv("TEST_SAVE_TMP_IMAGES")
-	s.matcher = testutil.NewImageHashMatcher(s.TestData)
-
-	s.Config().Security.DefaultOptions.MaxAnimationFrames = 999
-	s.Config().Server.DevelopmentErrorsMode = true
-	s.Config().Fetcher.Transport.Local.Root = s.testImagesPath
-}
-
-// testLoadFolder fetches images iterates over images in the specified folder,
-// runs imgproxy on each image, and compares the result with the reference image
-// which is expected to be in the `integration` folder with the same name
-// but with `.png` extension.
-func (s *LoadTestSuite) testLoadFolder(folder string) {
-	walkPath := path.Join(s.testImagesPath, folder)
-
-	// Iterate over the files in the source folder
-	err := filepath.Walk(walkPath, func(path string, info os.FileInfo, err error) error {
-		s.Require().NoError(err)
-
-		// Skip directories
-		if info.IsDir() {
-			return nil
-		}
-
-		// get the base name of the file (8-bpp.png)
-		baseName := filepath.Base(path)
-
-		// Construct the source URL for imgproxy (no processing)
-		sourceUrl := fmt.Sprintf("/insecure/plain/local:///%s/%s@bmp", folder, baseName)
-
-		// Read source image from imgproxy
-		resp := s.GET(sourceUrl)
-		defer resp.Body.Close()
-
-		s.Require().Equal(http.StatusOK, resp.StatusCode, "expected status code 200 OK, got %d, path: %s", resp.StatusCode, path)
-
-		// Match image to precalculated hash
-		s.matcher.ImageMatches(s.T(), resp.Body, baseName, maxDistance)
-
-		return nil
-	})
-
-	s.Require().NoError(err)
-}
-
-// TestLoadSaveToPng ensures that our load pipeline works,
-// including standard and custom loaders. For each source image
-// in the folder, it does the passthrough request through imgproxy:
-// no processing, just convert format of the source file to png.
-// Then, it compares the result with the reference image.
-func (s *LoadTestSuite) TestLoadSaveToPng() {
-	testCases := []struct {
-		name       string
-		imageType  imagetype.Type
-		folderName string
-	}{
-		{"GIF", imagetype.GIF, "gif"},
-		{"JPEG", imagetype.JPEG, "jpg"},
-		{"HEIC", imagetype.HEIC, "heif"},
-		{"JXL", imagetype.JXL, "jxl"},
-		{"SVG", imagetype.SVG, "svg"},
-		{"TIFF", imagetype.TIFF, "tiff"},
-		{"WEBP", imagetype.WEBP, "webp"},
-		{"BMP", imagetype.BMP, "bmp"},
-		{"ICO", imagetype.ICO, "ico"},
-	}
-
-	for _, tc := range testCases {
-		s.T().Run(tc.name, func(t *testing.T) {
-			if vips.SupportsLoad(tc.imageType) {
-				s.testLoadFolder(tc.folderName)
-			} else {
-				t.Skipf("%s format not supported by VIPS", tc.name)
-			}
-		})
-	}
-}
-
-func TestIntegration(t *testing.T) {
-	suite.Run(t, new(LoadTestSuite))
-}

+ 128 - 0
integration/matrix_test.go

@@ -0,0 +1,128 @@
+package integration
+
+import (
+	"fmt"
+	"net/http"
+	"os"
+	"path"
+	"path/filepath"
+	"testing"
+
+	"github.com/imgproxy/imgproxy/v3/imagetype"
+	"github.com/imgproxy/imgproxy/v3/testutil"
+	"github.com/imgproxy/imgproxy/v3/vips"
+	"github.com/stretchr/testify/suite"
+)
+
+const (
+	// maximum Hamming distance between the source and destination hash
+	// NOTE: 2 here is because HEIC works a bit differently over the platforms, investigate
+	maxDistance = 2
+)
+
+// formats to test
+var formats = []imagetype.Type{
+	imagetype.GIF,
+	imagetype.JPEG,
+	imagetype.HEIC,
+	imagetype.JXL,
+	imagetype.SVG,
+	imagetype.TIFF,
+	imagetype.WEBP,
+	imagetype.BMP,
+	imagetype.ICO,
+}
+
+type MatrixTestSuite struct {
+	Suite
+
+	matcher        *testutil.ImageHashMatcher
+	testImagesPath string
+}
+
+func (s *MatrixTestSuite) SetupTest() {
+	s.testImagesPath = s.TestData.Path("test-images")
+	s.matcher = testutil.NewImageHashMatcher(s.TestData)
+
+	s.Config().Security.DefaultOptions.MaxAnimationFrames = 999
+	s.Config().Server.DevelopmentErrorsMode = true
+	s.Config().Fetcher.Transport.Local.Root = s.testImagesPath
+}
+
+// testLoadFolder fetches images iterates over images in the specified folder,
+// runs imgproxy on each image, and compares the result with the reference image
+// which is expected to be in the `integration` folder with the same name
+// but with `.png` extension.
+func (s *MatrixTestSuite) testFormat(source, target imagetype.Type) {
+	folder := source.String()
+
+	// TODO: rename the folders in test-images repo
+	if folder == "heic" {
+		folder = "heif"
+	}
+
+	if folder == "jpeg" {
+		folder = "jpg"
+	}
+
+	walkPath := path.Join(s.testImagesPath, folder)
+
+	// Iterate over the files in the source folder
+	err := filepath.Walk(walkPath, func(path string, info os.FileInfo, err error) error {
+		s.Require().NoError(err)
+
+		// Skip directories
+		if info.IsDir() {
+			return nil
+		}
+
+		// get the base name of the file (8-bpp.png)
+		baseName := filepath.Base(path)
+
+		// Construct the source URL for imgproxy (no processing)
+		sourceUrl := fmt.Sprintf("/insecure/plain/local:///%s/%s@%s", folder, baseName, target.String())
+
+		// Read source image from imgproxy
+		resp := s.GET(sourceUrl)
+		defer resp.Body.Close()
+
+		s.Require().Equal(http.StatusOK, resp.StatusCode, "expected status code 200 OK, got %d, url: %s", resp.StatusCode, sourceUrl)
+
+		// Match image to precalculated hash
+		s.matcher.ImageMatches(s.T(), resp.Body, baseName, maxDistance)
+
+		return nil
+	})
+
+	s.Require().NoError(err)
+}
+
+func (s *MatrixTestSuite) TestMatrix() {
+	for _, source := range formats {
+		for _, target := range formats {
+			s.Run(fmt.Sprintf("%s/%s", source.String(), target.String()), func() {
+				if !target.IsVector() && source.IsVector() {
+					// we can not vectorize a raster image
+					s.T().Logf("Skipping %s -> %s conversion: we can not vectorize raster image", source.String(), target.String())
+					return
+				}
+
+				if !vips.SupportsLoad(source) {
+					s.T().Logf("Skipping %s -> %s conversion: source format not supported by VIPS", source.String(), target.String())
+					return
+				}
+
+				if !vips.SupportsSave(target) {
+					s.T().Logf("Skipping %s -> %s conversion: target format not supported by VIPS", source.String(), target.String())
+					return
+				}
+
+				s.testFormat(source, target)
+			})
+		}
+	}
+}
+
+func TestMatrix(t *testing.T) {
+	suite.Run(t, new(MatrixTestSuite))
+}

+ 12 - 7
integration/suite.go

@@ -44,26 +44,31 @@ func (s *Suite) SetupSuite() {
 	s.TestData = testutil.NewTestDataProvider(s.T)
 
 	s.Config, _ = testutil.NewLazySuiteObj(s, func() (*imgproxy.Config, error) {
-		// TODO: replace with NewDefaultConfig when we get rid of global config
-		c, err := imgproxy.LoadConfigFromEnv(nil)
-		s.Require().NoError(err)
+		c := imgproxy.NewDefaultConfig()
 
 		c.Server.Bind = ":0"
 
 		c.Fetcher.Transport.Local.Root = s.TestData.Root()
 		c.Fetcher.Transport.HTTP.ClientKeepAliveTimeout = 0
 
-		return c, nil
+		return &c, nil
 	})
 
 	s.Imgproxy, _ = testutil.NewLazySuiteObj(s, func() (*imgproxy.Imgproxy, error) {
 		return imgproxy.New(s.T().Context(), s.Config())
 	})
 
+	// NOTE: if we used s.T().Context() in startServer, server would have been stopped
+	// after the first subtest because s.T().Context() is cancelled after subtest.
+	//
+	// If resetLazyObjs is not called in SetupSubTest, the server would shutdown
+	// and won't restart in the second subtest because lazy obj would not be nil.
+	ctx := s.T().Context()
+
 	s.Server, _ = testutil.NewLazySuiteObj(
 		s,
 		func() (*TestServer, error) {
-			return s.startServer(s.Imgproxy()), nil
+			return s.startServer(ctx, s.Imgproxy()), nil
 		},
 		func(s *TestServer) error {
 			s.Shutdown()
@@ -78,8 +83,8 @@ func (s *Suite) TearDownSuite() {
 
 // startServer starts imgproxy instance's server for the tests.
 // Returns [TestServer] that contains the server address and shutdown function
-func (s *Suite) startServer(i *imgproxy.Imgproxy) *TestServer {
-	ctx, cancel := context.WithCancel(s.T().Context())
+func (s *Suite) startServer(ctx context.Context, i *imgproxy.Imgproxy) *TestServer {
+	ctx, cancel := context.WithCancel(ctx)
 
 	addrCh := make(chan net.Addr)
 

BIN
testdata/test-hashes/TestIntegration/TestLoadSaveToPng/svg.hash


+ 0 - 0
testdata/test-hashes/TestIntegration/TestLoadSaveToPng/1-bpp.hash → testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/1-bpp.bmp.hash


+ 0 - 0
testdata/test-hashes/TestIntegration/TestLoadSaveToPng/16-bpp.hash → testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/16-bpp.bmp.hash


+ 0 - 0
testdata/test-hashes/TestIntegration/TestLoadSaveToPng/24-bpp-no-alpha-mask.hash → testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/24-bpp-no-alpha-mask.bmp.hash


+ 0 - 0
testdata/test-hashes/TestIntegration/TestLoadSaveToPng/24-bpp.hash → testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/24-bpp.bmp.hash


+ 0 - 0
testdata/test-hashes/TestIntegration/TestLoadSaveToPng/32-bpp-with-alpha-self-gen.hash → testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/32-bpp-with-alpha-self-gen.bmp.hash


+ 0 - 0
testdata/test-hashes/TestIntegration/TestLoadSaveToPng/32-bpp-with-alpha.hash → testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/32-bpp-with-alpha.bmp.hash


+ 0 - 0
testdata/test-hashes/TestIntegration/TestLoadSaveToPng/4-bpp.hash → testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/4-bpp.bmp.hash


+ 0 - 0
testdata/test-hashes/TestIntegration/TestLoadSaveToPng/8-bpp-rle-move-to-x.hash → testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/8-bpp-rle-move-to-x.bmp.hash


+ 0 - 0
testdata/test-hashes/TestIntegration/TestLoadSaveToPng/8-bpp-rle-single-color.hash → testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/8-bpp-rle-single-color.bmp.hash


+ 0 - 0
testdata/test-hashes/TestIntegration/TestLoadSaveToPng/8-bpp-rle-small.hash → testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/8-bpp-rle-small.bmp.hash


+ 0 - 0
testdata/test-hashes/TestIntegration/TestLoadSaveToPng/8-bpp-rle.hash → testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/8-bpp-rle.bmp.hash


+ 0 - 0
testdata/test-hashes/TestIntegration/TestLoadSaveToPng/8-bpp.hash → testdata/test-hashes/TestMatrix/TestMatrix/bmp/bmp/8-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/1-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/16-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/24-bpp-no-alpha-mask.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/24-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/32-bpp-with-alpha-self-gen.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/32-bpp-with-alpha.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/4-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/8-bpp-rle-move-to-x.bmp.hash


+ 0 - 0
testdata/test-hashes/TestIntegration/TestLoadSaveToPng/multi-bmp.hash → testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/8-bpp-rle-single-color.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/8-bpp-rle-small.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/8-bpp-rle.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/gif/8-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/1-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/16-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/24-bpp-no-alpha-mask.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/24-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/32-bpp-with-alpha-self-gen.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/32-bpp-with-alpha.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/4-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/8-bpp-rle-move-to-x.bmp.hash


+ 0 - 0
testdata/test-hashes/TestIntegration/TestLoadSaveToPng/multi-png.hash → testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/8-bpp-rle-single-color.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/8-bpp-rle-small.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/8-bpp-rle.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/heic/8-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/1-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/16-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/24-bpp-no-alpha-mask.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/24-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/32-bpp-with-alpha-self-gen.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/32-bpp-with-alpha.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/4-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/8-bpp-rle-move-to-x.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/8-bpp-rle-single-color.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/8-bpp-rle-small.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/8-bpp-rle.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/ico/8-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/1-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/16-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/24-bpp-no-alpha-mask.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/24-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/32-bpp-with-alpha-self-gen.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/32-bpp-with-alpha.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/4-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/8-bpp-rle-move-to-x.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/8-bpp-rle-single-color.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/8-bpp-rle-small.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/8-bpp-rle.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jpeg/8-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/1-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/16-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/24-bpp-no-alpha-mask.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/24-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/32-bpp-with-alpha-self-gen.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/32-bpp-with-alpha.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/4-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/8-bpp-rle-move-to-x.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/8-bpp-rle-single-color.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/8-bpp-rle-small.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/8-bpp-rle.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/jxl/8-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/1-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/16-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/24-bpp-no-alpha-mask.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/24-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/32-bpp-with-alpha-self-gen.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/32-bpp-with-alpha.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/4-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/8-bpp-rle-move-to-x.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/8-bpp-rle-single-color.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/8-bpp-rle-small.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/8-bpp-rle.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/tiff/8-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/1-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/16-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/24-bpp-no-alpha-mask.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/24-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/32-bpp-with-alpha-self-gen.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/32-bpp-with-alpha.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/4-bpp.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/8-bpp-rle-move-to-x.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/8-bpp-rle-single-color.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/8-bpp-rle-small.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/8-bpp-rle.bmp.hash


BIN
testdata/test-hashes/TestMatrix/TestMatrix/bmp/webp/8-bpp.bmp.hash


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä