ローカルで動作するW3Cのテストスイートを公開します。

「全てパスした」とだけ書くと、あまり良くないことが起きそうなので、ローカルで動作するように修正したCSSセレクタのテストスイートを公開します。

W3Cのテストスイート: http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/xhtml/index.html

利用される方へ注意点をいくつか

  • そのままではパスしないテストも含んでいます(::selection や :first-letter など)。内容を確認し「このテストはパスしなくても良い」ことを判断して使ってください(index.html にヒントが埋まっている場合があります)。
  • ブラウザのバグによりパスできないテストも含んでいます(IE の :empty など)。
  • 状況依存のテストも含んでいます。動的なテスト(#d1b, #d4)は負荷要因により失敗する場合があります。個別にテストしてください。:link, :visited はブラウザの履歴でテスト結果が変化します。
  • テストケースそのものに勘違いやバグがあるかもしれません。見つけた場合はフィードバックを下さい。
  • W3Cのサイトには「仕様全てがテストケースに落とし込まれている訳ではない」と明記されています。

zip

http://pigs.sourceforge.jp/blog/200901220358/W3CTest.zip
# 近い将来リンク切れになる可能性があります。

同梱している selector.js は uupaa-0.7.js のテストビルドです。:visited と標準外の機能を切ってあります。
# :visited を切っているため :link が正しく動作しないテストがあります。

使い方

index.html がテストスイートです。四つあるボタンのうち右側の2つがローカル用に修正されたテストケースで、左2つがW3Cのテストそのものです。
いずれかのボタンをクリックすると、40〜60個の iframe を作成しファイルを読み込みます(非力なPCだと辛いかもしれません)。

各テストケースは、<script src="selector.js"> を読み込みます。事前にテストしたいライブラリを1ファイル化し、selector.js にリネームしておいてください。

また、selector.js の末尾にコードを追加しておいてください。ライブラリによっては、Array.forEach ではなく forEach メソッドを追加する必要もあるでしょう。

if (!("forEach" in Array.prototype)) {
  Array.prototype.forEach=function(fn,me){
    for(var i=0,sz=this.length;i<sz;++i){(i in this)&&fn.call(me,this[i],i,this);}
  };
}
var CSSSelector = $; // ここは任意で

抽出要素を着色する部分はこのようになっています。

  CSSSelector('p').forEach(function(v) {
    v.style.color = "green";
  });

公開する意味

このテストスイートを公開してしまうと「テストをパスすることが最低ライン」という状況が生まれるかもしれず、作る側にとってはかなりの負担増になるかもしれません。
ただ、Made in Japan として世界に出るなら、暗に品質が求められるでしょう。

技術には競争が、品質には協力が必要です。