111 lines
4.2 KiB
Markdown
111 lines
4.2 KiB
Markdown
|
||
[← Обратно към индекса](index.md)
|
||
|
||
---
|
||
|
||
# Съвместимост с Clojure Test Suite
|
||
|
||
Bara Lang участва в между-диалектния **[jank-lang/clojure-test-suite](https://github.com/jank-lang/clojure-test-suite)** — стандартният Clojure тестови пакет за съответствие, който валидира поведението на всички Clojure диалекти.
|
||
|
||
## Поддържани диалекти
|
||
|
||
Clojure Test Suite се поддържа официално за следните диалекти:
|
||
|
||
| Диалект | Статус | Runtime |
|
||
|---------|--------|---------|
|
||
| Clojure (JVM) | ✅ Официален | JVM |
|
||
| ClojureScript | ✅ Официален | JavaScript / Node.js |
|
||
| Babashka | ✅ Официален | GraalVM native-image |
|
||
| Clojure CLR | ✅ Официален | .NET CLR |
|
||
| Basilisp | ✅ Официален | Python |
|
||
| **Bara Lang** | 🚀 Кандидат | **Nim → C → Native** |
|
||
|
||
## Бърз старт
|
||
|
||
### 1. Клониране на тестовия пакет
|
||
|
||
```bash
|
||
git clone https://github.com/jank-lang/clojure-test-suite.git /tmp/clojure-test-suite
|
||
```
|
||
|
||
### 2. Пускане на индивидуални тестове
|
||
|
||
Използвайте `test_single.py` за пускане на конкретен тестов файл:
|
||
|
||
```bash
|
||
python3 test_single.py /tmp/clojure-test-suite/test/clojure/core_test/nil_qmark.cljc
|
||
```
|
||
|
||
### 3. Пускане на пакет
|
||
|
||
```bash
|
||
python3 test_single.py
|
||
# Пуска: zipmap, zero_qmark, with_out_str
|
||
```
|
||
|
||
Редактирайте файла `test_single.py`, за да добавите още тестови файлове към списъка.
|
||
|
||
## Формат на тестовете
|
||
|
||
Всеки тестов файл е `.cljc` (cross-platform Clojure/ClojureScript) файл със стандартна структура:
|
||
|
||
```clojure
|
||
(ns clojure.core-test.nil-qmark
|
||
(:require [clojure.test :as t :refer [are deftest is testing]]
|
||
[clojure.core-test.portability :refer [when-var-exists]]))
|
||
|
||
(when-var-exists nil?
|
||
(deftest test-nil?
|
||
(testing "common"
|
||
(are [in ex] (= (nil? in) ex)
|
||
nil true
|
||
0 false
|
||
false false
|
||
"" false))))
|
||
```
|
||
|
||
## Обработка на Reader Conditionals
|
||
|
||
`test_single.py` на Bara Lang предварително обработва `.cljc` файловете, като премахва `#?` и `#?@` reader conditionals и извлича `:default` клона:
|
||
|
||
```clojure
|
||
;; Преди
|
||
#?(:cljs :refer-macros :default :refer)
|
||
|
||
;; След
|
||
:refer
|
||
|
||
;; Преди
|
||
#?@(:cljs [] :default [1 2 3])
|
||
|
||
;; След
|
||
[1 2 3]
|
||
```
|
||
|
||
Това следва стандартната между-диалектна конвенция — всеки диалект разрешава `:default` според своята платформа.
|
||
|
||
## Текущ обхват на тестовете
|
||
|
||
Тестовият пакет покрива **212+ функции от `clojure.core`** и **8 функции от `clojure.string`**. Bara Lang работи към пълно съответствие.
|
||
|
||
Вижте [Roadmap](06-roadmap.md) за статуса на имплементацията.
|
||
|
||
---
|
||
|
||
## Настройка на тестове за отделните диалекти
|
||
|
||
За справка, ето линкове към официалните ръководства за настройка на тестовете за други платформи:
|
||
|
||
| Диалект | Ръководство за настройка |
|
||
|---------|--------------------------|
|
||
| Clojure (JVM) | [clojure.md](https://github.com/jank-lang/clojure-test-suite/blob/main/doc/clojure.md) |
|
||
| ClojureScript | [clojurescript.md](https://github.com/jank-lang/clojure-test-suite/blob/main/doc/clojurescript.md) |
|
||
| Babashka | [babashka.md](https://github.com/jank-lang/clojure-test-suite/blob/main/doc/babashka.md) |
|
||
| Clojure CLR | [clojureclr.md](https://github.com/jank-lang/clojure-test-suite/blob/main/doc/clojureclr.md) |
|
||
| Basilisp | [basilisp.md](https://github.com/jank-lang/clojure-test-suite/blob/main/doc/basilisp.md) |
|
||
| **Bara Lang** | **Този документ** |
|
||
|
||
---
|
||
|
||
*Последно обновено: 2026-05-09*
|