Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

golden/test fails on Scala 2.13.6 #103

Closed
SethTisue opened this issue Aug 29, 2021 · 14 comments
Closed

golden/test fails on Scala 2.13.6 #103

SethTisue opened this issue Aug 29, 2021 · 14 comments

Comments

@SethTisue
Copy link
Contributor

++2.13.6 followed by golden/test gives

==> X doodle.golden.Text.text-color  0.045s munit.ComparisonFailException: /Users/tisue/doodle/golden/src/test/scala/doodle/golden/Text.scala:40
39:
40:  testPicture("text-color") {
41:    text[Algebra, Drawing]("Red")
Heights differ
=> Obtained
34
=> Diff (- obtained, + expected)
-34
+33
    at munit.FunSuite.assertEquals(FunSuite.scala:11)
    at doodle.golden.GoldenPicture.assertGoldenPicture(GoldenPicture.scala:32)
    at doodle.golden.GoldenPicture.assertGoldenPicture$(GoldenPicture.scala:16)
    at doodle.golden.Text.assertGoldenPicture(Text.scala:11)
    at doodle.golden.GoldenPicture.$anonfun$testPicture$1(GoldenPicture.scala:59)

this came up in the Scala 2.13 community build

@noelwelsh
Copy link
Contributor

noelwelsh commented Aug 30, 2021 via email

@SethTisue
Copy link
Contributor Author

I am not sure if I have seen it fail on our Jenkins (which runs Ubuntu) or not.

But I know I'm able to reproduce it locally on macOS 11.5.2 on GraalVM 11:

~/doodle % java -version
openjdk version "11.0.12" 2021-07-20
OpenJDK Runtime Environment GraalVM CE 21.2.0 (build 11.0.12+6-jvmci-21.2-b08)
OpenJDK 64-Bit Server VM GraalVM CE 21.2.0 (build 11.0.12+6-jvmci-21.2-b08, mixed mode, sharing)

and also AdoptOpenJDK 8:

openjdk version "1.8.0_292"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.292-b10, mixed mode)

@noelwelsh
Copy link
Contributor

So far I've been treating the CI results (Github actions on Ubuntu) for the golden tests as definitive, and mostly ignoring what happens on my local machine beyond visual inspection of the generated images. I could make the image diffing more robust to differences in size. In general image diffing is a hard problem, and I'm not sure how much effort to invest in this.

@noelwelsh
Copy link
Contributor

I've added some code that might address this.

@SethTisue
Copy link
Contributor Author

it still fails for me. (after #104, which is needed for the tests to even compile.)

@noelwelsh
Copy link
Contributor

It does fail with a different error message, though, right? I can make the code print out the offending image and the diff, which might go some way to debugging this. I fear writing an acceptable image diff algorithm may become a project in its own right.

@noelwelsh noelwelsh reopened this Sep 2, 2021
@SethTisue
Copy link
Contributor Author

currently the error is:

==> X doodle.golden.Text.text-color  0.021s munit.FailException: /Users/tisue/doodle/golden/src/test/scala/doodle/golden/Text.scala:44 Height or width differ by more than one pixel
43:      .beside(text[Algebra, Drawing]("Blue").strokeColor(Color.blue))
44:  }
45:}
    at munit.FunSuite.assert(FunSuite.scala:11)
    at doodle.golden.Golden.imageDiff(Golden.scala:74)
    at doodle.golden.Golden.imageDiff$(Golden.scala:13)
    at doodle.golden.Text.imageDiff(Text.scala:11)
    at doodle.golden.GoldenPicture.assertGoldenPicture(GoldenPicture.scala:28)

I think you could reasonably mark the test as to be skipped except on Linux.

@noelwelsh
Copy link
Contributor

I've updated the error message so there should hopefully be much more useful output. If you can paste that in we'll be able to tell if its a spurious error or not, and take action accordingly.

@SethTisue
Copy link
Contributor Author

AdoptOpenJDK Java 1.8.0_292, macOS:

