From ba9015b07d229ba195e7a9a3f23c3b038374c88c Mon Sep 17 00:00:00 2001
From: Klap-in <klapinklapin@gmail.com>
Date: Tue, 21 May 2013 21:32:54 +0200
Subject: tests for fetch.php of external files

---
 .../lib/exe/fetch_statuscodes_external.test.php    | 116 +++++++++++++++++++++
 1 file changed, 116 insertions(+)
 create mode 100644 _test/tests/lib/exe/fetch_statuscodes_external.test.php

(limited to '_test/tests/lib')

diff --git a/_test/tests/lib/exe/fetch_statuscodes_external.test.php b/_test/tests/lib/exe/fetch_statuscodes_external.test.php
new file mode 100644
index 000000000..1a2164828
--- /dev/null
+++ b/_test/tests/lib/exe/fetch_statuscodes_external.test.php
@@ -0,0 +1,116 @@
+<?php
+
+/**
+ * @group internet
+ */
+class fetch_statuscodes_external_test extends DokuWikiTest {
+
+    private $media = 'http://www.google.com/images/srpr/logo3w.png'; //used in media_get_from_url test too
+    private $width = 200;
+    private $height = 0;
+
+    function setUp() {
+
+        header('X-Test: check headers working');
+        $header_check = function_exists('xdebug_get_headers') ? xdebug_get_headers() : headers_list();
+        if (empty($header_check)) {
+            $this->markTestSkipped('headers not returned, perhaps your sapi does not return headers, try xdebug');
+        } else {
+            header_remove('X-Test');
+        }
+
+        parent::setUp();
+
+        global $conf;
+        $conf['fetchsize'] = 500*1024; //500kb
+        $conf['xsendfile'] = 0;
+
+        global $MIME, $EXT, $CACHE, $INPUT;    // variables fetch creates in global scope -- should this be in fetch?
+    }
+
+    function getUri($hash=null) {
+        $w = $this->width ? 'w='.$this->width.'&' : '';
+        $h = $this->height ? 'h='.$this->height.'&' : '';
+        if($hash === null) {
+            $hash = 'hash='.substr(md5(auth_cookiesalt().$this->media), 0, 6).'&';
+        }
+
+        return '/lib/exe/fetch.php?'.$hash.$w.$h.'{%token%}media='.rawurlencode($this->media);
+    }
+
+    function fetchResponse($token, $hash=null){
+        $request = new TestRequest();
+        return $request->get(array(),str_replace('{%token%}',$token,$this->getUri($hash)));
+    }
+
+    /**
+     * modified image request with invalid hash
+     * expect: 412 status code
+     */
+    function test_invalid_hash() {
+        $invalid_hash = 'hash='.substr(md5(auth_cookiesalt().'junk'), 0, 6).'&';
+        $token = 'tok='.media_get_token($this->media, $this->width, $this->height).'&';
+
+        $this->assertEquals(412,$this->fetchResponse($token, $invalid_hash)->getStatusCode());
+
+    }
+
+    /**
+     *  modified image request with valid token
+     *  expect: header with mime-type
+     *  expect: content
+     *  expect: no error response
+     */
+    function test_valid_token(){
+        $valid_token = 'tok='.media_get_token($this->media, $this->width, $this->height).'&';
+
+        $response = $this->fetchResponse($valid_token);
+        $this->assertTrue((bool)$response->getHeader('Content-Type'));
+        $this->assertTrue((bool)($response->getContent()));
+
+        $status_code = $response->getStatusCode();
+        $this->assertTrue(is_null($status_code) || (200 == $status_code));
+    }
+
+    /**
+     *  modified image request with invalid token
+     *  expect: 412 status code
+     */
+    function test_invalid_token(){
+        $invalid_token = 'tok='.media_get_token('junk',200,100).'&';
+        $this->assertEquals(412,$this->fetchResponse($invalid_token)->getStatusCode());
+    }
+
+    /**
+     *  modified image request with no token
+     *  expect: 412 status code
+     */
+    function test_missing_token(){
+        $no_token = '';
+        $this->assertEquals(412,$this->fetchResponse($no_token)->getStatusCode());
+    }
+
+    /**
+     *  native image request which doesn't require a token
+     *  try: with a token & without a token
+     *  expect: (for both) header with mime-type, content matching source image filesize & no error response
+     */
+    function test_no_token_required(){
+        $this->width = $this->height = 0;   // no width & height, means image request at native dimensions
+        $any_token = 'tok='.media_get_token('junk',200,100).'&';
+        $no_token = '';
+        $file = media_get_from_URL($this->media,'png', -1);
+        $bytes = filesize($file);
+
+        foreach(array($any_token, $no_token) as $token) {
+            $response = $this->fetchResponse($token);
+            $this->assertTrue((bool)$response->getHeader('Content-Type'));
+            $this->assertEquals(strlen($response->getContent()), $bytes);
+
+            $status_code = $response->getStatusCode();
+            $this->assertTrue(is_null($status_code) || (200 == $status_code));
+        }
+    }
+
+}
+//Setup VIM: ex: et ts=4 :
-- 
cgit v1.2.3


