aboutsummaryrefslogtreecommitdiff
path: root/vendors/lessphp/tests/test.php
diff options
context:
space:
mode:
authorSilvio Rhatto <rhatto@riseup.net>2014-03-15 14:42:42 -0300
committerSilvio Rhatto <rhatto@riseup.net>2014-03-15 14:42:42 -0300
commit551497ef94f6239b109316d8fab32f0909b13f73 (patch)
tree236615e9881988ce05f40583ff891bf0fcef2c14 /vendors/lessphp/tests/test.php
downloadelgg-551497ef94f6239b109316d8fab32f0909b13f73.tar.gz
elgg-551497ef94f6239b109316d8fab32f0909b13f73.tar.bz2
Squashed 'mod/less/' content from commit 380edad
git-subtree-dir: mod/less git-subtree-split: 380edadb3a5e524a8e6ef6df063b678f2f00516f
Diffstat (limited to 'vendors/lessphp/tests/test.php')
-rw-r--r--vendors/lessphp/tests/test.php190
1 files changed, 190 insertions, 0 deletions
diff --git a/vendors/lessphp/tests/test.php b/vendors/lessphp/tests/test.php
new file mode 100644
index 000000000..629fe0153
--- /dev/null
+++ b/vendors/lessphp/tests/test.php
@@ -0,0 +1,190 @@
+#!/usr/bin/env php
+<?php
+error_reporting(E_ALL);
+
+/**
+ * Go through all files matching pattern in input directory
+ * and compile them, then compare them to paired file in
+ * output directory.
+ */
+$difftool = 'diff -b -B -t -u';
+$input = array(
+ 'dir' => 'inputs',
+ 'glob' => '*.less',
+);
+
+$output = array(
+ 'dir' => 'outputs',
+ 'filename' => '%s.css',
+);
+
+
+$prefix = strtr(realpath(dirname(__FILE__)), '\\', '/');
+require $prefix.'/../lessc.inc.php';
+
+$compiler = new lessc();
+$compiler->importDir = array($input['dir'].'/test-imports');
+
+$fa = 'Fatal Error: ';
+if (php_sapi_name() != 'cli') {
+ exit($fa.$argv[0].' must be run in the command line.');
+}
+
+$opts = getopt('hCd::g');
+
+if ($opts === false || isset($opts['h'])) {
+ echo <<<EOT
+Usage: ./test.php [options] [searchstring]
+
+where [options] can be a mix of these:
+
+ -h Show this help message and exit.
+
+ -d=[difftool] Show the diff of the actual output vs. the reference when a
+ test fails; uses 'diff -b -B -t -u' by default.
+
+ The test is aborted after the first failure report, unless
+ you also specify the '-g' option ('go on').
+
+ -g Continue executing the other tests when a test fails and
+ option '-d' is active.
+
+ -C Regenerate ('compile') the reference output files from the
+ given inputs.
+
+ WARNING: ONLY USE THIS OPTION WHEN YOU HAVE ASCERTAINED
+ THAT lessphp PROCESSES ALL TESTS CORRECTLY!
+
+The optional [searchstring] is used to filter the input files: only tests
+which have filename(s) containing the specified searchstring will be
+executed. I.e. the corresponding glob pattern is '*[searchstring]*.less'.
+
+The script EXIT CODE is the number of failed tests (with a maximum of 255),
+0 on success and 1 when this help message is shown. This aids in integrating
+this script in larger (user defined) shell test scripts.
+
+
+Examples of use:
+
+- Test the full test set:
+ ./test.php
+
+- Run only the mixin tests:
+ ./test.php mixin
+
+- Use a custom diff tool to show diffs for failing tests
+ ./test.php -d=meld
+
+EOT;
+ exit(1);
+}
+
+$input['dir'] = $prefix.'/'.$input['dir'];
+$output['dir'] = $prefix.'/'.$output['dir'];
+if (!is_dir($input['dir']) || !is_dir($output['dir']))
+ exit($fa." both input and output directories must exist\n");
+
+$exe = array_shift($argv); // remove filename
+// get the first non flag as search string
+$searchString = null;
+foreach ($argv as $a) {
+ if (strlen($a) > 0 && $a{0} != '-') {
+ $searchString = $a;
+ break;
+ }
+}
+
+$tests = array();
+$matches = glob($input['dir'].'/'.(!is_null($searchString) ? '*'.$searchString : '' ).$input['glob']);
+if ($matches) {
+ foreach ($matches as $fname) {
+ extract(pathinfo($fname)); // for $filename, from php 5.2
+ $tests[] = array(
+ 'in' => $fname,
+ 'out' => $output['dir'].'/'.sprintf($output['filename'], $filename),
+ );
+ }
+}
+
+$count = count($tests);
+$compiling = isset($opts["C"]);
+$continue_when_test_fails = isset($opts["g"]);
+$showDiff = isset($opts["d"]);
+if ($showDiff && !empty($opts["d"])) {
+ $difftool = $opts["d"];
+}
+
+echo ($compiling ? "Compiling" : "Running")." $count test".($count == 1 ? '' : 's').":\n";
+
+function dump($msgs, $depth = 1, $prefix=" ") {
+ if (!is_array($msgs)) $msgs = array($msgs);
+ foreach ($msgs as $m) {
+ echo str_repeat($prefix, $depth).' - '.$m."\n";
+ }
+}
+
+$fail_prefix = " ** ";
+
+$fail_count = 0;
+$i = 1;
+foreach ($tests as $test) {
+ printf(" [Test %04d/%04d] %s -> %s\n", $i, $count, basename($test['in']), basename($test['out']));
+
+ try {
+ ob_start();
+ $parsed = trim($compiler->parse(file_get_contents($test['in'])));
+ ob_end_clean();
+ } catch (exception $e) {
+ dump(array(
+ "Failed to compile input, reason:",
+ $e->getMessage(),
+ "Aborting"
+ ), 1, $fail_prefix);
+ break;
+ }
+
+ if ($compiling) {
+ file_put_contents($test['out'], $parsed);
+ } else {
+ if (!is_file($test['out'])) {
+ dump(array(
+ "Failed to find output file: $test[out]",
+ "Maybe you forgot to compile tests?",
+ "Aborting"
+ ), 1, $fail_prefix);
+ break;
+ }
+ $expected = trim(file_get_contents($test['out']));
+
+ // don't care about CRLF vs LF change (DOS/Win vs. UNIX):
+ $expected = trim(str_replace("\r\n", "\n", $expected));
+ $parsed = trim(str_replace("\r\n", "\n", $parsed));
+
+ if ($expected != $parsed) {
+ $fail_count++;
+ if ($showDiff) {
+ dump("Failed:", 1, $fail_prefix);
+ $tmp = $test['out'].".tmp";
+ file_put_contents($tmp, $parsed);
+ system($difftool.' '.$test['out'].' '.$tmp);
+ unlink($tmp);
+
+ if (!$continue_when_test_fails) {
+ dump("Aborting");
+ break;
+ } else {
+ echo "===========================================================================\n";
+ }
+ } else {
+ dump("Failed, run with -d flag to view diff", 1, $fail_prefix);
+ }
+ } else {
+ dump("Passed");
+ }
+ }
+
+ $i++;
+}
+
+exit($fail_count > 255 ? 255 : $fail_count);
+?>