1 {-# LANGUAGE OverloadedLists #-}
3 module Worksheets.Writing.RosettaSpec where
5 import Data.GenValidity.Map ()
6 import Data.GenValidity.Sequence ()
7 import Data.GenValidity.Set ()
8 import Data.GenValidity.Text ()
9 import Data.List qualified as List
10 import Data.Text qualified as Text
11 import Data.Validity.Map ()
12 import Data.Validity.Set ()
13 import Data.Validity.Text ()
14 import System.FilePath (joinPath, pathSeparator, (<.>), (</>))
17 import Language.Chinese qualified as Chinese
19 import Worksheets.Writing.Rosetta
21 runRosetta :: String -> Rosetta -> TestDefM (Chinese.ChineseDict : outers) () ()
22 runRosetta title rose = do
23 descrPath <- getTestDescriptionPath
25 List.reverse descrPath
29 (Text.singleton pathSeparator)
31 let outPath = "tests" </> dirPath </> title </> "rosetta" <.> "html"
32 itWithOuter title \dict -> do
33 goldenByteStringBuilderFile outPath
34 $ rosettaHTML dict (Text.pack title) rose
36 spec :: HasCallStack => Spec
37 spec = aroundAll readDict do
38 -- runRosetta "Avion" avion
39 -- runRosetta "Bateau" bateau
40 -- runRosetta "Chocolat" chocolat
41 -- runRosetta "Pistache" pistache
42 -- runRosetta "Egg" egg
43 -- runRosetta "Pluie" pluie
44 -- runRosetta "TarteAuxPommes" tarteAuxPommesDanniversaire
45 -- runRosetta "ChatChevalVélo" chatChevalVélo
46 -- runRosetta "chevauxDormirDebout" chevauxDormirDebout
47 runRosetta "ponies" ponies
48 runRosetta "poniesRaces1" poniesRaces1
49 runRosetta "poniesRaces2" poniesRaces2
50 runRosetta "Culicoides" culicoides
51 runRosetta "Fraise" fraise
52 runRosetta "poupéeArielle" poupéeArielle
53 runRosetta "poupéeBella" poupéeBella
55 readDict :: (Chinese.ChineseDict -> IO ()) -> IO ()
56 readDict = (Chinese.readChineseDict >>=)
58 français v = v{rosettaPartLangue = LangueFrançais}
59 anglais v = v{rosettaPartLangue = LangueAnglais}
60 mandarin v = v{rosettaPartLangue = LangueMandarin}
67 { rosettaPartPicture = "Plantes/Cacao/Fruit-cacao-tree-source-cocoa-chocolate-plant.avif"
68 , rosettaPartDescription = ""
69 , rosettaPartLangue = LangueFrançais
70 , rosettaPartText = "Le chocolat contient du cacao"
73 { rosettaPartPicture = "Plantes/Cacao/42f651_95f537d693fb48068880a02efa662822~mv2.avif"
74 , rosettaPartDescription = ""
75 , rosettaPartLangue = LangueAnglais
76 , rosettaPartText = "Chocolate contains cocoa"
79 { rosettaPartPicture = "Plantes/Cacao/Chocolate-Ingredients_520x500_c496776e-df9b-4348-a662-5ff65279f5ca.avif"
80 , rosettaPartDescription = ""
81 , rosettaPartLangue = LangueMandarin
82 , rosettaPartText = "巧克力 含有 可可"
90 { rosettaPartPicture = "Plantes/Pistache/581614a479ee6b4df250c4caddc04bca.avif"
91 , rosettaPartDescription = ""
92 , rosettaPartLangue = LangueFrançais
93 , rosettaPartText = "La glace à la pistache est délicieuse"
96 { rosettaPartPicture = "Plantes/Pistache/pistachios.avif"
97 , rosettaPartDescription = ""
98 , rosettaPartLangue = LangueAnglais
99 , rosettaPartText = "Pistachio ice cream is delicious"
102 { rosettaPartPicture = "Plantes/Pistache/No-Churn-Vegan-Pistachio-Ice-Cream-3-e1502503524224.avif"
103 , rosettaPartDescription = ""
104 , rosettaPartLangue = LangueMandarin
105 , rosettaPartText = "开心果 冰淇淋 很 好吃"
113 { rosettaPartPicture = "Bateau/pirate-boat.avif"
114 , rosettaPartDescription = ""
115 , rosettaPartLangue = LangueFrançais
116 , rosettaPartText = "Bateau sur l'eau"
119 { rosettaPartPicture = "Bateau/tanker.avif"
120 , rosettaPartDescription = ""
121 , rosettaPartLangue = LangueAnglais
122 , rosettaPartText = "Boat on the water"
125 { rosettaPartPicture = "Bateau/catamaran.avif"
126 , rosettaPartDescription = ""
127 , rosettaPartLangue = LangueMandarin
128 , rosettaPartText = "水上 的 船"
136 { rosettaPartPicture = "Avion/sound-barrier.avif"
137 , rosettaPartDescription = ""
138 , rosettaPartLangue = LangueFrançais
139 , rosettaPartText = "Avion dans le ciel"
142 { rosettaPartPicture = "Avion/mustang.avif"
143 , rosettaPartDescription = ""
144 , rosettaPartLangue = LangueAnglais
145 , rosettaPartText = "Airoplane in the sky"
148 { rosettaPartPicture = "Avion/cockpit.avif"
149 , rosettaPartDescription = ""
150 , rosettaPartLangue = LangueMandarin
151 , rosettaPartText = "天空 中 有 一 架 飞机"
159 { rosettaPartPicture = "Egg/R.avif"
160 , rosettaPartDescription = ""
161 , rosettaPartLangue = LangueFrançais
162 , rosettaPartText = "Les poules pondent des œufs"
165 { rosettaPartPicture = "Egg/everything-you-ever-wanted-to-know-about-chicken-eggs.avif"
166 , rosettaPartDescription = ""
167 , rosettaPartLangue = LangueAnglais
168 , rosettaPartText = "Hens lay eggs"
171 { rosettaPartPicture = "Egg/OIP.avif"
172 , rosettaPartDescription = ""
173 , rosettaPartLangue = LangueMandarin
174 , rosettaPartText = "母鸡 下蛋"
182 { rosettaPartPicture = "Pluie/R.avif"
183 , rosettaPartDescription = ""
184 , rosettaPartLangue = LangueFrançais
185 , rosettaPartText = "L'eau de pluie retourne à l'océan"
188 { rosettaPartPicture = "Pluie/OIP2.avif"
189 , rosettaPartDescription = ""
190 , rosettaPartLangue = LangueAnglais
191 , rosettaPartText = "Rainwater returns to the ocean"
194 { rosettaPartPicture = "Pluie/c1b4767475208de5a389045b7ad856a0.avif"
195 , rosettaPartDescription = ""
196 , rosettaPartLangue = LangueMandarin
197 , rosettaPartText = "雨水 回归 海洋"
201 tarteAuxPommesDanniversaire =
205 { rosettaPartPicture = "TarteAuxPommesDanniversaire/IMG_20250605_180725.avif"
206 , rosettaPartDescription = ""
207 , rosettaPartLangue = LangueFrançais
208 , rosettaPartText = "Délicieuse tarte aux pommes d'anniversaire"
211 { rosettaPartPicture = "TarteAuxPommesDanniversaire/VID_20250605_214924.mp4.00-01-40-421.avif"
212 , rosettaPartDescription = ""
213 , rosettaPartLangue = LangueAnglais
214 , rosettaPartText = "Delicious birthday apple pie"
217 { rosettaPartPicture = "TarteAuxPommesDanniversaire/VID_20250605_214924.mp4.00-01-47-284.avif"
218 , rosettaPartDescription = ""
219 , rosettaPartLangue = LangueMandarin
220 , rosettaPartText = "美味 的 生日 苹果派"
228 { rosettaPartPicture = "Chat/IMG_20250605_194233_truffe.avif"
229 , rosettaPartDescription = ""
230 , rosettaPartLangue = LangueFrançais
231 , rosettaPartText = "chat cheval vélo"
234 { rosettaPartPicture = "Cheval/IMG_20250602_170549_himalaya.avif"
235 , rosettaPartDescription = ""
236 , rosettaPartLangue = LangueAnglais
237 , rosettaPartText = "cat horse bicycle"
240 { rosettaPartPicture = "Vélo/IMG_20250602_155624.fav.vélos.avif"
241 , rosettaPartDescription = ""
242 , rosettaPartLangue = LangueMandarin
243 , rosettaPartText = "猫 马 自行车"
252 { rosettaDifficulties =
254 & rosettaDifficultiesLatinBig
255 & rosettaDifficultiesLatinHidden
256 & rosettaDifficultiesCJKBig
259 chevauxDormirDebout =
265 { rosettaPartPicture = "Cheval/R5.avif"
266 , rosettaPartDescription = ""
267 , rosettaPartLangue = LangueFrançais
268 , rosettaPartText = "Les chevaux peuvent dormir debout"
272 { rosettaPartPicture = "Cheval/Do-Horses-Lay-Down-to-Sleep.avif"
273 , rosettaPartDescription = ""
274 , rosettaPartLangue = LangueAnglais
275 , rosettaPartText = "Horses can sleep standing up"
279 { rosettaPartPicture = "Cheval/3YVGNyR45fw5NwHQxvJ8P6.avif"
280 , rosettaPartDescription = ""
281 , rosettaPartLangue = LangueMandarin
282 , rosettaPartText = "马 可以 站 着 睡觉"
292 { rosettaPartPicture = "Poney/Horse-and-pony2.avif"
293 , rosettaPartPictureFit = ObjectFitCover
294 , rosettaPartDescription = ""
295 , rosettaPartText = "Les poneys sont petits mais costauds"
299 { rosettaPartPicture = "Poney/A-girl-equestrian-athlete-jumps-on-a-horse-high-barrier-ss230301-768x448.jpg.avif"
300 , rosettaPartPictureFit = ObjectFitCover
301 , rosettaPartDescription = ""
302 , rosettaPartText = "Ponies are small but strong"
306 { rosettaPartPicture = "Poney/horse-pull.avif"
307 , rosettaPartPictureFit = ObjectFitCover
308 , rosettaPartDescription = ""
309 , rosettaPartText = "小马 虽 小 但 很 强壮"
319 { rosettaPartPicture = "Poney/Shetland/Canva-Ponies-of-the-New-Forest-scaled.avif"
320 , rosettaPartPictureFit = ObjectFitCover
321 , rosettaPartDescription = "Shetland Pony"
322 , rosettaPartText = "Il existe environ 159 races de poneys"
326 { rosettaPartPicture = "Poney/PoneyFrançaisDeSelle/pho11-1441004372-ulk-modele1.avif"
327 , rosettaPartPictureFit = ObjectFitCover
328 , rosettaPartDescription = "Poney Français de Selle"
329 , rosettaPartText = "There are approximately 159 pony breeds"
333 { rosettaPartPicture = "Poney/NorwegianFjord/shutterstock_2092896190-1024x683.avif"
334 , rosettaPartPictureFit = ObjectFitCover
335 , rosettaPartDescription = "Norwegian Fjord Pony"
336 , rosettaPartText = "有 大约 159 个 小马 品种"
346 { rosettaPartPicture = "Poney/Haflinger/GettyImages-546441489-3087a0a3f3a0486f96e7e6d7eb0b6bc1.avif"
347 , rosettaPartPictureFit = ObjectFitCover
348 , rosettaPartDescription = "Haflinger Pony"
349 , rosettaPartText = "Il existe environ 159 races de poneys"
353 { rosettaPartPicture = "Poney/Dartmoor/GettyImages-149824058-ee7fd8a5e9984f5a9dc73c5916a238aa.avif"
354 , rosettaPartPictureFit = ObjectFitCover
355 , rosettaPartDescription = "Dartmoor Pony"
356 , rosettaPartText = "There are approximately 159 pony breeds"
360 { rosettaPartPicture = "Poney/Connemara/eaa17d54a2978f5962edc405f0beabb7.avif"
361 , rosettaPartPictureFit = ObjectFitCover
362 , rosettaPartDescription = "Connemara Pony"
363 , rosettaPartText = "有 大约 159 个 小马 品种"
373 { rosettaPartPicture = "Poney/"
374 , rosettaPartPictureFit = ObjectFitCover
375 , rosettaPartDescription = "Pony"
376 , rosettaPartText = "Il existe environ 159 races de poneys"
380 { rosettaPartPicture = "Poney/Dartmoor/GettyImages-149824058-ee7fd8a5e9984f5a9dc73c5916a238aa.avif"
381 , rosettaPartPictureFit = ObjectFitCover
382 , rosettaPartDescription = "Dartmoor Pony"
383 , rosettaPartText = "There are approximately 159 pony breeds"
387 { rosettaPartPicture = "Poney/Connemara/eaa17d54a2978f5962edc405f0beabb7.avif"
388 , rosettaPartPictureFit = ObjectFitCover
389 , rosettaPartDescription = "Connemara Pony"
390 , rosettaPartText = "有 大约 159 个 小马 品种"
399 { rosettaPartPicture = "Culicoides/Blood-Feeding-Culicoides-Midges.avif"
400 , rosettaPartPictureFit = ObjectFitCover
401 , rosettaPartText = "Les moucherons culicoides sont des vampires infectieuses"
405 { rosettaPartPicture = "Culicoides/Mosquito_(Ochlerotatus_annulipes)_and_Midge_(Culicoides_impunctatus)_biting_human_(me).avif"
406 , rosettaPartPictureFit = ObjectFitCover
407 , rosettaPartText = "Culicoides midges are infectious vampires"
411 { rosettaPartPicture = "Culicoides/CSIRO_ScienceImage_1791_SEM_of_a_biting_midge_Culicoides_brevitarsis.avif"
412 , rosettaPartPictureFit = ObjectFitCover
413 , rosettaPartText = "库蠓属 具有 传染性 的 吸血鬼"
424 { rosettaPartPicture = "Fraise/96caabc77f79887c4bbcb2383092707b.avif"
425 , rosettaPartText = "Les fruits de la fraise sont les akènes"
429 { rosettaPartPicture = "Fraise/OIP.avif"
430 , rosettaPartPictureFit = ObjectFitCover
431 , rosettaPartText = "Strawberry's fruits are the achenes"
435 { rosettaPartPicture = "Fraise/Coupe_d'une_fraise_dont_les_akènes_ont_germés.avif"
436 , rosettaPartText = "草莓 的 果实 是 瘦果"
446 { rosettaPartPicture = "ArielleLaPetiteSirène/3aff97d2a3c36b307c12e7ea36e2000b.avif"
447 , rosettaPartText = "Arielle la poupée et Merlin le garçon"
451 { rosettaPartPicture = "ArielleLaPetiteSirène/halle-bailey-as-ariel-in-the-little-mermaid-zk-1280x2120.small.avif"
452 , rosettaPartText = "Ariel the doll and Merlin the boy"
456 { rosettaPartPicture = "Poupée/IMG_20250613_111606.avif"
457 , rosettaPartText = "娃娃 Arielle 和 男孩 梅林"
467 { rosettaPartPicture = "LaBelleEtLaBête/batbjpg-fe2293_1280w.avif"
468 , rosettaPartText = "Bella la poupée et Maya la fille"
472 { rosettaPartPicture = "LaBelleEtLaBête/disney-live-action-02.avif"
473 , rosettaPartPictureFit = ObjectFitCover
474 , rosettaPartText = "Bella the doll and Maya the girl"
478 { rosettaPartPicture = "Poupée/IMG_20250613_111730.avif"
479 , rosettaPartText = "娃娃 Bella 和 女孩 马雅" -- 玛雅