From 9bcc46b342cfb888f16c180cb0b3103335def5f1 Mon Sep 17 00:00:00 2001 From: Amaury Levé Date: Thu, 21 Jun 2018 14:55:09 +0200 Subject: Rule S4653: Units should be valid (#50) --- its/plugin/pom.xml | 6 +++++ .../projects/css-plugin-test-project/src/file1.css | 10 ------- .../css-plugin-test-project/src/file2.less | 11 -------- .../css-plugin-test-project/src/file3.scss | 12 --------- .../css-plugin-test-project/src/file4.html | 10 ------- its/plugin/projects/issues-project/src/file1.css | 4 +++ its/plugin/projects/issues-project/src/file2.less | 4 +++ its/plugin/projects/issues-project/src/file3.scss | 4 +++ its/plugin/projects/metrics-project/src/file1.css | 9 +++++++ its/plugin/projects/metrics-project/src/file2.less | 11 ++++++++ its/plugin/projects/metrics-project/src/file3.scss | 12 +++++++++ its/plugin/projects/metrics-project/src/file4.html | 10 +++++++ .../test/java/org/sonar/css/its/IssuesTest.java | 7 +++-- .../test/java/org/sonar/css/its/MetricsTest.java | 12 ++++----- .../src/test/java/org/sonar/css/its/Tests.java | 2 +- .../main/java/org/sonar/css/plugin/CssRules.java | 18 ++++++++----- .../org/sonar/css/plugin/CssRulesDefinition.java | 4 +-- .../org/sonar/css/plugin/rules/UnitNoUnknown.java | 31 ++++++++++++++++++++++ .../org/sonar/l10n/css/rules/css/S4653.html | 20 ++++++++++++++ .../org/sonar/l10n/css/rules/css/S4653.json | 16 +++++++++++ .../l10n/css/rules/css/Sonar_way_profile.json | 3 ++- .../java/org/sonar/css/plugin/CssLanguageTest.java | 2 +- .../org/sonar/css/plugin/CssRuleSensorTest.java | 4 +-- .../org/sonar/css/plugin/SonarWayProfileTest.java | 2 +- .../java/org/sonar/css/plugin/TokenizerTest.java | 2 ++ .../css/plugin/bundle/CssBundleHandlerTest.java | 2 +- 26 files changed, 158 insertions(+), 70 deletions(-) delete mode 100644 its/plugin/projects/css-plugin-test-project/src/file1.css delete mode 100644 its/plugin/projects/css-plugin-test-project/src/file2.less delete mode 100644 its/plugin/projects/css-plugin-test-project/src/file3.scss delete mode 100644 its/plugin/projects/css-plugin-test-project/src/file4.html create mode 100644 its/plugin/projects/issues-project/src/file1.css create mode 100644 its/plugin/projects/issues-project/src/file2.less create mode 100644 its/plugin/projects/issues-project/src/file3.scss create mode 100644 its/plugin/projects/metrics-project/src/file1.css create mode 100644 its/plugin/projects/metrics-project/src/file2.less create mode 100644 its/plugin/projects/metrics-project/src/file3.scss create mode 100644 its/plugin/projects/metrics-project/src/file4.html create mode 100644 sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/UnitNoUnknown.java create mode 100644 sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/S4653.html create mode 100644 sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/S4653.json diff --git a/its/plugin/pom.xml b/its/plugin/pom.xml index 24aa42c..ec3b408 100644 --- a/its/plugin/pom.xml +++ b/its/plugin/pom.xml @@ -27,6 +27,12 @@ org.assertj assertj-core + + org.sonarsource.css + sonar-css-plugin + ${version} + test + diff --git a/its/plugin/projects/css-plugin-test-project/src/file1.css b/its/plugin/projects/css-plugin-test-project/src/file1.css deleted file mode 100644 index 621aea1..0000000 --- a/its/plugin/projects/css-plugin-test-project/src/file1.css +++ /dev/null @@ -1,10 +0,0 @@ -.class1 { - background-color: #2d5e8b; -} -.class1 .class2 { - background-color: #ffw; /* issue here */ - color: #2d5e8b; - foo: "some text"; -} - -/* some comment */ \ No newline at end of file diff --git a/its/plugin/projects/css-plugin-test-project/src/file2.less b/its/plugin/projects/css-plugin-test-project/src/file2.less deleted file mode 100644 index 691fd11..0000000 --- a/its/plugin/projects/css-plugin-test-project/src/file2.less +++ /dev/null @@ -1,11 +0,0 @@ -@color-base: #2d5e8b; -.class1 { - background-color: @color-base; - .class2 { - background-color: #fff; - color: @color-base; - foo: "some text"; - } -} - -/* some comment */ \ No newline at end of file diff --git a/its/plugin/projects/css-plugin-test-project/src/file3.scss b/its/plugin/projects/css-plugin-test-project/src/file3.scss deleted file mode 100644 index fd62422..0000000 --- a/its/plugin/projects/css-plugin-test-project/src/file3.scss +++ /dev/null @@ -1,12 +0,0 @@ -$firstValue: 62.5%; - -$firstValue: 24px !default; - -body { - font-size: $firstValue; - foo: "some text"; -} - -// body font size = 62.5% - -/* some comment */ \ No newline at end of file diff --git a/its/plugin/projects/css-plugin-test-project/src/file4.html b/its/plugin/projects/css-plugin-test-project/src/file4.html deleted file mode 100644 index 499a20b..0000000 --- a/its/plugin/projects/css-plugin-test-project/src/file4.html +++ /dev/null @@ -1,10 +0,0 @@ - -Example - -

Hello World!

diff --git a/its/plugin/projects/issues-project/src/file1.css b/its/plugin/projects/issues-project/src/file1.css new file mode 100644 index 0000000..b0dcf70 --- /dev/null +++ b/its/plugin/projects/issues-project/src/file1.css @@ -0,0 +1,4 @@ +.class1 { + background-color: #ffw; /* S4647 | color-no-invalid-hex */ + width: 100pixels; /* S4653 | unit-no-unknown */ +} \ No newline at end of file diff --git a/its/plugin/projects/issues-project/src/file2.less b/its/plugin/projects/issues-project/src/file2.less new file mode 100644 index 0000000..b0dcf70 --- /dev/null +++ b/its/plugin/projects/issues-project/src/file2.less @@ -0,0 +1,4 @@ +.class1 { + background-color: #ffw; /* S4647 | color-no-invalid-hex */ + width: 100pixels; /* S4653 | unit-no-unknown */ +} \ No newline at end of file diff --git a/its/plugin/projects/issues-project/src/file3.scss b/its/plugin/projects/issues-project/src/file3.scss new file mode 100644 index 0000000..b0dcf70 --- /dev/null +++ b/its/plugin/projects/issues-project/src/file3.scss @@ -0,0 +1,4 @@ +.class1 { + background-color: #ffw; /* S4647 | color-no-invalid-hex */ + width: 100pixels; /* S4653 | unit-no-unknown */ +} \ No newline at end of file diff --git a/its/plugin/projects/metrics-project/src/file1.css b/its/plugin/projects/metrics-project/src/file1.css new file mode 100644 index 0000000..fc4bf73 --- /dev/null +++ b/its/plugin/projects/metrics-project/src/file1.css @@ -0,0 +1,9 @@ +.class1 { + background-color: #2d5e8b; +} +.class1 .class2 { + color: #2d5e8b; + foo: "some text"; +} + +/* some comment */ \ No newline at end of file diff --git a/its/plugin/projects/metrics-project/src/file2.less b/its/plugin/projects/metrics-project/src/file2.less new file mode 100644 index 0000000..691fd11 --- /dev/null +++ b/its/plugin/projects/metrics-project/src/file2.less @@ -0,0 +1,11 @@ +@color-base: #2d5e8b; +.class1 { + background-color: @color-base; + .class2 { + background-color: #fff; + color: @color-base; + foo: "some text"; + } +} + +/* some comment */ \ No newline at end of file diff --git a/its/plugin/projects/metrics-project/src/file3.scss b/its/plugin/projects/metrics-project/src/file3.scss new file mode 100644 index 0000000..fd62422 --- /dev/null +++ b/its/plugin/projects/metrics-project/src/file3.scss @@ -0,0 +1,12 @@ +$firstValue: 62.5%; + +$firstValue: 24px !default; + +body { + font-size: $firstValue; + foo: "some text"; +} + +// body font size = 62.5% + +/* some comment */ \ No newline at end of file diff --git a/its/plugin/projects/metrics-project/src/file4.html b/its/plugin/projects/metrics-project/src/file4.html new file mode 100644 index 0000000..499a20b --- /dev/null +++ b/its/plugin/projects/metrics-project/src/file4.html @@ -0,0 +1,10 @@ + +Example + +

Hello World!

diff --git a/its/plugin/src/test/java/org/sonar/css/its/IssuesTest.java b/its/plugin/src/test/java/org/sonar/css/its/IssuesTest.java index 0f9de2e..d70597d 100644 --- a/its/plugin/src/test/java/org/sonar/css/its/IssuesTest.java +++ b/its/plugin/src/test/java/org/sonar/css/its/IssuesTest.java @@ -25,6 +25,7 @@ import java.util.List; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; +import org.sonar.css.plugin.CssRules; import org.sonarqube.ws.Issues.Issue; import org.sonarqube.ws.client.issues.SearchRequest; @@ -33,7 +34,7 @@ import static org.sonar.css.its.Tests.newWsClient; public class IssuesTest { - private static String PROJECT_KEY = "css-plugin-test-project"; + private static String PROJECT_KEY = "issues-project"; @ClassRule public static Orchestrator orchestrator = Tests.ORCHESTRATOR; @@ -49,9 +50,7 @@ public class IssuesTest { request.setComponentKeys(Collections.singletonList(PROJECT_KEY)); List issuesList = newWsClient().issues().search(request).getIssuesList(); - assertThat(issuesList).extracting("line").containsOnly(5); - assertThat(issuesList).extracting("component").containsOnly(PROJECT_KEY + ":src/file1.css"); - assertThat(issuesList).extracting("rule").containsOnly("css:S4647"); + assertThat(issuesList).extracting("rule").hasSize(CssRules.getRuleClasses().size() * 3); } } diff --git a/its/plugin/src/test/java/org/sonar/css/its/MetricsTest.java b/its/plugin/src/test/java/org/sonar/css/its/MetricsTest.java index 9af016d..4e6280c 100644 --- a/its/plugin/src/test/java/org/sonar/css/its/MetricsTest.java +++ b/its/plugin/src/test/java/org/sonar/css/its/MetricsTest.java @@ -30,7 +30,7 @@ import static org.sonar.css.its.Tests.getProjectMeasureAsDouble; public class MetricsTest { - private static String PROJECT_KEY = "css-plugin-test-project"; + private static String PROJECT_KEY = "metrics-project"; @ClassRule public static Orchestrator orchestrator = Tests.ORCHESTRATOR; @@ -42,14 +42,14 @@ public class MetricsTest { @Test public void test() { - assertThat(getProjectMeasureAsDouble("lines", PROJECT_KEY)).isEqualTo(33); - assertThat(getProjectMeasureAsDouble("ncloc", PROJECT_KEY)).isEqualTo(23); - assertThat(getProjectMeasureAsDouble("comment_lines", PROJECT_KEY)).isEqualTo(5); + assertThat(getProjectMeasureAsDouble("lines", PROJECT_KEY)).isEqualTo(32); + assertThat(getProjectMeasureAsDouble("ncloc", PROJECT_KEY)).isEqualTo(22); + assertThat(getProjectMeasureAsDouble("comment_lines", PROJECT_KEY)).isEqualTo(4); assertThat(getMeasure("ncloc_data", PROJECT_KEY + ":src/file1.css").getValue()) - .contains("1=1;", "2=1;", "3=1;", "4=1;", "5=1;", "6=1;", "7=1;", "8=1"); + .contains("1=1;", "2=1;", "3=1;", "4=1;", "5=1;", "6=1;", "7=1"); assertThat(getMeasure("comment_lines_data", PROJECT_KEY + ":src/file1.css").getValue()) - .contains("5=1;", "10=1"); + .contains("9=1"); assertThat(getMeasure("ncloc_data", PROJECT_KEY + ":src/file2.less").getValue()) .contains("1=1;", "2=1;", "3=1;", "4=1;", "5=1;", "6=1;", "7=1;", "8=1;", "9=1"); diff --git a/its/plugin/src/test/java/org/sonar/css/its/Tests.java b/its/plugin/src/test/java/org/sonar/css/its/Tests.java index eb6a01e..31b2f78 100644 --- a/its/plugin/src/test/java/org/sonar/css/its/Tests.java +++ b/its/plugin/src/test/java/org/sonar/css/its/Tests.java @@ -52,7 +52,7 @@ public class Tests { static { OrchestratorBuilder orchestratorBuilder = Orchestrator.builderEnv() .addPlugin(PLUGIN_LOCATION) - .setSonarVersion(System.getProperty("sonar.runtimeVersion", "7.2-RC1")); + .setSonarVersion(System.getProperty("sonar.runtimeVersion", "7.2")); ORCHESTRATOR = orchestratorBuilder.build(); } diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRules.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRules.java index 4fdf3f5..1dac08c 100644 --- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRules.java +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRules.java @@ -19,17 +19,19 @@ */ package org.sonar.css.plugin; +import org.sonar.api.batch.rule.CheckFactory; +import org.sonar.api.batch.rule.Checks; +import org.sonar.api.rule.RuleKey; +import org.sonar.css.plugin.rules.ColorNoInvalidHex; +import org.sonar.css.plugin.rules.CssRule; +import org.sonar.css.plugin.rules.UnitNoUnknown; + import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.sonar.api.batch.rule.CheckFactory; -import org.sonar.api.batch.rule.Checks; -import org.sonar.api.rule.RuleKey; -import org.sonar.css.plugin.rules.ColorNoInvalidHex; -import org.sonar.css.plugin.rules.CssRule; public class CssRules { @@ -37,7 +39,8 @@ public class CssRules { private final StylelintConfig config = new StylelintConfig(); public CssRules(CheckFactory checkFactory) { - Checks checks = checkFactory.create(CssRulesDefinition.REPOSITORY_KEY).addAnnotatedChecks((Iterable) getRuleClasses()); + Checks checks = checkFactory.create(CssRulesDefinition.REPOSITORY_KEY) + .addAnnotatedChecks((Iterable) getRuleClasses()); Collection enabledRules = checks.all(); stylelintKeyToRuleKey = new HashMap<>(); for (CssRule rule : enabledRules) { @@ -48,7 +51,8 @@ public class CssRules { public static List getRuleClasses() { return Collections.unmodifiableList(Arrays.asList( - ColorNoInvalidHex.class + ColorNoInvalidHex.class, + UnitNoUnknown.class )); } diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRulesDefinition.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRulesDefinition.java index 196252f..a338d7f 100644 --- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRulesDefinition.java +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRulesDefinition.java @@ -19,9 +19,7 @@ */ package org.sonar.css.plugin; -import java.util.Collections; import org.sonar.api.server.rule.RulesDefinition; -import org.sonar.css.plugin.rules.ColorNoInvalidHex; import org.sonarsource.analyzer.commons.RuleMetadataLoader; import static org.sonar.css.plugin.SonarWayProfile.PROFILE_PATH; @@ -40,7 +38,7 @@ public class CssRulesDefinition implements RulesDefinition { .setName(RULE_REPOSITORY_NAME); RuleMetadataLoader ruleMetadataLoader = new RuleMetadataLoader(RESOURCE_FOLDER, PROFILE_PATH); - ruleMetadataLoader.addRulesByAnnotatedClass(repository, Collections.singletonList(ColorNoInvalidHex.class)); + ruleMetadataLoader.addRulesByAnnotatedClass(repository, CssRules.getRuleClasses()); repository.done(); } } diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/UnitNoUnknown.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/UnitNoUnknown.java new file mode 100644 index 0000000..eee43db --- /dev/null +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/UnitNoUnknown.java @@ -0,0 +1,31 @@ +/* + * SonarCSS + * Copyright (C) 2018-2018 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.css.plugin.rules; + +import org.sonar.check.Rule; + +@Rule(key = "S4653") +public class UnitNoUnknown implements CssRule { + + @Override + public String stylelintKey() { + return "unit-no-unknown"; + } +} diff --git a/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/S4653.html b/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/S4653.html new file mode 100644 index 0000000..283bf5d --- /dev/null +++ b/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/S4653.html @@ -0,0 +1,20 @@ +

The W3C specifications define the units that can be used with lengths. A unit that is not part of the list of supported ones is likely +to be a typo and will be seen as a UI bug by the user.

+

This rule raises an issue each time a unit is not officially supported.

+

Noncompliant Code Example

+
+a {
+  width: 10pixels;
+}
+
+

Compliant Solution

+
+a {
+  width: 10px;
+}
+
+

See

+
    +
  • https://www.w3.org/TR/css3-values/#lengths
  • +
+ diff --git a/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/S4653.json b/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/S4653.json new file mode 100644 index 0000000..b6ee0e2 --- /dev/null +++ b/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/S4653.json @@ -0,0 +1,16 @@ +{ + "title": "Units should be valid", + "type": "BUG", + "status": "ready", + "remediation": { + "func": "Constant\/Issue", + "constantCost": "5min" + }, + "tags": [ + + ], + "defaultSeverity": "Blocker", + "ruleSpecification": "RSPEC-4653", + "sqKey": "S4653", + "scope": "Main" +} diff --git a/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/Sonar_way_profile.json b/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/Sonar_way_profile.json index ba5ce46..a0e81bb 100644 --- a/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/Sonar_way_profile.json +++ b/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/Sonar_way_profile.json @@ -1,6 +1,7 @@ { "name": "Sonar way", "ruleKeys": [ - "S4647" + "S4647", + "S4653" ] } diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssLanguageTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssLanguageTest.java index cf5c65a..8ebbbc0 100644 --- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssLanguageTest.java +++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssLanguageTest.java @@ -27,7 +27,7 @@ import static org.assertj.core.api.Assertions.assertThat; public class CssLanguageTest { @Test - public void test() throws Exception { + public void test() { MapSettings settings = new MapSettings(); settings.setProperty(CssPlugin.FILE_SUFFIXES_KEY, CssPlugin.FILE_SUFFIXES_DEFVALUE); CssLanguage language = new CssLanguage(settings.asConfig()); diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssRuleSensorTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssRuleSensorTest.java index 5c9e5ae..d176688 100644 --- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssRuleSensorTest.java +++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssRuleSensorTest.java @@ -49,7 +49,7 @@ public class CssRuleSensorTest { public TemporaryFolder tmpDir = new TemporaryFolder(); @Test - public void test_descriptor() throws Exception { + public void test_descriptor() { CssRuleSensor sensor = new CssRuleSensor(new CssBundleHandler(), checkFactory, new StylelintCommandProvider()); DefaultSensorDescriptor sensorDescriptor = new DefaultSensorDescriptor(); sensor.describe(sensorDescriptor); @@ -59,7 +59,7 @@ public class CssRuleSensorTest { } @Test - public void test_execute() throws Exception { + public void test_execute() throws IOException { SensorContextTester context = SensorContextTester.create(BASE_DIR); context.fileSystem().setWorkDir(tmpDir.getRoot().toPath()); DefaultInputFile inputFile = createInputFile(context, "some css content\n on 2 lines", "dir/file.css"); diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/SonarWayProfileTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/SonarWayProfileTest.java index eba68f5..a726858 100644 --- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/SonarWayProfileTest.java +++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/SonarWayProfileTest.java @@ -38,7 +38,7 @@ public class SonarWayProfileTest { assertThat(profile.language()).isEqualTo(CssLanguage.KEY); assertThat(profile.name()).isEqualTo(SonarWayProfile.PROFILE_NAME); assertThat(profile.rules()).extracting("repoKey").containsOnly(CssRulesDefinition.REPOSITORY_KEY); - assertThat(profile.rules()).extracting("ruleKey").contains("S4647"); + assertThat(profile.rules()).extracting("ruleKey").hasSize(CssRules.getRuleClasses().size()); } } diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/TokenizerTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/TokenizerTest.java index 76c4617..a0cf508 100644 --- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/TokenizerTest.java +++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/TokenizerTest.java @@ -22,6 +22,8 @@ package org.sonar.css.plugin; import java.util.List; import org.junit.Test; +import java.util.List; + import static org.assertj.core.api.Assertions.assertThat; public class TokenizerTest { diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/bundle/CssBundleHandlerTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/bundle/CssBundleHandlerTest.java index b55d050..fe56c89 100644 --- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/bundle/CssBundleHandlerTest.java +++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/bundle/CssBundleHandlerTest.java @@ -44,7 +44,7 @@ public class CssBundleHandlerTest { } @Test - public void test() throws Exception { + public void test() { CssBundleHandler bundleHandler = new CssBundleHandler(); bundleHandler.bundleLocation = "/bundle/test-bundle.zip"; bundleHandler.deployBundle(DEPLOY_DESTINATION); -- cgit v1.2.3