الاختبار في مسار Unison

تعلّم كيف تختبر تمارين Unison على Exercism


التعرّف على مدير قاعدة أكواد Unison

مدير قاعدة أكواد Unison (UCM) هو الأداة التي تشغّل لغة البرمجة Unison وتتيح لك التنقّل في كود Unison الذي كتبته وحفظته.

💡 تذكّر: لا يُحفظ كود Unison كمحتوى نصي في ملفات. ولهذا السبب نحتاج إلى أداة تتيح لنا تغيير برامج Unison وتشغيلها.

كتابة كود Unison بسيطة بقدر فتح الطرفية التي تفضّلها وتشغيل الأمر ucm في المجلد الذي ستكتب فيه كود Unison. ثم يمكنك استخدام محرّر النصوص المفضّل لديك لإنشاء ملف بامتداد .u أو فتحه، مثل scratch.u أو hello.u. سيتمثّل معظم سير عملك في التنقّل بين نسخة سطر أوامر ucm قيد التشغيل وملفك ذي الامتداد .u. يراقب UCM تلقائيًا التغييرات في ملفك ذي الامتداد .u عند حفظ الملف.

بدلًا من بنية المجلدات، تُنظَّم قواعد أكواد Unison عبر «فضاءات الأسماء». ستستكشف فضاء الأسماء الخاص بالمكتبة القياسية، واسمه base، بحثًا عن دوال وأنواع بيانات مفيدة، وستنشئ فضاءات أسماء خاصة بك أثناء كتابة كود Unison. في UCM، يتم التنقّل داخل قاعدة الأكواد باستخدام الأمرين ls وview، وهما يُستخدمان لعرض محتوى فضاء الأسماء وعرض الكود المصدري على الترتيب.

بينما يمكنك التنقّل في قاعدة أكوادك وعرضها عبر واجهة سطر أوامر UCM، قد ترغب أيضًا في رؤية تمثيل رسومي أنيق لعملك. يمكنك فعل ذلك بإصدار الأمر ui في واجهة سطر أوامر UCM. سيفتح نافذة متصفح تعرض الكود الموجود في قاعدة أكوادك. كما تُعدّ واجهة قاعدة الأكواد المحلية طريقة رائعة لاستكشاف الدوال في مكتبتنا القياسية، واسمها base، وقد تكون مفيدة في إنجاز التمارين. اقرأ المزيد عن واجهة قاعدة الأكواد المحلية هنا.

يمكنك التدرّب على سير عمل البرمجة في Unison عبر جولة لغة Unison.

إعداد الاختبارات في Exercism

نظرة سريعة

  1. أنشئ مشروعًا جديدًا باستخدام الأمر project.create وحدّد له اسمًا (مثل project.create hello-world)

  2. بينما يراقب UCM مجلد التمرين، أجرِ تغييراتك في الملف <myFileName>.u

  3. احفظ الملف <myFileName>.u

  4. إذا اجتاز الملف فحص الأنواع، شغّل الأمرين add أو update في UCM

    • إذا لم يجتز الملف فحص الأنواع، أجرِ تغييرات على الكود في ملفك <myFileName>.u حتى ينجح تجميعه
  5. شغّل الأمر load <myFileName>.test.u في سطر أوامر UCM لجلب الاختبارات إلى النطاق وتشغيلها

شرح مفصّل

إذا كنت تعمل على تمرين من Exercism عبر سطر الأوامر، فالأرجح أنك ستكتب حلك في المجلد الذي يحمل اسم التمرين المعطى. على سبيل المثال، إذا كان التمرين hello-world، فعليك فتح ucm من سطر الأوامر بعد الانتقال بـ cd إلى ~/exercism/unison/hello-world وإنشاء مشروع في ucm (مثل project.create hello-world). أجرِ تغييرات تنفيذك في ملف hello.u، وعندما ترضى عن تنفيذك، أدخل الأمر add أو update في واجهة سطر أوامر مدير قاعدة أكواد Unison (UCM) لإضافة عملك من الملف إلى قاعدة الأكواد.

الملف الذي يحتوي على اختبارات كل تمرين يكون امتداده .test.u. ستحتاج إلى استخدام الأمر load في UCM لجلب الاختبارات إلى النطاق وتشغيلها. يأخذ الأمر load مسار ملف كوسيط. إليك كيف قد يبدو ذلك لتمرين hello world ومشروع hello-world:

hello-world/main> load hello.test.u

ينبغي أن ترى رسالة من UCM عن المصطلحات التي جُلبت إلى النطاق، والأهم من ذلك نتيجة تشغيل الاختبار:


  ⍟ 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

لنفترض أن اختباراتك لم تنجح في المرة الأولى. عُد إلى تحرير ملفك myExercise.u، وعند الحفظ يمكنك تنفيذ update

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

بعد ذلك يمكننا إعادة تحميل اختباراتنا لنرى إن كان هناك أي تغيير!

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.

أوامر UCM المفيدة

لعرض قائمة بالأوامر المتاحة للتفاعل مع قاعدة أكوادك، شغّل help في واجهة سطر أوامر مدير قاعدة أكواد Unison. كما أن قائمة أوامر UCM موصوفة على موقعنا. إليك بعضًا منها قد يكون مفيدًا:

  • add: يضيف التعريفات الجديدة من ملف .u إلى قاعدة الأكواد.
  • update: يعمل مثل add، لكن إذا كان لتعريف في الملف الاسم نفسه الذي لتعريف موجود، فيُحدَّث الاسم ليشير إلى التعريف الجديد.
    • إذا كان للتعريف القديم أي عناصر تعتمد عليه، فسينشر update التغيير تلقائيًا إن أمكن، أو ينشئ عنصر todo لإعادة الهيكلة لاحقًا.
  • load: يحلّل الملف المؤقت ذا الامتداد .u المعطى ويفحص أنواعه ويقيّمه. وبعد فحص الأنواع والتقييم، يمكنك إضافة المصطلحات إلى قاعدة أكوادك.
  • ls: يعرض محتوى فضاء الأسماء
  • view: يعرض الكود المصدري لتعريف Unison معطى
  • ui: يفتح واجهة قاعدة الأكواد المحلية
  • exit: يغلق UCM