xref: /dokuwiki/_test/tests/lib/exe/css_at_import_less.test.php (revision 7b0d379feba01568ae5ba3f1bf3f95b96ce4a02e)
1<?php
2
3require_once DOKU_INC.'lib/exe/css.php';
4
5class css_at_import_less_test extends DokuWikiTest {
6
7    protected $file = '';
8    protected $import = '';
9
10    public function setUpFiles($subdir = '') {
11
12        $dir = TMP_DIR . $subdir;
13        if (!is_dir($dir)) {
14            mkdir($dir, 0777, true);
15        }
16        if (!is_dir($dir)) {
17            throw new Exception('Could not create directory.');
18        }
19
20        $this->file = tempnam($dir, 'css');
21
22        $import = '';
23        if ($import) unlink($import);
24        $import = tempnam($dir, 'less');
25        if (rename($import, $import.'.less') === false) {
26            throw new Exception('failed to rename file');
27        };
28
29        $this->import = $import.'.less';
30    }
31
32    private function csstest($input, $expected_css, $expected_less) {
33        $location = "http://test.com/";
34        io_saveFile($this->file, $input);
35        $css = css_loadfile($this->file, $location);
36        $less = css_parseless($css);
37        $this->assertEquals($expected_css, w2u($css)); // w2u() for test pass, less works with both slashes on Windows OS
38        $this->assertEquals($expected_less, $less);
39    }
40
41    public function test_basic() {
42        $this->setUpFiles();
43
44        // remove path
45        if (isWindows()) {
46            $import = preg_replace('#(^.*[\\\\])#','',$this->import);
47        } else {
48            $import = preg_replace('#(^.*[/])#','',$this->import);
49        }
50
51        $in_css = '@import "'.$import.'";';
52        $in_less = '@foo: "bar";
53content: @foo;';
54
55        $expected_css = '@import "/'.$import.'";';
56        $expected_less = 'content: "bar";';
57
58        io_saveFile($this->import, $in_less);
59        $this->csstest($in_css, $expected_css, $expected_less);
60    }
61
62    public function test_subdirectory() {
63        $this->setUpFiles('/foo/bar');
64
65        // remove path
66        if (isWindows()) {
67            $import = preg_replace('#(^.*[\\\\])#','',$this->import);
68        } else {
69            $import = preg_replace('#(^.*[/])#','',$this->import);
70        }
71
72        $in_css = '@import "'.$import.'";';
73        $in_less = '@foo: "bar";
74content: @foo;';
75
76        $expected_css = '@import "/foo/bar/'.$import.'";';
77        $expected_less = 'content: "bar";';
78
79        io_saveFile($this->import, $in_less);
80        $this->csstest($in_css, $expected_css, $expected_less);
81    }
82
83    public function tearDown() {
84        unlink($this->file);
85        unlink($this->import);
86        unset($this->file, $this->import);
87    }
88}
89
90//Setup VIM: ex: et ts=4 sw=4 :
91