From fb25ff350ef555f538f93ea14a24e58d86f4236a Mon Sep 17 00:00:00 2001 From: Giorgio Garofalo Date: Wed, 28 Aug 2024 12:03:31 +0200 Subject: [PATCH] Add media inequality test on same file name --- .../kotlin/eu/iamgio/quarkdown/MediaTest.kt | 24 +++++++++++++++--- core/src/test/resources/media/path1/logo.png | Bin 0 -> 7234 bytes core/src/test/resources/media/path2/logo.png | Bin 0 -> 7234 bytes 3 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 core/src/test/resources/media/path1/logo.png create mode 100644 core/src/test/resources/media/path2/logo.png diff --git a/core/src/test/kotlin/eu/iamgio/quarkdown/MediaTest.kt b/core/src/test/kotlin/eu/iamgio/quarkdown/MediaTest.kt index 5a8c9912..89923659 100644 --- a/core/src/test/kotlin/eu/iamgio/quarkdown/MediaTest.kt +++ b/core/src/test/kotlin/eu/iamgio/quarkdown/MediaTest.kt @@ -27,6 +27,7 @@ import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFails import kotlin.test.assertIs +import kotlin.test.assertNotEquals import kotlin.test.assertNull import kotlin.test.assertTrue @@ -116,6 +117,15 @@ class MediaTest { assertTrue(resolved.name.startsWith("banner@")) assertTrue(resolved.name.endsWith(".png")) } + + localAndRemoteStorage.register("media/path1/logo.png", workingDirectory = File("src/test/resources")) + localAndRemoteStorage.register("media/path2/logo.png", workingDirectory = File("src/test/resources")) + + assertEquals(5, localAndRemoteStorage.all.size) + assertNotEquals( + localAndRemoteStorage.resolve("media/path1/logo.png")!!.name, + localAndRemoteStorage.resolve("media/path2/logo.png")!!.name, + ) } @Test @@ -207,7 +217,10 @@ class MediaTest { height = null, ) - assertEquals("\"\"", remoteImage.accept(renderer)) + assertEquals( + "\"\"", + remoteImage.accept(renderer), + ) context.mediaStorage.register("media/icon.png", workingDirectory = File("src/test/resources")) @@ -228,7 +241,10 @@ class MediaTest { localOnlyContext.options.enableLocalMediaStorage = true localOnlyContext.options.enableRemoteMediaStorage = false - localOnlyContext.mediaStorage.register("https://iamgio.eu/quarkdown/img/logo-light.svg", workingDirectory = null) + localOnlyContext.mediaStorage.register( + "https://iamgio.eu/quarkdown/img/logo-light.svg", + workingDirectory = null, + ) val localOnlyRenderer = QuarkdownHtmlNodeRenderer(localOnlyContext) @@ -278,7 +294,9 @@ class MediaTest { resource.resources.first { it.name == "https-iamgio.eu-quarkdown-img-tbanner-light.png" }.let { banner -> assertIs(banner) - assertTrue(URL("https://iamgio.eu/quarkdown/img/tbanner-light.png").readBytes().contentEquals(banner.content)) + assertTrue( + URL("https://iamgio.eu/quarkdown/img/tbanner-light.png").readBytes().contentEquals(banner.content), + ) } } } diff --git a/core/src/test/resources/media/path1/logo.png b/core/src/test/resources/media/path1/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cbf8473358ffb1ea7874520fb8573b5a39c473c0 GIT binary patch literal 7234 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