xref: /dokuwiki/_test/tests/lib/exe/css_at_import_less.test.php (revision e8da0265d5bc482288c7c882aedb9d39e2fe3a3f)
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            $this->markTestSkipped('Could not create directory.');
18        }
19
20        $this->file = tempnam($dir, 'css');
21
22        $import = '';
23        do {
24            if ($import) unlink($import);
25            $import = tempnam($dir, 'less');
26            $ok = rename($import, $import.'.less');
27        } while (!$ok);
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, $css);
38        $this->assertEquals($expected_less, $less);
39    }
40
41    // make relative
42    private function importPath($path) {
43        return isWindows() ? preg_replace('#(^.*[\\\\])#','', $path) : preg_replace('#(^.*[/])#','', $path);
44    }
45
46    public function test_basic() {
47        $this->setUpFiles();
48
49        $import = $this->importPath($this->import);
50        $in_css = '@import "'.$import.'";';
51        $in_less = '@foo: "bar";
52content: @foo;';
53
54        $expected_css = '@import "/'.$import.'";';
55        $expected_less = 'content: "bar";';
56
57        io_saveFile($this->import, $in_less);
58        $this->csstest($in_css, $expected_css, $expected_less);
59    }
60
61    public function test_subdirectory() {
62        $this->setUpFiles('/foo/bar');
63
64        $import = $this->importPath($this->import);
65        $in_css = '@import "'.$import.'";';
66        $in_less = '@foo: "bar";
67content: @foo;';
68
69        $expected_css = isWindows() ? '@import "\\foo\\bar/'.$import.'";' : '@import "/foo/bar/'.$import.'";';
70        $expected_less = 'content: "bar";';
71
72        io_saveFile($this->import, $in_less);
73        $this->csstest($in_css, $expected_css, $expected_less);
74    }
75
76    public function tearDown() {
77        unlink($this->file);
78        unlink($this->import);
79        unset($this->file, $this->import);
80    }
81}
82
83//Setup VIM: ex: et ts=4 sw=4 :
84