Pull to refresh

Встречайте — ACID3

Reading time3 min
Views693
Вчера известный вебразработчик автор библиотеки JQuery, Джон Резиг, в своем личном блоге сообщил о том, что готовится к выходу новая, третья по счету, версия теста Acid. Он выложил ссылку на предварительную версию в сеть для всеобщего ознакомления. Автор теста сообщает, что его разработка уже практически завершена.



Традиционно тест проверял парсинг HTML и CSS В 3й же версии разработчики ориентируются на тестировании DOM и JavaScript. Разберем, что же именно тестируется, особенно в отношении JavaScript:
  • Элизия массивов – вещи подобно [,,] должны иметь нулевую длину, а для масива [0,,1] она должна быть равна 3.
  • Методы массива – проверяется возможность добавления нескольких элементов в массив (.unshift(0, 1, 2)) и объединение его с undefined (.join(undefined).)
  • Преобразования чисел — проверяется работа таких методов как .toFixed(), .toExponential() и .toPrecision(), в первую очередь, с дробными и отрицательными чилами.
  • Операции со строками – метод substr() должен уметь работать с отрицательными аргументами (.substr(-7, 3)), доступ к символам строки должен осуществляться по их позиции («my string»[0]). (это часть спецификации ECMAScript4)
  • Работа с датами – удостовериться, что некоторые методы возвращают NaN (например, d.setMiliseconds() без аргументов), а также что происходит обязательное смещение +1900 лет.
  • Unicode символы в названиях переменных – их использование должно вызывать ошибку. Например,
    eval("test.i\\u002b= 1;");

  • Регулярные выражения — /[]/ должно соответствовать пустому массиву, а /[])]/ вызывать ошибку. Должны поддерживаться обратные ссылки (backreference) на несуществующие образы и отрицательные lookahed'ы — /(?!test)(test).exec(«test test»).
  • Перечисления (Enumeration) – нужно убедиться, что свойства объекта правильно перечисляются, что доступны свойства с определенными именами (toString, hasOwnProperty, etc)
  • Конструкторы – у пользователя должна быть возможность определять собственные конструктоы в свойстве .constructor, свойство .constructor не должно быть в перечислении, а свойство .prototype.constructor должно быть удаляемым.
  • Функции – возможность вызывать функцию по имени из самой себя, прямое изменение ее имени должно быть запрещено(только используя массивы функций). (function test(){… })(); — «test» не должен быть виден в родительской области.
  • Ошибки – переменные в блоке catch(){} должны в первую очередь работать с аргументами catch(), а затем уже с родительскими. Например
    var e = "my name";
    try
    {
      ...//некий код
    }
    catch(e)
    {
        alert(e);
    }

    не должно выводить «my name».
  • Операции присваивания — s = a.length = «123»; — a.length должно возвращать 123, а не 3
  • Кодировки — encodeURI() и encodeURIComponent() должны корректно работать с нулевыми байтами.

В общем и целом, это был широкий, однако достаточно поверхностный обзор суровых, но обязательных к исполнению требований спецификации ECMAScript. Открыв свой любимый браузер, вы просто обречены найти как минимум одно из этих требований невыполненным.

Подробности автор теста обещает представить уже в ближайшие дни.

И напоследок, предварительные результаты тестирования НЕЗАКОНЧЕННОГО Acid 3 над НЕЗАКОНЧЕННЫМИ версиями наиболее популярных браузеров, которые предоставил автор. Мы проверили, все сходится! =)

Вот эталон, который должен показать браузер.

ACID3 Reference

Firefox 2.x

ACID3 Firefox 2.x

Firefox 3.0b2

ACID3 Firefox 3.0b2

Safari 3

ACID3 Safari 3

WebKit Nightly

ACID3 WebKit Nightly

Opera 9.5b1

ACID3 Opera 9.5b1

Internet Explorer 7
ACID3 Internet Explorer 7
Ссылки по теме:
  1. Предварительное зеркало теста.
  2. Запись автора Джона Резига в личном блоге.

Кросспост из webdev.lovata.com
Tags:
Hubs:
Total votes 37: ↑28 and ↓9+19
Comments45

Articles