Bnlang টেস্ট ফ্রেমওয়ার্ক ব্যবহার

Bnlang-এ একটি টেস্ট ফাইল একটি সাধারণ স্ক্রিপ্টই। আপনি test ইমপোর্ট করেন, t.test(name, fn) দিয়ে কিছু কেস রেজিস্টার করেন, এবং t.run() দিয়ে শেষ করেন। এই পেজ ব্যবহারিক অংশ কাভার করে — টেস্ট কীভাবে অর্গানাইজ করবেন, কীভাবে চালাবেন, এবং কীভাবে CI-তে ওয়্যার করবেন।


Running One Test File

bnl tests/math_spec.bnl

t.run() একটি সারমর্ম প্রিন্ট করে, এবং কোনো টেস্ট ব্যর্থ হলে কোড 1-এ এক্সিট করে — CI-এর জন্য এটাই একমাত্র সিগনাল।


Running a Whole Folder

কোনো বিল্ট-ইন গ্লব নেই, কিন্তু আপনার শেলে একটি আছে। প্রতিটি spec ফাইল চালান:

# POSIX shells
for f in tests/*.bnl; do bnl "$f" || exit 1; done

# PowerShell
foreach ($f in Get-ChildItem tests\*.bnl) { bnl $f.FullName; if ($LASTEXITCODE) { exit $LASTEXITCODE } }

Layout Conventions

একটি সাধারণ প্রজেক্ট টেস্টগুলো সেই কোডের পাশে রাখে, যা টেস্ট করছে:

my-app/
  bnl.json
  bnl.lock
  src/
    parser.bnl
    formatter.bnl
  tests/
    parser_spec.bnl
    formatter_spec.bnl

A Multi-Case Spec

// file: tests/parser_spec.bnl
import "test"   as t;
import "parser" as parser;

t.test("parses integers", function () {
    t.equal(parser.parse("42"), 42);
});

t.test("parses negatives", function () {
    t.equal(parser.parse("-3"), -3);
});

t.test("rejects garbage", function () {
    t.throws_with(function () { parser.parse("not a number"); }, "expected number");
});

t.run();

CI Integration

যেহেতু প্রতিটি টেস্ট ফাইল সফল হলে 0 দিয়ে এবং যেকোনো ব্যর্থতায় 1 দিয়ে এক্সিট করে, CI-এ প্লাগ ইন করা সহজ। GitHub Actions উদাহরণ স্টেপ:

- name: Run Bnlang tests
  shell: bash
  run: |
    for f in tests/*.bnl; do
      bnl "$f" || exit 1
    done

Best Practices

  • টেস্ট ফাইল ছোট ও ফোকাস্ড রাখুন। একটি বিষয়, একটি স্পেক ফাইল।
  • টেস্ট নাম বিহেভিয়র বর্ণনা করুক — "parses negatives" "test 3" এর চেয়ে ভালো।
  • কোন এরর আপনি আশা করছেন সেটা পিন করতে t.throws_with ব্যবহার করুন; খালি t.throws যেকোনো থ্রো গ্রহণ করে এবং বাগ লুকাতে পারে।
  • প্রতিটি কমিটে টেস্ট চালান। যত আগে রিগ্রেশন ধরা পড়ে, ঠিক করতে তত কম খরচ।