public void CanUseRelativePathsInImportStatements()
        {
            string inputFilename1 = "~/content/parent.less";
            string inputFilename2 = "~/content/child.less";

            var pathProvider = new InMemoryVirtualPathProvider()
                .AddFile(inputFilename1, "@import \"child.less\";")
                .AddFile(inputFilename2, ".selector { background: yellow; }");
            SetUpPathProvider(pathProvider);

            var bundle = new LessBundle("~/output/relative-paths.css")
                .Include(inputFilename1);
            var bundleResponse = bundle.GenerateBundleResponse(CreateBundleContext(bundle));

            Assert.That(bundleResponse.Content, Is.EqualTo(".selector {\n  background: yellow;\n}\n"));
        }
        public void IncludedFilesRunInTheSameScope()
        {
            string inputFilename1 = "~/content/variable.less";
            string inputFilename2 = "~/content/selector.less";

            var pathProvider = new InMemoryVirtualPathProvider()
                .AddFile(inputFilename1, "@nice-blue: #5B83AD;")
                .AddFile(inputFilename2, ".selector { background: @nice-blue; }");
            SetUpPathProvider(pathProvider);

            var bundle = new LessBundle("~/output/same-scope.css")
                .Include(inputFilename1)
                .Include(inputFilename2);
            var bundleResponse = bundle.GenerateBundleResponse(CreateBundleContext(bundle));

            Assert.That(bundleResponse.Content, Is.EqualTo(".selector {\n  background: #5b83ad;\n}\n"));
        }
        public void NestedRelativeImportsAreRelativeToTheCurrentFile()
        {
            string inputFilename1 = "~/content/relative-parent.less";
            string inputFilename2 = "~/content/project/child.less";
            string inputFilename3 = "~/content/project/sub/grandchild.less";

            var pathProvider = new InMemoryVirtualPathProvider()
                .AddFile(inputFilename1, "@import \"project/child.less\";")
                .AddFile(inputFilename2, "@import \"sub/grandchild.less\";")
                .AddFile(inputFilename3, ".selector { background: yellow; }");
            SetUpPathProvider(pathProvider);

            var bundle = new LessBundle("~/output/relative-paths.css")
                .Include(inputFilename1);
            var bundleResponse = bundle.GenerateBundleResponse(CreateBundleContext(bundle));

            Assert.That(bundleResponse.Content, Is.EqualTo(".selector {\n  background: yellow;\n}\n"));
        }
        public void ShowParsingErrorsInBundleResponse()
        {
            string inputFilename = "~/content/error.less";
            var pathProvider = new InMemoryVirtualPathProvider(inputFilename, ".button { background: blue;");
            SetUpPathProvider(pathProvider);

            var bundle = new LessBundle("~/output/error.css")
                .Include(inputFilename);
            var bundleResponse = bundle.GenerateBundleResponse(CreateBundleContext(bundle));

            Assert.That(bundleResponse.Content, Is.StringStarting("Missing closing '}' on line 1 in file '~/content/error.less':"));
        }
        public void UsesDotLessConfigurationFromWebConfig()
        {
            string inputFilename = "~/content/minified.less";
            var pathProvider = new InMemoryVirtualPathProvider(inputFilename, ".button { background: blue;}");
            SetUpPathProvider(pathProvider);
            Config.MinifyOutput = true;

            var bundle = new LessBundle("~/output/minified.css")
                .Include(inputFilename);
            var bundleResponse = bundle.GenerateBundleResponse(CreateBundleContext(bundle));

            Assert.That(bundleResponse.Content, Is.EqualTo(".button{background:blue}"));
        }
        public void TransformFilesToLess()
        {
            string inputFilename1 = "~/content/file1.less";
            string inputFilename2 = "~/content/file2.less";

            var pathProvider = new InMemoryVirtualPathProvider()
                .AddFile(inputFilename1, "body { width: 1+1px; }")
                .AddFile(inputFilename2, "h1 { font-size: 3*16em; }");
            SetUpPathProvider(pathProvider);

            var bundle = new LessBundle("~/Content/file.css")
                .Include(inputFilename1)
                .Include(inputFilename2);
            var bundleResponse = bundle.GenerateBundleResponse(CreateBundleContext(bundle));

            Assert.That(bundleResponse.ContentType, Is.EqualTo("text/css"));
            Assert.That(bundleResponse.Content, Is.EqualTo("body {\n  width: 2px;\n}\nh1 {\n  font-size: 48em;\n}\n"));
        }