تغطية test262
test262 هي مجموعة اختبارات المطابقة الرسمية التي تتولى TC39 صيانتها، وهي الطريقة المعتمدة لمقارنة محركات JavaScript.
يجتاز Phasis المجموعة كاملة بنسبة 100 % في كل الفئات — دلالات اللغة، والمكتبة القياسية، وIntl، وannexB، وميزات الويب القديمة، ودليل staging للاختبارات قيد الاحتضان، واختبارات ذاتية لأداة التشغيل. لا تجاوزات عبر أعلام الميزات، ولا إدخالات لقائمة حظر بسبب فجوات المضيف، ولا استثناءات لكل جزء.
المجموعة مثبتة على إصدار محدد: إذ يحدد المستودع الفرعي لـ git test262 المراجعة التي يُقاس Phasis عليها، ولا تُحتسب الاختبارات الجديدة من المصدر إلا بعد ترقية المستودع الفرعي. تُعاد تهيئة لقطة المجموعة كاملة في COMPAT.md بواسطة سير عمل compat-matrix.yml، الذي يُشغّل يدويًا لا عند كل عملية دفع؛ ويسجل COMPAT.md وقت أخذ اللقطة والالتزام الذي استندت إليه.
للمقارنة، يتتبع 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، لذا شغّله من نسخة مستنسخة:
git clone https://github.com/inline0/phasis
cd phasis
git submodule update --init test262
composer install
./bin/test262 --jobs 4
يستغرق التشغيل الكامل نحو 20 دقيقة على جهاز Mac حديث؛ أما CI فيقسّم الاختبارات إلى أجزاء متوازية وينهيها خلال دقائق معدودة.
لتشغيل فئة واحدة فقط أثناء تصحيح الأخطاء:
./bin/test262 --category built-ins/Array
./bin/test262 --category language/expressions/yield --failures
راجع مرجع CLI للاطلاع على مجموعة الخيارات كاملة.
لماذا يهم هذا
لدلالات JavaScript تفاصيل دقيقة — NaN !== NaN و-0 === 0 و[1] + 1 === "11"، والترتيب الدقيق لتعداد الخصائص، وتوقيت المهام الدقيقة لـ Promise. يجب على المكتبة التي تشغّل شيفرة JS للمستخدم أن تتعامل مع كل ذلك على نحو صحيح في كل مرة. تمثل test262 معيار «الصواب»؛ واجتيازها بنسبة 100 % يعني أن برنامج JS الذي يعمل على V8 ينتج مخرجات مطابقة بايتًا ببايت على Phasis (باستثناء واجهات المتصفح فقط).