
# تغطية test262

[test262](https://github.com/tc39/test262) هي مجموعة اختبارات المطابقة الرسمية التي تتولى TC39 صيانتها، وهي الطريقة المعتمدة لمقارنة محركات JavaScript.

يجتاز Phasis **المجموعة كاملة بنسبة 100 %** في كل الفئات — دلالات اللغة، والمكتبة القياسية، و`Intl`، و`annexB`، وميزات الويب القديمة، ودليل `staging` للاختبارات قيد الاحتضان، واختبارات ذاتية لأداة التشغيل. لا تجاوزات عبر أعلام الميزات، ولا إدخالات لقائمة حظر بسبب فجوات المضيف، ولا استثناءات لكل جزء.

المجموعة مثبتة على إصدار محدد: إذ يحدد المستودع الفرعي لـ git `test262` المراجعة التي يُقاس Phasis عليها، ولا تُحتسب الاختبارات الجديدة من المصدر إلا بعد ترقية المستودع الفرعي. تُعاد تهيئة لقطة المجموعة كاملة في [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md) بواسطة سير عمل `compat-matrix.yml`، الذي يُشغّل يدويًا لا عند كل عملية دفع؛ ويسجل `COMPAT.md` وقت أخذ اللقطة والالتزام الذي استندت إليه.

للمقارنة، يتتبع [test262.fyi](https://test262.fyi) المجموعة نفسها مع كل محركات JS المستخدمة في الإنتاج:

| المحرك | المطابقة |
|---|---:|
| V8 (Chrome / Node) | 99.8 % |
| SpiderMonkey (Firefox) | 99.6 % |
| JavaScriptCore (Safari) | 99.4 % |
| QuickJS | ~97 % |
| Hermes (React Native) | ~95 % |
| **Phasis** | **100 %** |

تظل لدى كل من هذه المحركات فجوة صغيرة (مقترحات أُضيفت حديثًا، وحالات طرفية نادرة قيد التطوير). يسد Phasis الفجوة لأنه تنفيذ مخصص للمطابقة أولًا.

## التشغيل محليًا

يحتاج المشغّل إلى المستودع الفرعي `test262` وفئات الاختبار في المستودع، وكلاهما غير مضمن في حزمة Composer، لذا شغّله من نسخة مستنسخة:

```bash
git clone https://github.com/inline0/phasis
cd phasis
git submodule update --init test262
composer install
./bin/test262 --jobs 4
```

يستغرق التشغيل الكامل نحو 20 دقيقة على جهاز Mac حديث؛ أما CI فيقسّم الاختبارات إلى أجزاء متوازية وينهيها خلال دقائق معدودة.

لتشغيل فئة واحدة فقط أثناء تصحيح الأخطاء:

```bash
./bin/test262 --category built-ins/Array
./bin/test262 --category language/expressions/yield --failures
```

راجع [مرجع CLI](https://phasis.inline0.dev/ar/docs/cli#bin-test262) للاطلاع على مجموعة الخيارات كاملة.

## لماذا يهم هذا

لدلالات JavaScript تفاصيل دقيقة — `NaN !== NaN` و`-0 === 0` و`[1] + 1 === "11"`، والترتيب الدقيق لتعداد الخصائص، وتوقيت المهام الدقيقة لـ Promise. يجب على المكتبة التي تشغّل شيفرة JS للمستخدم أن تتعامل مع كل ذلك على نحو صحيح في كل مرة. تمثل test262 معيار «الصواب»؛ واجتيازها بنسبة 100 % يعني أن برنامج JS الذي يعمل على V8 ينتج مخرجات مطابقة بايتًا ببايت على Phasis (باستثناء واجهات المتصفح فقط).