From a38a6f25d7e46f47a8f358bb16c766f5b96dae45 Mon Sep 17 00:00:00 2001
From: Klap-in <klapinklapin@gmail.com>
Date: Tue, 21 May 2013 21:41:40 +0200
Subject: fix some minor typos in fetch_imagetoken.test.php

---
 _test/tests/lib/exe/fetch_imagetoken.test.php | 44 +++++++++++++--------------
 1 file changed, 22 insertions(+), 22 deletions(-)

(limited to '_test/tests/lib')

diff --git a/_test/tests/lib/exe/fetch_imagetoken.test.php b/_test/tests/lib/exe/fetch_imagetoken.test.php
index 9e5b6e4a2..99e642557 100644
--- a/_test/tests/lib/exe/fetch_imagetoken.test.php
+++ b/_test/tests/lib/exe/fetch_imagetoken.test.php
@@ -23,10 +23,10 @@ class fetch_imagetoken_test extends DokuWikiTest {
         parent::setUp();
 
         global $conf;
-        $conf['sendfile'] = 0;
+        $conf['xsendfile'] = 0;
 
         global $MIME, $EXT, $CACHE, $INPUT;    // variables fetch creates in global scope -- should this be in fetch?
-    }
+    }
 
     function getUri() {
        $w = $this->width ? 'w='.$this->width.'&' : '';
@@ -39,14 +39,14 @@ class fetch_imagetoken_test extends DokuWikiTest {
         $request = new TestRequest();
         return $request->get(array(),str_replace('{%token%}',$token,$this->getUri()));
     }
-
-    /**
+
+    /**
      *  modified image request with valid token
      *  expect: header with mime-type
      *  expect: content
      *  expect: no error response
-     */
-    function test_valid_token(){
+     */
+    function test_valid_token(){
         $valid_token = 'tok='.media_get_token($this->media, $this->width, $this->height).'&';
         $response = $this->fetchResponse($valid_token);
         $this->assertTrue((bool)$response->getHeader('Content-Type'));
@@ -54,24 +54,24 @@ class fetch_imagetoken_test extends DokuWikiTest {
         
         $status_code = $response->getStatusCode();
         $this->assertTrue(is_null($status_code) || (200 == $status_code));
-    }
-    
-    /**
+    }
+    
+    /**
      *  modified image request with invalid token
-     *  expect: 412 status code
-     */
-    function test_invalid_token(){
-        $invalid_token = 'tok='.media_get_token('junk',200,100).'&';
-        $this->assertEquals(412,$this->fetchResponse($invalid_token)->getStatusCode());
-    }
-    
-    /**
-     *  modified image request with no token
      *  expect: 412 status code
-     */
-    function test_missing_token(){
-        $no_token = '';
-        $this->assertEquals(412,$this->fetchResponse($notoken)->getStatusCode());
+     */
+    function test_invalid_token(){
+        $invalid_token = 'tok='.media_get_token('junk',200,100).'&';
+        $this->assertEquals(412,$this->fetchResponse($invalid_token)->getStatusCode());
+    }
+    
+    /**
+     *  modified image request with no token
+     *  expect: 412 status code
+     */
+    function test_missing_token(){
+        $no_token = '';
+        $this->assertEquals(412,$this->fetchResponse($no_token)->getStatusCode());
     }
 
     /**
-- 
cgit v1.2.3


From fa3ed26bfbafa4d05ec77a799259d4a46baadd9a Mon Sep 17 00:00:00 2001
From: Klap-in <klapinklapin@gmail.com>
Date: Sun, 9 Jun 2013 22:16:08 +0200
Subject: update hashes in tests

---
 _test/tests/lib/exe/fetch_statuscodes_external.test.php | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

(limited to '_test/tests/lib')

diff --git a/_test/tests/lib/exe/fetch_statuscodes_external.test.php b/_test/tests/lib/exe/fetch_statuscodes_external.test.php
index 1a2164828..bd7b2f93b 100644
--- a/_test/tests/lib/exe/fetch_statuscodes_external.test.php
+++ b/_test/tests/lib/exe/fetch_statuscodes_external.test.php
@@ -32,9 +32,8 @@ class fetch_statuscodes_external_test extends DokuWikiTest {
         $w = $this->width ? 'w='.$this->width.'&' : '';
         $h = $this->height ? 'h='.$this->height.'&' : '';
         if($hash === null) {
-            $hash = 'hash='.substr(md5(auth_cookiesalt().$this->media), 0, 6).'&';
+            $hash = 'hash='.substr(PassHash::hmac('md5', $this->media, auth_cookiesalt()), 0, 6).'&';
         }
-
         return '/lib/exe/fetch.php?'.$hash.$w.$h.'{%token%}media='.rawurlencode($this->media);
     }
 
@@ -48,7 +47,7 @@ class fetch_statuscodes_external_test extends DokuWikiTest {
      * expect: 412 status code
      */
     function test_invalid_hash() {
-        $invalid_hash = 'hash='.substr(md5(auth_cookiesalt().'junk'), 0, 6).'&';
+        $invalid_hash = 'hash='.substr(PassHash::hmac('md5', 'junk', auth_cookiesalt()), 0, 6).'&';
         $token = 'tok='.media_get_token($this->media, $this->width, $this->height).'&';
 
         $this->assertEquals(412,$this->fetchResponse($token, $invalid_hash)->getStatusCode());
-- 
cgit v1.2.3


From 4002c084d5e2ffc82739870cb9f107644d9787ff Mon Sep 17 00:00:00 2001
From: Klap-in <klapinklapin@gmail.com>
Date: Thu, 1 Aug 2013 23:05:18 +0200
Subject: Updated tests, removed hash

---
 .../lib/exe/fetch_statuscodes_external.test.php    | 94 ++++++++++------------
 1 file changed, 43 insertions(+), 51 deletions(-)

(limited to '_test/tests/lib')

diff --git a/_test/tests/lib/exe/fetch_statuscodes_external.test.php b/_test/tests/lib/exe/fetch_statuscodes_external.test.php
index bd7b2f93b..79a45ec93 100644
--- a/_test/tests/lib/exe/fetch_statuscodes_external.test.php
+++ b/_test/tests/lib/exe/fetch_statuscodes_external.test.php
@@ -13,7 +13,7 @@ class fetch_statuscodes_external_test extends DokuWikiTest {
 
         header('X-Test: check headers working');
         $header_check = function_exists('xdebug_get_headers') ? xdebug_get_headers() : headers_list();
-        if (empty($header_check)) {
+        if(empty($header_check)) {
             $this->markTestSkipped('headers not returned, perhaps your sapi does not return headers, try xdebug');
         } else {
             header_remove('X-Test');
@@ -22,50 +22,53 @@ class fetch_statuscodes_external_test extends DokuWikiTest {
         parent::setUp();
 
         global $conf;
-        $conf['fetchsize'] = 500*1024; //500kb
+        $conf['fetchsize'] = 500 * 1024; //500kb
         $conf['xsendfile'] = 0;
 
-        global $MIME, $EXT, $CACHE, $INPUT;    // variables fetch creates in global scope -- should this be in fetch?
+        global $MIME, $EXT, $CACHE, $INPUT; // variables fetch creates in global scope -- should this be in fetch?
     }
 
-    function getUri($hash=null) {
+    function getUri() {
         $w = $this->width ? 'w='.$this->width.'&' : '';
         $h = $this->height ? 'h='.$this->height.'&' : '';
-        if($hash === null) {
-            $hash = 'hash='.substr(PassHash::hmac('md5', $this->media, auth_cookiesalt()), 0, 6).'&';
-        }
-        return '/lib/exe/fetch.php?'.$hash.$w.$h.'{%token%}media='.rawurlencode($this->media);
+        return '/lib/exe/fetch.php?'.$w.$h.'{%token%}media='.rawurlencode($this->media);
     }
 
-    function fetchResponse($token, $hash=null){
+    function fetchResponse($token) {
         $request = new TestRequest();
-        return $request->get(array(),str_replace('{%token%}',$token,$this->getUri($hash)));
+        return $request->get(array(), str_replace('{%token%}', $token, $this->getUri()));
     }
 
     /**
-     * modified image request with invalid hash
-     * expect: 412 status code
+     *  modified image request with valid token
+     *  and not-modified image request with valid token
+     *
+     *  expect: header with mime-type
+     *  expect: content
+     *  expect: no error response
      */
-    function test_invalid_hash() {
-        $invalid_hash = 'hash='.substr(PassHash::hmac('md5', 'junk', auth_cookiesalt()), 0, 6).'&';
-        $token = 'tok='.media_get_token($this->media, $this->width, $this->height).'&';
+    function test_valid_token() {
+        $valid_token_resize = 'tok='.media_get_token($this->media, $this->width, $this->height).'&';
 
-        $this->assertEquals(412,$this->fetchResponse($token, $invalid_hash)->getStatusCode());
+        $this->handlevalidresponse($valid_token_resize);
+
+        //original size
+        $this->width          = $this->height = 0;
+        $valid_token_original = 'tok='.media_get_token($this->media, $this->width, $this->height).'&';
+
+        $this->handlevalidresponse($valid_token_original);
 
     }
 
     /**
-     *  modified image request with valid token
-     *  expect: header with mime-type
-     *  expect: content
-     *  expect: no error response
+     * Performs asserts for valid request
+     *
+     * @param $valid_token
      */
-    function test_valid_token(){
-        $valid_token = 'tok='.media_get_token($this->media, $this->width, $this->height).'&';
-
+    private function handlevalidresponse($valid_token){
         $response = $this->fetchResponse($valid_token);
-        $this->assertTrue((bool)$response->getHeader('Content-Type'));
-        $this->assertTrue((bool)($response->getContent()));
+        $this->assertTrue((bool) $response->getHeader('Content-Type'));
+        $this->assertTrue((bool) ($response->getContent()));
 
         $status_code = $response->getStatusCode();
         $this->assertTrue(is_null($status_code) || (200 == $status_code));
@@ -75,41 +78,30 @@ class fetch_statuscodes_external_test extends DokuWikiTest {
      *  modified image request with invalid token
      *  expect: 412 status code
      */
-    function test_invalid_token(){
-        $invalid_token = 'tok='.media_get_token('junk',200,100).'&';
-        $this->assertEquals(412,$this->fetchResponse($invalid_token)->getStatusCode());
+    function test_invalid_token() {
+        $invalid_tokens = array(
+            'invalid_token_wrongid' => media_get_token('junk', 200, 100),
+            'invalid_token_wrongh'  => media_get_token($this->media, 200, 10),
+            'invalid_token_wrongw'  => media_get_token($this->media, 20, 100),
+            'invalid_token_wrongwh' => media_get_token($this->media, 20, 10)
+        );
+        foreach($invalid_tokens as $invalid_token)
+            $this->assertEquals(412, $this->fetchResponse('tok='.$invalid_token.'&')->getStatusCode());
+
     }
 
     /**
      *  modified image request with no token
+     *  and not modified image with no token
      *  expect: 412 status code
      */
-    function test_missing_token(){
-        $no_token = '';
-        $this->assertEquals(412,$this->fetchResponse($no_token)->getStatusCode());
-    }
-
-    /**
-     *  native image request which doesn't require a token
-     *  try: with a token & without a token
-     *  expect: (for both) header with mime-type, content matching source image filesize & no error response
-     */
-    function test_no_token_required(){
-        $this->width = $this->height = 0;   // no width & height, means image request at native dimensions
-        $any_token = 'tok='.media_get_token('junk',200,100).'&';
+    function test_missing_token() {
         $no_token = '';
-        $file = media_get_from_URL($this->media,'png', -1);
-        $bytes = filesize($file);
 
-        foreach(array($any_token, $no_token) as $token) {
-            $response = $this->fetchResponse($token);
-            $this->assertTrue((bool)$response->getHeader('Content-Type'));
-            $this->assertEquals(strlen($response->getContent()), $bytes);
+        $this->assertEquals(412, $this->fetchResponse($no_token)->getStatusCode());
 
-            $status_code = $response->getStatusCode();
-            $this->assertTrue(is_null($status_code) || (200 == $status_code));
-        }
+        $this->width = $this->height = 0;
+        $this->assertEquals(412, $this->fetchResponse($no_token)->getStatusCode());
     }
-
 }
 //Setup VIM: ex: et ts=4 :
-- 
cgit v1.2.3


From a467e020fa551217347181ffd6915c7d29e6ff59 Mon Sep 17 00:00:00 2001
From: Andreas Gohr <gohr@cosmocode.de>
Date: Tue, 15 Oct 2013 11:35:26 +0200
Subject: Added unit tests for CSS shorthand compression FS#2509

---
 _test/tests/lib/exe/css_css_compress.test.php | 40 +++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

(limited to '_test/tests/lib')

diff --git a/_test/tests/lib/exe/css_css_compress.test.php b/_test/tests/lib/exe/css_css_compress.test.php
index a7c87b6a7..a614ea2fd 100644
--- a/_test/tests/lib/exe/css_css_compress.test.php
+++ b/_test/tests/lib/exe/css_css_compress.test.php
@@ -62,6 +62,46 @@ class css_css_compress_test extends DokuWikiTest {
         $this->assertEquals(css_compress($text), 'a{left:20px;top:20px}');
     }
 
+    function test_shortening() {
+        $input = array(
+            'margin:0em 0em 0em 0em ul.test margin:0em :0em div#FFFFFF {',
+            'margin:  1px 1px 1px 1px;',
+            'padding: 1px 2px 1px 2px;',
+            'margin:  1px 2px 3px 1px;',
+            'padding: 1px 2px 3px 4px;',
+            'margin:  00.00em 0em 01.00px 0em;',
+            'padding: 0010em 0010.00em 00.00em 00.00100em;',
+            'padding: 0010% 0010.00% 00.00% 00.00100xxx;',
+            'padding: 0.0em .0em 0.em 00.00em;',
+            'padding: 01.0em;',
+            'color:   #FFFFFF;',
+            'color:   #777777;',
+            'color:   #123456;',
+            'border:  01.0em solid #ffffff;',
+        );
+
+        $expected = array(
+            'margin:0em 0em 0em 0em ul.test margin:0em :0em div#FFFFFF{',
+            'margin:1px;',
+            'padding:1px 2px;',
+            'margin:1px 2px 3px 1px;',
+            'padding:1px 2px 3px 4px;',
+            'margin:0 0 1px 0;',
+            'padding:10em 10em 0 .001em;',
+            'padding:10% 10% 0 00.00100xxx;',
+            'padding:0;',
+            'padding:1em;',
+            'color:#FFF;',
+            'color:#777;',
+            'color:#123456;',
+            'border:1em solid #fff;',
+        );
+
+        $input = array_map('css_compress', $input);
+
+        $this->assertEquals($expected, $input);
+    }
+
 }
 
 //Setup VIM: ex: et ts=4 :
-- 
cgit v1.2.3


From 5f5982130c1a9b9adb0e294b811327ddcfbd4fef Mon Sep 17 00:00:00 2001
From: Christopher Smith <chris@jalakai.co.uk>
Date: Tue, 5 Nov 2013 20:09:45 +0000
Subject: Improve css_loadfile() tests - use TMP_DIR constant rather than /tmp
 - swap order of parameters in csstest() to match reported 'expected' &
 'actual' - add tests for use of 'url()' in @import - add tests for @import of
 '.less' files (these test will fail per FS#2875)

---
 _test/tests/lib/exe/css_css_loadfile.test.php | 33 +++++++++++++++++++++++++--
 1 file changed, 31 insertions(+), 2 deletions(-)

(limited to '_test/tests/lib')

diff --git a/_test/tests/lib/exe/css_css_loadfile.test.php b/_test/tests/lib/exe/css_css_loadfile.test.php
index c89b69b2c..0aa27b0af 100644
--- a/_test/tests/lib/exe/css_css_loadfile.test.php
+++ b/_test/tests/lib/exe/css_css_loadfile.test.php
@@ -3,13 +3,16 @@
 require_once DOKU_INC.'lib/exe/css.php';
 
 class css_css_loadfile_test extends DokuWikiTest {
+
+    protected $file = '';
+
     public function setUp() {
-        $this->file = tempnam('/tmp', 'css');
+        $this->file = tempnam(TMP_DIR, 'css');
     }
 
     private function csstest($input, $output = null, $location = 'http://www.example.com/') {
         io_saveFile($this->file, $input);
-        $this->assertEquals(css_loadfile($this->file, $location), (is_null($output) ? $input : $output));
+        $this->assertEquals((is_null($output) ? $input : $output), css_loadfile($this->file, $location));
     }
 
     public function test_url_relative() {
@@ -32,11 +35,15 @@ class css_css_loadfile_test extends DokuWikiTest {
     public function test_import_relative() {
         $this->csstest('@import "test/test.png";', '@import "http://www.example.com/test/test.png";');
         $this->csstest('@import \'test/test.png\';', '@import \'http://www.example.com/test/test.png\';');
+        $this->csstest('@import url(test/test.png);', '@import url(http://www.example.com/test/test.png);');
+        $this->csstest('@import url("test/test.png");', '@import url("http://www.example.com/test/test.png");');
     }
 
     public function test_import_absolute() {
         $this->csstest('@import "/test/test.png";');
         $this->csstest('@import \'/test/test.png\';');
+        $this->csstest('@import url(/test/test.png);');
+        $this->csstest('@import url("/test/test.png");');
     }
 
     public function test_import_with_protocol() {
@@ -44,6 +51,28 @@ class css_css_loadfile_test extends DokuWikiTest {
         $this->csstest('@import "https://www.test.com/test/test.png";');
         $this->csstest('@import \'http://www.test.com/test/test.png\';');
         $this->csstest('@import \'https://www.test.com/test/test.png\';');
+        $this->csstest('@import url(http://www.test.com/test/test.png);');
+        $this->csstest('@import url("http://www.test.com/test/test.png");');
+    }
+
+    public function test_less_basic() {
+        $this->csstest('@import "test.less"', '@import "/test.less"');
+        $this->csstest('@import "/test.less"', '@import "/test.less"');
+        $this->csstest('@import url(http://test.less)');
+    }
+
+    // more expected use, where less @import(ed) from e.g. lib/plugins/plugin_name
+    public function test_less_subdirectories() {
+
+        unlink($this->file);
+
+        $dir = TMP_DIR.'/foo/bar';
+        mkdir($dir,0777,true);
+        $this->file = tempnam($dir, 'css');
+
+        $this->csstest('@import "test.less"', '@import "/foo/bar/test.less"');
+        $this->csstest('@import \'test.less\'', '@import \'/foo/bar/test.less\'');
+        $this->csstest('@import url(test.less)', '@import url(/foo/bar/test.less)');
     }
 
     public function tearDown() {
-- 
cgit v1.2.3


From 6d7e4640bed01599dac4bbf5c00b0aff8d3dd4ba Mon Sep 17 00:00:00 2001
From: Christopher Smith <chris@jalakai.co.uk>
Date: Tue, 5 Nov 2013 20:49:53 +0000
Subject: additional tests where for relative path to @import less file

---
 _test/tests/lib/exe/css_css_loadfile.test.php | 3 +++
 1 file changed, 3 insertions(+)

(limited to '_test/tests/lib')

diff --git a/_test/tests/lib/exe/css_css_loadfile.test.php b/_test/tests/lib/exe/css_css_loadfile.test.php
index 0aa27b0af..c336702f8 100644
--- a/_test/tests/lib/exe/css_css_loadfile.test.php
+++ b/_test/tests/lib/exe/css_css_loadfile.test.php
@@ -58,6 +58,7 @@ class css_css_loadfile_test extends DokuWikiTest {
     public function test_less_basic() {
         $this->csstest('@import "test.less"', '@import "/test.less"');
         $this->csstest('@import "/test.less"', '@import "/test.less"');
+        $this->csstest('@import "foo/test.less"', '@import "/foo/test.less"');
         $this->csstest('@import url(http://test.less)');
     }
 
@@ -73,6 +74,8 @@ class css_css_loadfile_test extends DokuWikiTest {
         $this->csstest('@import "test.less"', '@import "/foo/bar/test.less"');
         $this->csstest('@import \'test.less\'', '@import \'/foo/bar/test.less\'');
         $this->csstest('@import url(test.less)', '@import url(/foo/bar/test.less)');
+
+        $this->csstest('@import "abc/test.less"', '@import "/foo/bar/abc/test.less"');
     }
 
     public function tearDown() {
-- 
cgit v1.2.3


From ab1fef6644927b857c64c9c153915d50ef2607f1 Mon Sep 17 00:00:00 2001
From: Christopher Smith <chris@jalakai.co.uk>
Date: Tue, 5 Nov 2013 20:51:07 +0000
Subject: Test to ensure less can parse the @import rewritten by css_loadfile()

This test is horrible, but I believe necessary to ensure that the
@import of less files actually works.

It is horrible as its not a unit test and its not a true functional
test.  It probably implies the code in css_out() should be refactored
to make it easier to test intermediate results.
---
 _test/tests/lib/exe/css_at_import_less.test.php | 78 +++++++++++++++++++++++++
 1 file changed, 78 insertions(+)
 create mode 100644 _test/tests/lib/exe/css_at_import_less.test.php

(limited to '_test/tests/lib')

diff --git a/_test/tests/lib/exe/css_at_import_less.test.php b/_test/tests/lib/exe/css_at_import_less.test.php
new file mode 100644
index 000000000..4a6efcf44
--- /dev/null
+++ b/_test/tests/lib/exe/css_at_import_less.test.php
@@ -0,0 +1,78 @@
+<?php
+
+require_once DOKU_INC.'lib/exe/css.php';
+
+class css_at_import_less_test extends DokuWikiTest {
+
+    protected $file = '';
+    protected $import = '';
+
+    public function setUpFiles($subdir = '') {
+
+        $dir = TMP_DIR . $subdir;
+        if (!is_dir($dir)) {
+            mkdir($dir, 0777, true);
+        }
+        if (!is_dir($dir)) {
+            $this->markTestSkipped('Could not create directory.');
+        }
+
+        $this->file = tempnam($dir, 'css');
+
+        $import = '';
+        do {
+            if ($import) unlink($import);
+            $import = tempnam($dir, 'less');
+            $ok = rename($import, $import.'.less');
+        } while (!$ok);
+
+        $this->import = $import.'.less';
+    }
+
+    private function csstest($input, $expected_css, $expected_less) {
+        $location = "http://test.com/";
+        io_saveFile($this->file, $input);
+        $css = css_loadfile($this->file, $location);
+        $less = css_parseless($css);
+        $this->assertEquals($expected_css, $css);
+        $this->assertEquals($expected_less, $less);
+    }
+
+    public function test_basic() {
+        $this->setUpFiles();
+
+        $import = preg_replace('#(^.*[/])#','',$this->import);
+        $in_css = '@import "'.$import.'";';
+        $in_less = '@foo: "bar";
+content: @foo;';
+
+        $expected_css = '@import "/'.$import.'";';
+        $expected_less = 'content: "bar";';
+
+        io_saveFile($this->import, $in_less);
+        $this->csstest($in_css, $expected_css, $expected_less);
+    }
+
+    public function test_subdirectory() {
+        $this->setUpFiles('/foo/bar');
+
+        $import = preg_replace('#(^.*[/])#','',$this->import);
+        $in_css = '@import "'.$import.'";';
+        $in_less = '@foo: "bar";
+content: @foo;';
+
+        $expected_css = '@import "/foo/bar/'.$import.'";';
+        $expected_less = 'content: "bar";';
+
+        io_saveFile($this->import, $in_less);
+        $this->csstest($in_css, $expected_css, $expected_less);
+    }
+
+    public function tearDown() {
+        unlink($this->file);
+        unlink($this->import);
+        unset($this->file, $this->import);
+    }
+}
+
+//Setup VIM: ex: et ts=4 sw=4 :
-- 
cgit v1.2.3


From 28ad2ce3c7b348afcc1efbae4fc64a7ea31585ee Mon Sep 17 00:00:00 2001
From: Christopher Smith <chris@jalakai.co.uk>
Date: Sun, 17 Nov 2013 21:18:25 +0000
Subject: ensure css loadfile test doesn't try to create a directory (and fail)
 if the directory already exists

---
 _test/tests/lib/exe/css_css_loadfile.test.php | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

(limited to '_test/tests/lib')

diff --git a/_test/tests/lib/exe/css_css_loadfile.test.php b/_test/tests/lib/exe/css_css_loadfile.test.php
index c336702f8..624becd29 100644
--- a/_test/tests/lib/exe/css_css_loadfile.test.php
+++ b/_test/tests/lib/exe/css_css_loadfile.test.php
@@ -68,7 +68,13 @@ class css_css_loadfile_test extends DokuWikiTest {
         unlink($this->file);
 
         $dir = TMP_DIR.'/foo/bar';
-        mkdir($dir,0777,true);
+        if (!is_dir($dir)) {
+            mkdir($dir, 0777, true);
+        }
+        if (!is_dir($dir)) {
+            $this->markTestSkipped('Could not create directory.');
+        }
+
         $this->file = tempnam($dir, 'css');
 
         $this->csstest('@import "test.less"', '@import "/foo/bar/test.less"');
-- 
cgit v1.2.3