Tanuld meg, hogyan teszteld az Unison feladataidat az Exercism-ön
A Unison Codebase Manager (UCM) az az eszköz, amely futtatja a Unison programozási nyelvet, és amellyel a megírt és elmentett Unison-kódodban navigálhatsz.
💡 Ne feledd: a Unison-kód nem szöveges fájlokban tárolódik. Épp ezért van szükségünk egy olyan eszközre, amellyel a Unison-programokat módosíthatjuk és futtathatjuk.
Unison-kódot írni annyi, mint megnyitni a választott terminálodat, és a ucm parancsot abban a könyvtárban futtatni, ahol a Unison-kódodat írni fogod. Ezután a kedvenc szövegszerkesztőddel létrehozhatsz vagy megnyithatsz egy .u kiterjesztésű fájlt, például scratch.u vagy hello.u néven. A munkafolyamatod nagy része abból áll majd, hogy a futó ucm parancssori példány és a .u fájlod között váltogatsz. Amint elmented a .u kiterjesztésű fájlodat, a UCM automatikusan felismeri a módosításokat.
A könyvtárszerkezet helyett a Unison-kódbázisokat „névterek” segítségével szervezzük. A base nevű standard könyvtár névterét fogod böngészni hasznos függvények és adattípusok után kutatva, és saját névtereket is létrehozol majd, miközben Unison-kódot írsz. A UCM-ben a kódbázison belüli navigáláshoz az ls és a view parancsot használod: előbbi a névtér tartalmát listázza, utóbbi pedig a forráskódot jeleníti meg.
Bár a kódbázisodban a UCM CLI-n keresztül is navigálhatsz és nézegetheted a kódot, lehet, hogy szeretnéd a munkádat egy szép grafikus nézetben is látni. Ezt úgy teheted meg, hogy kiadod a ui parancsot a UCM CLI-ben. Ez megnyit egy böngészőablakot, amelyben a kódbázisodban lévő kód látható. A helyi kódbázis UI emellett remek módja annak, hogy felfedezd a base nevű standard könyvtárunk függvényeit, amelyek hasznosak lehetnek a feladatok megoldásához. Itt olvashatsz többet a helyi kódbázis UI-ról.
A Unison programozási munkafolyamatát a Unison nyelvi túra segítségével gyakorolhatod.
Hozz létre egy új projektet a project.create paranccsal, és add meg a nevét (pl. project.create hello-world)
Miközben a UCM figyeli a feladat könyvtárát, végezd el a módosításaidat a <myFileName>.u fájlban
Mentsd el a <myFileName>.u fájlt
Ha a fájl átmegy a típusellenőrzésen, futtasd az add vagy az update UCM-parancsot
<myFileName>.u fájlban lévő kódot, amíg az le nem fordulFuttasd a load <myFileName>.test.u parancsot a UCM CLI-ben, hogy a tesztek bekerüljenek a scope-ba, és le is futtasd őket
Ha parancssorból dolgozol egy Exercism-feladaton, valószínűleg a megadott feladat nevét viselő könyvtárban fogod megvalósítani a megoldásodat. Például ha a feladat a hello-world, akkor először a cd paranccsal lépj be a ~/exercism/unison/hello-world könyvtárba, majd a parancssorból nyisd meg a ucm-et, és hozz létre benne egy projektet (pl. project.create hello-world). A megvalósításoddal kapcsolatos módosításokat a hello.u fájlban végezd el, és amikor elégedett vagy vele, írd be az add vagy az update parancsot a Unison Codebase Manager CLI-be (UCM), hogy a fájlban lévő munkádat beemeld a kódbázisba.
A teszteket tartalmazó fájl kiterjesztése minden feladatnál .test.u. A UCM load parancsával viheted a teszteket a scope-ba, és futtathatod is őket. A load parancs argumentumként egy fájlútvonalat vár. A hello world feladatnál és a hello-world projektnél ez valahogy így nézhet ki:
hello-world/main> load hello.test.u
A UCM-től egy üzenetet látsz majd azokról a definíciókról, amelyek bekerültek a scope-ba, és ami a legfontosabb, a tesztfuttatás eredményét is látni fogod:
⍟ These new definitions are ok to `add`:
hello.test : Test.Test
tests : [Result]
Now evaluating any watch expressions (lines starting with
`>`)... Ctrl+C cancels.
6 | test> tests = runAll [hello.test]
🚫 FAILED
Tegyük fel, hogy a tesztjeid nem mentek át elsőre. Válts vissza a myExercise.u fájlod szerkesztésére, és mentés után futtathatod az update-et
I found and typechecked these definitions in ~/Exercism/unison/hello-world/hello.u. If you do an
`add` or `update`, here's how your codebase would change:
⍟ These names already exist. You can `update` them to your new definition:
hello : Text
hello-world/main> update
⍟ I've updated these names to your new definition:
hello : Text
Ezután újra betölthetjük a tesztjeinket, hogy lássuk, változott-e valami!
hello-world/main> load hello.test.u
Now evaluating any watch expressions (lines starting with `>`)... Ctrl+C cancels.
6 | test> tests = runAll [hello.test]
✅ Passed : Passed 1 tests.
Ha látni szeretnéd a kódbázisoddal való interakcióhoz elérhető parancsok listáját, futtasd a help parancsot a Unison Codebase Manager CLI-ben. A UCM-parancsok listája a weboldalunkon is megtalálható. Íme néhány, amely hasznos lehet:
add: A .u fájlban lévő új definíciókat hozzáadja a kódbázishoz.update: Úgy működik, mint az add, azzal a különbséggel, hogy ha egy fájlban lévő definíció neve megegyezik egy már létező definícióéval, akkor a név erre az új definícióra mutat majd.
update lehetőség szerint automatikusan továbbítja a változást, vagy létrehoz egy todo elemet a későbbi refaktoráláshoz.load: Elemzi, típusellenőrzi és kiértékeli a megadott .u kiterjesztésű scratch fájlt. Miután megtörtént a típusellenőrzés és a kiértékelés, a definíciókat hozzáadhatod a kódbázisodhoz.ls: Egy névtér tartalmát listázzaview: Megjeleníti egy adott Unison-definíció forráskódjátui: Megnyitja a helyi kódbázis UI-texit: Bezárja a UCM-et