==> X doodle.golden.Text.text-color  0.039s munit.FailException: /Users/tisue/doodle/golden/src/test/scala/doodle/golden/Text.scala:44
43:      .beside(text[Algebra, Drawing]("Blue").strokeColor(Color.blue))
44:  }
45:}

 The dimensions (width x height) of the actual image are 67 by 34
 The dimensions (width x height) of the expected image are 71 by 33

 The actual image, PNG and Base 64 encoded is

 iVBORw0KGgoAAAANSUhEUgAAAFcAAAA2CAYAAACyYAWTAAACsklEQVR42u2YyytFURTGPUqepTwmZCIipZABhgaUGBhTklIM/AOUgTyKKO+BGJCJEgMMKEOPiBKFIlJEyZtSH6vVaTv3Xvd6ZHDc76vTPfusdfdq/+7e397nBoD6MwUQAeESLkW4hEu4FOESLuFShEu4hEsRLuESLkW4hEu4FOESLkW4hOuqjg5gaclnWlMTsLbmD3Cjot4rvJcIDASys4Gurp/3lZEBtLfbug0PBwoLgelpkxYXB4yO+gPcyEigrw84PdUpJZB3dn4NV7rt7QV2d4GyMiA2Fnh48Ee4g4N6v7mp021uzsS3toDcXJ2CRUXA5aU9lpOj07S8HEhMtMG1um1pAWJigNdXd7hpaXYnke5mZ32Xdg7c/n5gfR0oLVUK1hQTiVXU1gIrK0BmJtDZaWJZWUBxMbCxAXR3AyEhNrh1dUBjI5CQAIyMeLaF4GBgZsbEoqOB8XHfpZ0DV6xAZmx8PHB0ZGInJ/pcRr+6ClRVASUlGru40O993JlcbCElRT9TU+1pX4HrrbSz4DY3AwMDCmtx0cTGxnSEQsm6Cgo0Njmp+c/Pn8IVW3h6AurrFeLZ2dfheivtTM+VJZ6UBNzcaHt+Xkcoy95Vy8saOzw0z8RAPXju/r6mDg97hjs1pfdXV0BoqML1VtqZcI+PgYgIoLpa2/f3apiyHgXi46MZ7cuL5tbUAHt7QEOD0vgAt60NODgAKis1JCcHV7jJyerN29tAfr7mCVxvpZ11zh0aMu2eHh3hwoK2ZTeRNSkWIBtWXp7JbW0FgoL0qqgA0tPdzrkSkh1f3i8sibVbcOUUKKeBsDD9McQWJiZ8l/5fb2jn58DdnftzmWLX17/q+vZWvfm7pfnfAv9bIFyKcAmXIlzCJVyKcAmXcCnCJVzCpQiXcAmXIlzCJVyKcB2lN+t94EgHrIxbAAAAAElFTkSuQmCC


 The expected image, PNG and Base 64 encoded is

 iVBORw0KGgoAAAANSUhEUgAAAFsAAAA1CAYAAAAuyJezAAACPklEQVR42u2XzStEURjGBxtkgw0rGgssfSSixCgLZWVpYydLa5IoKyULrP0BytK/oJQaJIpEsUD5ZsFPb6fbuZjurQl1m+ep09z3vqc57/zOO889N4X0b0oJgWALtiTYgi0JtmALtiTYgi0JtmALtiTYgi0JtmBLgi3Ygi0JtmD/Q7Wpv5yeYNj2S4NRXQ1DQ3B09Kuww0tUVEB/PxwcFCrsQNfXMD0NXV2/DjvQ3R3Mz0NbW6HDNt3fQ1mZj9/fYW4O6uuhshLGxuDx0eff3mBiAqqqoKEBVlYiYZseHqC0NHc+F/jwvbhykgP75gampqCjw99bXIRMBk5O4PYWRkdhctLnZ2ZgYAAuLuD8HPr6ImHbXi4sQE9PfrDjykmOZ9uorYXTU59vaoLDQx9fXUFdnY+tm/f3fZzNRnp24Ns7O/nBjisnGZ398QHHx67lNjZ83iylpMSN4mIoKnKfgcwPXl58bNcRnf387Lqztzc/2HHlJMuzz86gpsb9302NjV87/buss8NHi729WM82jw0/FsJ527unJx9fXn7Nx5WTLNimkRFYW3PXS0vOkw2oUdjehuFhP9dOL4ODzrNt2NyYzravbGnJne/uhtlZtyHmy7ZUOB9XTvJgb21Ba6t//C8vO7MsL4f2dtjc9HNfX2F83J1G0mlYXY30bOtoA7q7m7sEs/zOTrdUczOsr/88jUSVo9d1va5Lgi3Ygi0JtmBLgi3Ygi0Egi3YkmALtiTYgi3YkmALtiTYgl3A+gTbCPZGMfcurwAAAABJRU5ErkJggg==

 

 To convert a base64 string to a viewable picture, use

 Base64[Png](string).toPicture[Algebra, Drawing]
     
    at munit.FunSuite.assert(FunSuite.scala:11)
    at doodle.golden.Golden.imageDiff(Golden.scala:127)
    at doodle.golden.Golden.imageDiff$(Golden.scala:13)
    at doodle.golden.Text.imageDiff(Text.scala:11)
    at doodle.golden.GoldenPicture.assertGoldenPicture(GoldenPicture.scala:28)
    at doodle.golden.GoldenPicture.assertGoldenPicture$(GoldenPicture.scala:11)
    at doodle.golden.Text.assertGoldenPicture(Text.scala:11)
    at doodle.golden.GoldenPicture.testPicture$$anonfun$1(GoldenPicture.scala:43)
