Skip to content
This repository has been archived by the owner on May 21, 2022. It is now read-only.

Commit

Permalink
Implemented removal .css counterpart for deleted sass source file
Browse files Browse the repository at this point in the history
  • Loading branch information
kravemir committed Sep 6, 2016
1 parent 5259a53 commit 7277bdf
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.TaskAction;
import org.gradle.api.tasks.incremental.IncrementalTaskInputs;

import java.io.File;
import java.io.FileOutputStream;
Expand Down Expand Up @@ -47,15 +48,24 @@ FileCollection getInputFiles() {
}

@TaskAction
void compile() throws Exception {
void compile(IncrementalTaskInputs incrementalTaskInputs) throws Exception {
File outputDir = getOutputDirectory();
outputDir.mkdirs();

Path srcDirPath = getSrcDir().toPath();

// only delete removed files
if(incrementalTaskInputs.isIncremental()) {
incrementalTaskInputs.outOfDate(inputFileDetails -> {});
incrementalTaskInputs.removed(inputFileDetails -> {
File outputFile = getOutputFile(srcDirPath,outputDir,inputFileDetails.getFile());
if(outputFile.exists())
outputFile.delete();
});
}

for(File f : getSassFiles()) {
Path relativePath = srcDirPath.relativize(f.toPath());
File outputFile = new File(outputDir,relativePath.toString().replaceAll("\\.scss",".css"));
File outputFile = getOutputFile(srcDirPath,outputDir,f);
outputFile.getParentFile().mkdirs();

try(OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(outputFile))) {
Expand All @@ -69,6 +79,11 @@ void compile() throws Exception {
}
}

private File getOutputFile(Path srcDirPath, File outputDir, File f) {
Path relativePath = srcDirPath.relativize(f.toPath());
return new File(outputDir,relativePath.toString().replaceAll("\\.scss",".css"));
}

/**
* @return directory, where compiled CSS files are written
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package org.kravemir.gradle.sass.tests;


import org.gradle.testkit.runner.BuildResult;
import org.gradle.testkit.runner.GradleRunner;
import org.gradle.testkit.runner.TaskOutcome;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

/**
* @author Miroslav Kravec
*/
public class IncrementalTasksTest {

@Rule
public final TemporaryFolder testProjectDir = new TemporaryFolder();

private File fooScss;


@Before
public void setup() throws IOException {
File buildFile = testProjectDir.newFile("build.gradle");
writeFile(buildFile, "plugins {\n id 'org.kravemir.gradle.sass'\n }\nsass{\nmain{}}");

Path mainSassPath = Paths.get(testProjectDir.getRoot().getPath(),"src","main","sass");
Files.createDirectories(mainSassPath);

File mainScss = mainSassPath.resolve("main.scss").toFile();
mainScss.createNewFile();

fooScss = mainSassPath.resolve("foo.scss").toFile();
fooScss.createNewFile();

}


@Test
public void testFooDeletion() {
BuildResult result = GradleRunner.create()
.withProjectDir(testProjectDir.getRoot())
.withArguments("mainSass")
.withPluginClasspath()
.build();

assertEquals("check that ':mainSass' task succeeded", result.task(":mainSass").getOutcome(), TaskOutcome.SUCCESS);

Path mainSassBuildRoot = Paths.get(testProjectDir.getRoot().getPath(), "build", "sass", "main");
assertTrue(mainSassBuildRoot.resolve(Paths.get("main.css")).toFile().exists());
assertTrue(mainSassBuildRoot.resolve(Paths.get("foo.css")).toFile().exists());

fooScss.delete();

BuildResult result2 = GradleRunner.create()
.withProjectDir(testProjectDir.getRoot())
.withArguments("mainSass")
.withPluginClasspath()
.build();

assertEquals("check that ':mainSass' task succeeded", result2.task(":mainSass").getOutcome(), TaskOutcome.SUCCESS);

assertTrue(mainSassBuildRoot.resolve(Paths.get("main.css")).toFile().exists());
assertFalse(mainSassBuildRoot.resolve(Paths.get("foo.css")).toFile().exists());
}


private void writeFile(File destination, String content) throws IOException {
BufferedWriter output = null;
try {
output = new BufferedWriter(new FileWriter(destination));
output.write(content);
} finally {
if (output != null) {
output.close();
}
}
}
}

0 comments on commit 7277bdf

Please sign in to comment.