<?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)) {
            throw new Exception('Could not create directory.');
        }

        $this->file = tempnam($dir, 'css');

        $import = '';
        if ($import) unlink($import);
        $import = tempnam($dir, 'less');
        if (rename($import, $import.'.less') === false) {
            throw new Exception('failed to rename file');
        };

        $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, w2u($css)); // w2u() for test pass, less works with both slashes on Windows OS
        $this->assertEquals($expected_less, $less);
    }

    public function test_basic() {
        $this->setUpFiles();

        // remove path
        if (isWindows()) {
            $import = preg_replace('#(^.*[\\\\])#','',$this->import);
        } else {
            $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');

        // remove path
        if (isWindows()) {
            $import = preg_replace('#(^.*[\\\\])#','',$this->import);
        } else {
            $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 :