[error] Failed: Total 13, Failed 1, Errors 0, Passed 12
[error] Failed tests:
[error] 	doodle.golden.Text

@noelwelsh
Copy link
Contributor

Thanks. It looks like a small difference in font rendering. I've attempted to make the test more robust to this difference. If this doesn't work I'll mark the test as Linux only.

@SethTisue
Copy link
Contributor Author

still failing

==> X doodle.golden.Text.text-color  0.039s munit.FailException: /Users/tisue/doodle/golden/src/test/scala/doodle/golden/Text.scala:45
44:      .font(Font.defaultSerif.size(24).family("Arial"))
45:  }
46:}

 The dimensions (width x height) of the actual image are 110 by 47
 The dimensions (width x height) of the expected image are 113 by 47

 The actual image, PNG and Base 64 encoded is

 iVBORw0KGgoAAAANSUhEUgAAAIIAAABDCAYAAABQt93sAAAFRUlEQVR42u2aaahOTxzHr31J9rJvJWSJN/Z9TbaiSF6RJJGllAgvEEUkXiB7IckSskXZ9yWFsm8hsiR7Wb58m8acc895znPvuc/zd+/5f781L+7Mb+acOfOZmd/vd58cSNIf5egTSAJBEgiSQJAEgiQQJIEgCQRJIEgCQRIIkkCQBIIkECSBIAkESSBIAkESCJJAkASCJBAkgSAJBClxIDx7BixenLosWQKsWgVs3w7cvfvfzfjIEfP8HTv+Vt26lfo1V64Ejh4Fnj9PPSTbabttm0AI6vjxP6Pn5L0MGwZ8+ZL9GY8ebZ7Xvfvfqg0b8vaKTZoAd+4Ehxw3zrS3by8QokFo3Rro399fevcGmjUDSpZ0dm3bAl+//lMQ6tUDmjY1pXFjoE4d/ytWrQpcuyYQ4oGwf39quwcPgM6dne2hQ/8UhJs3g12+fQNmzwaKFTM2Y8cKhMyDYP0Jazt1aqEDwapHD2NTsybw65dAyDwIP34A5coZ2z59gu2PHplt2KYNUKYMUL8+MGRI9Lh0QnnSVKwIVKkCDBoEHDxYIBDsgleqBPz8GQ3CihVAv37AtGnhYy1bZtqnT8/MdJMBwrFjznbChOCCcjFTeXC0925Pau3acNvixc0qxgDh0yegUSNjM3x4+qsh3SlheezSpeDTLfogvHoFbNninzmh8G6NsmVNfcOGwO7dwMuXwJUrJsqwfTZudH3OnwdKlzb17doBZ88Cjx+bUNWeOhEgcKhTp0w5edJEm6tXOwjI0blz2QEhznSLFgjVqgENGvhLhQpB3KdM8Y/Brcd6gvL0qb+N26JXL3dp29Cza1dTV7duMALZsyctCOlK7oghkyDEmW5y8giMzXiX79oVHMPCksqB9K7g5cvma9nThQmrMLVqVSAQWrQALlzIDgj5nW7RA2HyZGDzZmDTJuNFDRjg2jp0AJ48CfZ/8cLZMKAfPDhY+BWtDdN6DEXt30z3hYleWAQIZ84A7965cv++mcr8+e7GoavBGyiTIMSZbjJ8hKVLXTsTS+/f+9u5IvnJTC5cCBw44P6+ejX8vebOjR01HD7s7EaMyCwIcaabHGdx4kRnw2wjw0grrog3t0DPKarcvg3cuOH6nDgR/kzGazFB4M1Tvbq7IvICApOlYRo40A9CnOkmB4TPn00u19otWuRP5/EMZv2CBeH96TFxKz18CHz/bkAqX970WbMmvM/QobFBYO6gcmVjR580CgSGeayjSxImO20LQpzpJiuPcPGi+wKMne7dc23Nm5t6Jvw/fgz2ZZRhn7Fvn6nr1MltWW/Wh6IvYi/6GCCQLWs3Y0Y0CDNnmjo6gPQ1vOJuLlUq6CzGmW6yEko8C61tz57h4R4zjvSo7PZh/sECxKDbLjq9KNuHFzFtrTdGxzRN+Lh8ObB3rys7dwLr1pnQrkQJY8Ns3/Xr0SBs3erGHDkSePPGvCK55+vaNi8IcaabLBCIP3ML1n79etc2apQ/1OS28eYgeBXkzvDMmePaaduypduCBcwjcDFony585OLVqhWe1GSx082dWYwz3cINAtNy9u3pzaeT1+Pn/wa8ZyNTabVrB1elb9/wgJpe3axZ/i/IK2HMGGDevMDJw6g2Ks3Bo5pJykmT/DeX1fjxxrZjR389k0J8jN3JLDVqmFPHZsG7dQuOl9/pFm4QsqHXrw1gly4Bb9+mtydM/HJMM2f7dw4R+vABOH06/z/Eyu90/z8gSAJBEgiSQJAEgiQQJIEgCQRJIEgCQRIIkkCQBIIkECSBIAkESSBIAkESCJJAkASCJBAkgSAlRL8B4nyc/ZY6dt8AAAAASUVORK5CYII=


 The expected image, PNG and Base 64 encoded is

 iVBORw0KGgoAAAANSUhEUgAAAIUAAABDCAYAAACya8aVAAAEeUlEQVR42u2ZS0hUURjH7V2aWlFZkGToRsGIICl6EEQECQVCFEGbKNwo0iIQIyqICDe6DCLQKFoU1CZCEaWiRUQUPegNQQ9qUVqalYX/+vN1mel6JmeOMzFX/j+4IPd853rPnN95fTcHQoTI0U8gJIWQFEJSCEkhJIWQFEJSCEkhJIWQFEJSCEkhJIWQFEJSCCEphKQQkkJICiEphKQQkkJICiEphKT4/fScxNekScCsWcDy5cDhw8DAwH9s9Z93SOGV+brz5gFr1wKtrcDQUMqPlhSjShG+KiuBz5+zVorwtXo18O2bpEjrj4+fP4E3b4BTp4A5cyyuqSlrpAjDmeHdO+DCBWDRIos5ckRSpFeKeC5ftrjS0qyVIp6ensSvKynSJUV/v8VNm+Yuf/kS2LsXKC4Gpk4FFiwAdu4EHj5M/Mxnz6xOSQkwfTpQXg6cOJEWKQYHLWbGjOTrj/bcf5X7ND/6UnBOZhw7MMy1a0BBgXthZ2dzlgnT1QXk57vrtLSMWYobNyxm2bLMS+HT/OhK8eUL8OgR0NwM5OVZ3IEDf8d8+AAUFVlZbS3w4IHNKlevArt2ARMnAoWFwNu3sTq9vXZMYJ3t24HHj4Hv34E7d4CNGy3eQ4ofP4D374Hz523EMqa9PbNS+DR/fJ0+1q8Hvn79u/6xY1a2b5/7+Q0NI2U6ftzubd7s7tlVq8Z8+mBnHDqU2jjwkcKn+dGXIjcXWLcOOHnSOiwMz32Me/HC/fz79618xYrYPSYSeI9LiItLl8YsxYQJwJYtNgllUgqf5kdv+RgetnNddbXdr6gAXr9OXH/27OR6iUmwgPnz7R6XERf8/57LB6dzTt3c5DFm7lzg6dPMSeHT/OjuKT59ApYssbKqqsTpQaYRk53PA6ZMsXvMg7hg745xo0n2749tWzIlhU/zo73R5LaarWF5Y6M7Jth2p7KTCnZmHNYu+vrSIgU3nYzjv0tFCk6WYZjIddXzaX70j6R1dTHVb94cWc7vIiy/eDH5/8k9CuskOqt1d6dFio8fLW7mzOTqB6Pe9Ynn7l13PZ/mR18KLiMLF1rMypUjhxHT3sF3EdcSc/q0ldfUxO4FeQhuOF1LCE8laZCCH8WCbyDJ1Of+g/fpZJj6enc9n+aPj+TVmTOxOP4dDzehQV5hwwabTXhs5S+7Z48NP+4huA0P4FBcvNjqbNpkw5B5CuZEtm2L9Y6HFOwYngSOHrXMIuPOnk2u/tatdr+sDLh+3Zrx/LkJwcyoq55P88dPRjOY8vmliUmteLgMxP9q4cuVQbp1K5bACp8lz51Ly1dSXuyYZJvMV2IG0vVKbW2J6/k0f3xIce8eMHmyxR48OLL8yRNg925LJXJocPgwO9nZmfiZr17ZMOQph72xdKml00d5r3/lJphW4UjfsQO4ciX1Jt++bfkNHjWZxF2zBujoGL2eT/OzVwoRSSSFkBRCUghJISSFkBRCUghJISSFkBRCUghJISSFkBRCUghJIYSkEJJCSAohKYSkEJJCSAqRFfwCH5CFrQnIlQQAAAAASUVORK5CYII=

 

 To convert a base64 string to a viewable picture, use

 Base64[Png](string).toPicture[Algebra, Drawing]
     
    at munit.FunSuite.assert(FunSuite.scala:11)
    at doodle.golden.Golden.imageDiff(Golden.scala:127)
    at doodle.golden.Golden.imageDiff$(Golden.scala:13)
    at doodle.golden.Text.imageDiff(Text.scala:11)
    at doodle.golden.GoldenPicture.assertGoldenPicture(GoldenPicture.scala:28)
    at doodle.golden.GoldenPicture.assertGoldenPicture$(GoldenPicture.scala:11)
    at doodle.golden.Text.assertGoldenPicture(Text.scala:11)
    at doodle.golden.GoldenPicture.testPicture

@noelwelsh
Copy link
Contributor

Ok. I've made my final attempt. Let me know if it works...

@SethTisue
Copy link
Contributor Author

[info] Passed: Total 13, Failed 0, Errors 0, Passed 13

🥇

@noelwelsh
Copy link
Contributor

😹

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants