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