diff options
author | Benjamin Jones <bjones@galois.com> | 2013-06-12 11:01:39 -0700 |
---|---|---|
committer | Benjamin Jones <bjones@galois.com> | 2013-06-12 11:01:39 -0700 |
commit | 14c44a0c44fea955b228ab0da69581898fb7dc5f (patch) | |
tree | f83712cc652c9d2076d1ab69f550d1133c742630 | |
parent | b57041814a28c0915aa140130ee43e7ea71013a9 (diff) | |
parent | a881442e882d7a731615abac5c01b065527bea21 (diff) |
Merge branch 'master' into colorutils
8 files changed, 94 insertions, 26 deletions
diff --git a/exampleData/ruleSets/accessibility/accessibility.json b/exampleData/ruleSets/accessibility/accessibility.json index ba7c7aa..4c2a940 100644 --- a/exampleData/ruleSets/accessibility/accessibility.json +++ b/exampleData/ruleSets/accessibility/accessibility.json @@ -2,6 +2,8 @@ , "description": "Web Accessibility Guidelines" , "rules": [ "titleNonEmpty.js", "headingExists.js", - "imagesAltText.js" + "imagesAltText.js", + "colorBrightness.js", + "colorDifference.js" ] } diff --git a/exampleData/ruleSets/accessibility/colorBrightness.js b/exampleData/ruleSets/accessibility/colorBrightness.js new file mode 100644 index 0000000..737e0d6 --- /dev/null +++ b/exampleData/ruleSets/accessibility/colorBrightness.js @@ -0,0 +1,39 @@ +exports.name = "colorBrightness"; + +exports.description = "Elements should provide sufficient color brightness " + + "difference"; + +exports.rule = function() { + + var MIN_DIFF = 125; // http://www.w3.org/TR/2000/WD-AERT-20000426#color + + /** + * Return a weighted average of RGB values. See + * http://www.w3.org/TR/2000/WD-AERT-20000426#color + * Input is an RGB color object: { r: <r>, g: <g>, b: <b> }. + */ + var bright = function (c) { + return (c.r*299 + c.g*587 + c.b*114) / 1000.0; + }; + + /** + * Return the absolute difference between brightnesses of the + * given RGB color objects. + * Input is two RGB color objects (see `bright`). + */ + var brightDiff = function (c1, c2) { + return Math.abs(bright(c1) - bright(c2)); + }; + + var that = this; + fiveui.query('*').each(function (i) { + var fg = fiveui.color.colorToRGB($(this).attr('color')); + var bg = fiveui.color.colorToRGB($(this).attr('background')); + if (fg && bg) { + var diff = brightDiff(fg, bg); + if (diff < MIN_DIFF) { + that.report('Element has poor brightness difference: ' + diff, e); + } + } + }); +}; diff --git a/exampleData/ruleSets/accessibility/colorDifference.js b/exampleData/ruleSets/accessibility/colorDifference.js new file mode 100644 index 0000000..c7a581d --- /dev/null +++ b/exampleData/ruleSets/accessibility/colorDifference.js @@ -0,0 +1,31 @@ +exports.name = "colorDifference"; + +exports.description = "Elements should provide sufficient color difference"; + +exports.rule = function() { + + var MIN_COLOR_DIFF = 500; // http://www.w3.org/TR/2000/WD-AERT-20000426#color + + /** + * Return the absolute "color difference" between two * given RGB color + * objects. + * Input is two RGB color objects. + */ + var colorDiff = function (c1, c2) { + return Math.abs(c1.r - c2.r) + + Math.abs(c1.g - c2.g) + + Math.abs(c1.b - c2.b); + }; + + var that = this; + fiveui.query('*').each(function (i) { + var fg = fiveui.color.colorToRGB($(this).attr('color')); + var bg = fiveui.color.colorToRGB($(this).attr('background')); + if (fg && bg) { + var diff = colorDiff(fg, bg); + if (diff < MIN_DIFF) { + that.report('Element has poor color difference: ' + diff, e); + } + } + }); +}; diff --git a/src/batchtools/headless/src/main/java/com/galois/fiveui/BatchRunner.java b/src/batchtools/headless/src/main/java/com/galois/fiveui/BatchRunner.java index 9f3f301..7fb541c 100644 --- a/src/batchtools/headless/src/main/java/com/galois/fiveui/BatchRunner.java +++ b/src/batchtools/headless/src/main/java/com/galois/fiveui/BatchRunner.java @@ -51,20 +51,14 @@ public class BatchRunner { private JavascriptExecutor _exe; private String _root; // FiveUI root directory + private static final String JS_SRC_ROOT = "src/js/"; + // Hard coded JS files, relative to the FiveUI root directory. - private static final String DATA_DIR = "contexts/data/"; - private static final String J_QUERY_JS = DATA_DIR - + "lib/jquery/jquery.js"; - private static final String PRELUDE_JS = DATA_DIR - + "fiveui/injected/prelude.js"; - private static final String MD5_JS = DATA_DIR - + "lib/jshash/md5.js"; - private static final String JQUERY_PLUGIN_JS = DATA_DIR - + "fiveui/injected/jquery-plugins.js"; - private static final String SEL_INJECTED_COMPUTE_JS = DATA_DIR + - "/fiveui/selenium/selenium-injected-compute.js"; - private static final String INJECTED_COMPUTE_JS = DATA_DIR + - "/fiveui/injected/fiveui-injected-compute.js"; + private static final String J_QUERY_JS = "lib/jquery/jquery.js"; + private static final String PRELUDE_JS = "fiveui/injected/prelude.js"; + private static final String MD5_JS = "lib/md5.js"; + private static final String JQUERY_PLUGIN_JS = "fiveui/injected/jquery-plugins.js"; + private static final String SEL_INJECTED_COMPUTE_JS = "selenium/selenium-injected-compute.js"; private static Logger logger = Logger.getLogger("com.galois.fiveui.BatchRunner"); @@ -274,12 +268,12 @@ public class BatchRunner { */ private String wrapRule(RuleSet ruleSet) throws IOException { String injected = ""; - injected += Utils.readFile(_root + SEL_INJECTED_COMPUTE_JS); - injected += Utils.readFile(_root + J_QUERY_JS); - injected += Utils.readFile(_root + PRELUDE_JS); - injected += Utils.readFile(_root + MD5_JS); - injected += Utils.readFile(_root + JQUERY_PLUGIN_JS); - injected += Utils.readFile(_root + INJECTED_COMPUTE_JS); + injected += Utils.readFile(_root + JS_SRC_ROOT + SEL_INJECTED_COMPUTE_JS); + injected += Utils.readFile(_root + JS_SRC_ROOT + J_QUERY_JS); + injected += Utils.readFile(_root + JS_SRC_ROOT + PRELUDE_JS); + injected += Utils.readFile(_root + JS_SRC_ROOT + MD5_JS); + injected += Utils.readFile(_root + JS_SRC_ROOT + JQUERY_PLUGIN_JS); + //injected += Utils.readFile(_root + JS_SRC_ROOT + INJECTED_COMPUTE_JS); injected += "return fiveui.selPort.send('SetRules', " + ruleSet + ");"; diff --git a/src/batchtools/headless/src/test/java/com/galois/fiveui/BatchExecutorTest.java b/src/batchtools/headless/src/test/java/com/galois/fiveui/BatchExecutorTest.java index f7f593f..861391f 100644 --- a/src/batchtools/headless/src/test/java/com/galois/fiveui/BatchExecutorTest.java +++ b/src/batchtools/headless/src/test/java/com/galois/fiveui/BatchExecutorTest.java @@ -25,7 +25,6 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.net.BindException; -import junit.framework.Assert; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Level; @@ -35,6 +34,7 @@ import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; +import org.junit.Assert; import com.google.common.collect.ImmutableList; diff --git a/src/batchtools/headless/src/test/java/com/galois/fiveui/CrawlTest.java b/src/batchtools/headless/src/test/java/com/galois/fiveui/CrawlTest.java index 0f932c2..e7ab35d 100644 --- a/src/batchtools/headless/src/test/java/com/galois/fiveui/CrawlTest.java +++ b/src/batchtools/headless/src/test/java/com/galois/fiveui/CrawlTest.java @@ -8,7 +8,7 @@ import java.util.List; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; -import junit.framework.Assert; +import org.junit.Assert; import org.apache.log4j.Level; import org.apache.log4j.LogManager; diff --git a/src/batchtools/headless/src/test/java/com/galois/fiveui/HeadlessTest.java b/src/batchtools/headless/src/test/java/com/galois/fiveui/HeadlessTest.java index 804d9f6..6db72ba 100644 --- a/src/batchtools/headless/src/test/java/com/galois/fiveui/HeadlessTest.java +++ b/src/batchtools/headless/src/test/java/com/galois/fiveui/HeadlessTest.java @@ -5,7 +5,7 @@ package com.galois.fiveui; import java.io.IOException; -import junit.framework.Assert; +import org.junit.Assert; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Level; diff --git a/src/batchtools/headless/src/test/java/com/galois/fiveui/ReporterTest.java b/src/batchtools/headless/src/test/java/com/galois/fiveui/ReporterTest.java index 39a8e5c..b30d331 100644 --- a/src/batchtools/headless/src/test/java/com/galois/fiveui/ReporterTest.java +++ b/src/batchtools/headless/src/test/java/com/galois/fiveui/ReporterTest.java @@ -19,14 +19,16 @@ */ package com.galois.fiveui; -import static org.junit.Assert.*; +import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; + import org.junit.Test; import org.openqa.selenium.WebDriver; import com.google.common.collect.ImmutableList; +import com.google.common.io.Files; public class ReporterTest { @@ -47,8 +49,8 @@ public class ReporterTest { @Test public void testSummaryPage() throws IOException { - //File tmpPath = Files.createTempDir(); - File tmpPath = new File("/tmp/"); + File tmpPath = Files.createTempDir(); + //File tmpPath = new File("/tmp/"); System.out.println("Writing test summary page to: " + tmpPath.toString() + File.separator); ImmutableList<Result> r = ImmutableList.of( new Result(ResType.Pass, (WebDriver) null, "OK", "http://nonexistant", "test rule 1", "a desc or test rule 1", "problem!"), |