Exercism पर अपने YAMLScript अभ्यासों की जाँच करना सीखिए।
YAMLScript में लिखे Exercism अभ्यासों के हल टेस्ट करना बेहद आसान है। इन्हें चलाना भी आसान, समझना भी आसान।
आपको बस अभ्यास की डायरेक्टरी में make test चलाना है।
पहली बार make test चलाने पर सारे टेस्ट फेल हो जाएँगे, बस इसलिए कि आपने अभी टेस्ट पास करने के लिए कोई कोड नहीं लिखा है।
अभ्यास पर काम करने का आम तरीका यह है कि आप make test से शुरू करें और फिर एक बार में एक ही टेस्ट पर ध्यान दें, ऐसा कोड लिखते हुए जिससे वह टेस्ट पास हो जाए।
जब सारे टेस्ट पास हो जाएँ, तो आपका काम पूरा!
एक बोनस यह भी है कि make test चलाने पर यह भी पक्का हो जाता है कि ys YAMLScript इंटरप्रेटर का सही संस्करण (जो मौजूदा अभ्यास के लिए ज़रूरी है) सही जगह (/path/to/exercism/yamlscript/.local/) पर इंस्टॉल है।
यानी शुरू करने के लिए आपको पहले से ys इंस्टॉल करने की ज़रूरत ही नहीं!
अगर आप the-great-exercise नाम के अभ्यास पर काम कर रहे हैं, तो exercism download --exercise=the-great-exercise --track=yamlscript कमांड आपके लिए
/path/to/exercism/yamlscript/the-great-exercise डायरेक्टरी बना देगा।
इस डायरेक्टरी के अंदर टेस्ट फाइल का नाम the-great-exercise-test.ys होगा और हल वाले प्रोग्राम फाइल का नाम the-great-exercise.ys।
साथ में एक README.md फाइल भी होगी जिसमें अभ्यास का विवरण होगा, और एक HELP.md फाइल जिसमें कुछ मददगार जानकारी होगी, अगर आप कहीं अटक जाएँ।
make के लिए दो फाइलें होंगी: Makefile और GNUmakefile।
इसका उद्देश्य यह सुनिश्चित करना है (यहाँ 'make' को लेकर शब्दों का खेल अनजाने में ही बन गया है) कि टेस्ट चलाने के लिए आप GNU make इस्तेमाल करें, न कि आपके सिस्टम पर इंस्टॉल कोई और make कमांड।
असली फाइल GNUmakefile है और GNU make हमेशा Makefile के बजाय उसी को चुनेगा।
बाकी make कमांड Makefile इस्तेमाल करेंगे, जिससे एक एरर संदेश आना चाहिए जो आपसे GNU make इस्तेमाल करने को कहेगा!
YAMLScript के टेस्ट YAMLScript में ही लिखे जाते हैं, बेशक! और चूँकि YAMLScript यानी YAML और YAML यानी डेटा, इसलिए टेस्ट मूल रूप से बस डेटा ही हैं।
यहाँ एक साधारण टेस्ट फाइल का उदाहरण है।
यह दरअसल acronym अभ्यास के पहले 3 टेस्ट हैं। :-)
#!/usr/bin/env ys-0
use ys::taptest: :all
load: 'acronym.ys'
test::
- name: Basic
code: abbreviate('Portable Network Graphics')
want: PNG
- name: Lowercase words
code: abbreviate('Ruby on Rails')
want: ROR
- name: Punctuation
code: abbreviate('First In, First Out')
want: FIFO
done: 3
पहली लाइन एक शीबैंग लाइन है, जो prove कमांड (जिसे Makefile चलाता है) को बताती है कि टेस्ट चलाने के लिए perl के बजाय YAMLScript के ys इंटरप्रेटर का इस्तेमाल करे, क्योंकि prove के लिए डिफ़ॉल्ट perl ही है।
दूसरी लाइन एक use स्टेटमेंट है, जो YAMLScript की ys::taptest
TAP टेस्टिंग लाइब्रेरी लोड करता है।
नोट: TAP, टेस्ट स्क्रिप्ट और टेस्ट हार्नेस के बीच एक साधारण टेक्स्ट-आधारित इंटरफ़ेस है, और Perl में TAP टेस्ट चलाने का मानक हार्नेस
proveहै। चूँकि Perl हर जगह मौजूद है, इसलिए बहुत सी भाषाओं (YAMLScript समेत) के टेस्ट सूट के लिए TAP औरproveबहुत अच्छा विकल्प साबित होते हैं।
use स्टेटमेंट acronym.ys हल प्रोग्राम लोड करता है, ताकि यह टेस्ट फाइल इसी की जाँच कर सके।
हमारे सारे टेस्ट test की के नीचे एक YAML सीक्वेंस में होते हैं।
अंतिम लाइन done: ज़रूरी है और टेस्ट हार्नेस को बताती है कि सारे टेस्ट सचमुच चले।
कोष्ठक में दी गई संख्या (जो वैकल्पिक है) उन टेस्टों की संख्या है जो हमें चलने की उम्मीद थी।
हर टेस्ट (test की के नीचे) इन की-वैल्यू जोड़ों वाला एक मैपिंग है:
name: - टेस्ट का लेबल, जिसे prove -v प्रिंट करता है।code: - चलाने वाला YAMLScript कोड।
यह कोड उस हल प्रोग्राम के किसी फंक्शन को कॉल करेगा जिस पर हम काम कर रहे हैं।what: - जिन टेस्टों में एरर होने की उम्मीद है, उनमें वैल्यू error होती है।
सामान्य टेस्टों में यह जोड़ा मौजूद नहीं रहता।want: - टेस्ट का अपेक्षित परिणाम।
यह एक YAML वैल्यू है और स्ट्रिंग, संख्या, बूलियन, सीक्वेंस या मैप हो सकती है।
अगर what: की वैल्यू error है, तो यह वैल्यू अपेक्षित एरर संदेश होती है।SKIP: - उस टेस्ट को चलाना छोड़ने के लिए इसे true पर सेट कीजिए।ONLY: - सिर्फ उसी टेस्ट को चलाने के लिए इसे true पर सेट कीजिए।
अगर आपके पास एक से ज़्यादा ONLY: टेस्ट हैं, तो उनमें से हर एक चलेगा।YAMLScript में Exercism के अभ्यासों के लिए टेस्ट-ड्रिवन डेवलपमेंट करने के लिए बस इतना ही जानना काफी है!
ys::taptest लाइब्रेरी में और भी फीचर हैं जिन्हें आप ज़्यादा जटिल टेस्ट लिखने के लिए इस्तेमाल कर सकते हैं, लेकिन Exercism के टेस्ट तो आपके लिए पहले से लिखे जा चुके हैं।
ys::taptest लाइब्रेरी के बारे में और जानने के लिए दस्तावेज़ देखिए।