aboutsummaryrefslogtreecommitdiff
path: root/guidelines/wikipedia/specs
diff options
context:
space:
mode:
Diffstat (limited to 'guidelines/wikipedia/specs')
-rw-r--r--guidelines/wikipedia/specs/.jshintrc22
-rw-r--r--guidelines/wikipedia/specs/exports.js68
-rw-r--r--guidelines/wikipedia/specs/fixture_helper.js14
-rw-r--r--guidelines/wikipedia/specs/imageAlt_spec.js9
-rw-r--r--guidelines/wikipedia/specs/prelude_helper.js0
-rw-r--r--guidelines/wikipedia/specs/pseudoHeadings_spec.js17
-rw-r--r--guidelines/wikipedia/specs/rule_helper.js22
-rw-r--r--guidelines/wikipedia/specs/spaceBetweenListItems_spec.js29
8 files changed, 181 insertions, 0 deletions
diff --git a/guidelines/wikipedia/specs/.jshintrc b/guidelines/wikipedia/specs/.jshintrc
new file mode 100644
index 0000000..3643c90
--- /dev/null
+++ b/guidelines/wikipedia/specs/.jshintrc
@@ -0,0 +1,22 @@
+{
+ "laxbreak": true
+, "laxcomma": true
+, "undef": true
+, "jquery": true
+, "globals": {
+ "fiveui": false
+ , "$5": false
+ , "exports": false
+
+ , "afterEach": false
+ , "beforeEach": false
+ , "describe": false
+ , "it": false
+ , "expect": false
+ , "fixture": true
+ , "teardownFixtures": true
+ , "rule": true
+ , "run": true
+ }
+}
+
diff --git a/guidelines/wikipedia/specs/exports.js b/guidelines/wikipedia/specs/exports.js
new file mode 100644
index 0000000..7dcecbb
--- /dev/null
+++ b/guidelines/wikipedia/specs/exports.js
@@ -0,0 +1,68 @@
+/*
+ * Defines an `exports` object that can capture names and rules from
+ * multiple files. Requires a javascript runtime that supports
+ * ECMAScript 5.
+ */
+(function (global) {
+ 'use strict';
+
+ var exports = {};
+ var rules = {};
+ var unmatchedName, unmatchedDef;
+ var lastName, lastDef;
+
+ Object.defineProperty(exports, 'name', {
+ set: function(name) {
+ if (unmatchedDef) {
+ rules[name] = unmatchedDef;
+ unmatchedDef = null;
+ }
+ else {
+ unmatchedName = name;
+ }
+ lastName = name;
+ },
+
+ get: function() {
+ return lastName;
+ }
+ });
+
+ Object.defineProperty(exports, 'rule', {
+ set: function(def) {
+ if (unmatchedName) {
+ rules[unmatchedName] = def;
+ unmatchedName = null;
+ }
+ else {
+ unmatchedDef = def;
+ }
+ lastDef = def;
+ },
+
+ get: function() {
+ return lastDef;
+ }
+ });
+
+ Object.defineProperty(global, 'exports', {
+ get: function() {
+ return exports;
+ },
+
+ set: function(exp) {
+ if (exp && typeof exp === 'object' && exp.name && exp.rule) {
+ rules[exp.name] = exp.rule;
+ lastName = exp.name;
+ lastDef = exp.rule;
+ }
+ }
+ });
+
+ function rule(name) {
+ return rules[name];
+ }
+
+ global.rule = rule;
+
+}(this));
diff --git a/guidelines/wikipedia/specs/fixture_helper.js b/guidelines/wikipedia/specs/fixture_helper.js
new file mode 100644
index 0000000..7c278c1
--- /dev/null
+++ b/guidelines/wikipedia/specs/fixture_helper.js
@@ -0,0 +1,14 @@
+function fixture(html) {
+ var $article = $('#mw-content-text');
+ if ($article.length === 0) {
+ $article = $('<div id="mw-content-text"></div>');
+ $article.appendTo('body');
+ }
+ var $fix = $(html);
+ $article.append($fix);
+ return $fix;
+}
+
+function teardownFixtures() {
+ $('#mw-content-text').remove();
+}
diff --git a/guidelines/wikipedia/specs/imageAlt_spec.js b/guidelines/wikipedia/specs/imageAlt_spec.js
new file mode 100644
index 0000000..be91e6f
--- /dev/null
+++ b/guidelines/wikipedia/specs/imageAlt_spec.js
@@ -0,0 +1,9 @@
+describe('imageAlt', function() {
+ var imageAlt = rule('Images should include an alt attribute');
+
+ afterEach(teardownFixtures);
+
+ it('succeeds', function() {
+ expect(true).toBe(true);
+ });
+});
diff --git a/guidelines/wikipedia/specs/prelude_helper.js b/guidelines/wikipedia/specs/prelude_helper.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/guidelines/wikipedia/specs/prelude_helper.js
diff --git a/guidelines/wikipedia/specs/pseudoHeadings_spec.js b/guidelines/wikipedia/specs/pseudoHeadings_spec.js
new file mode 100644
index 0000000..effd5e9
--- /dev/null
+++ b/guidelines/wikipedia/specs/pseudoHeadings_spec.js
@@ -0,0 +1,17 @@
+describe('pseudoHeadings', function() {
+ var pseudo = rule('Do not make pseudo-headings');
+
+ afterEach(teardownFixtures);
+
+ it('does not allow paragraphs with all bold text', function() {
+ var $p = fixture('<p><b>pseudo heading</b></p>');
+ var results = run(pseudo);
+ expect(results.errors.length).toEqual(1);
+ expect(results.errors[0].element).toEqual($p.find('b').get(0));
+ });
+
+ it('permits paragraphs that include bold and non-bold text', function() {
+ fixture('<p><b>this paragraph</b> contains non-bold text</p>');
+ expect(run(pseudo).errors.length).toEqual(0);
+ });
+});
diff --git a/guidelines/wikipedia/specs/rule_helper.js b/guidelines/wikipedia/specs/rule_helper.js
new file mode 100644
index 0000000..45bcd60
--- /dev/null
+++ b/guidelines/wikipedia/specs/rule_helper.js
@@ -0,0 +1,22 @@
+function run(rule) {
+ var warnings = [];
+ var errors = [];
+ rule({
+ warning: function(msg, elem) {
+ warnings.push({
+ message: msg,
+ element: elem
+ });
+ },
+ error: function(msg, elem) {
+ errors.push({
+ message: msg,
+ element: elem
+ });
+ }
+ });
+ return {
+ warnings: warnings,
+ errors: errors
+ };
+}
diff --git a/guidelines/wikipedia/specs/spaceBetweenListItems_spec.js b/guidelines/wikipedia/specs/spaceBetweenListItems_spec.js
new file mode 100644
index 0000000..6ea8a83
--- /dev/null
+++ b/guidelines/wikipedia/specs/spaceBetweenListItems_spec.js
@@ -0,0 +1,29 @@
+describe('spaceBetweenListItems', function() {
+ var space = rule('Do not separate list items with blank lines');
+
+ afterEach(teardownFixtures);
+
+ it('warns of adjacent bullet lists that each have a single item', function() {
+ fixture('<ul><li>foo</li></ul> <ul><li>bar</li></ul>');
+ fixture('<ol><li>foo</li></ol> <ol><li>bar</li></ol>');
+ var results = run(space);
+ expect(results.warnings.length).toEqual(2);
+ });
+
+ it('permits adjacent lists of different types with a single item each', function() {
+ fixture('<ul><li>foo</li></ul> <ol><li>bar</li></ol>');
+ expect(run(space).warnings.length).toEqual(0);
+ });
+
+ it('warns of adjacent description lists that each have a single dt/dd pair', function() {
+ fixture('<dl><dt>foo</dt><dd>1</dd></dl> <dl><dt>bar</dt><dd>2</dd></dl>');
+ expect(run(space).warnings.length).toEqual(1);
+ });
+
+ it('does not warn of adjacent description lists with a single dd or dt', function() {
+ fixture('<dl><dt>baz</dt><dd>nao</dd></dl>');
+ fixture('<dl><dd>Hi there!</dd></dl>');
+ fixture('<dl><dt>title</dt></dl>');
+ expect(run(space).warnings.length).toEqual(0);
+ });
+});