From 495e4e7e33cd5d7a29cebe8e890fe4e121cab2da Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Vilain Date: Fri, 5 Apr 2013 10:49:19 +0200 Subject: [PATCH] (SONAR-3893) Improve the highlighter API to not depend on sonar-channel and allow to work on multi-line tokens - Fixed tests coverage violations --- .../core/source/DefaultHighlightable.java | 4 +- .../core/source/HighlightableBuilder.java | 2 +- .../GraphPerspectiveBuilderTest.java | 113 ++++++++++++++++++ .../core/source/DefaultHighlightableTest.java | 10 +- 4 files changed, 117 insertions(+), 12 deletions(-) create mode 100644 sonar-core/src/test/java/org/sonar/core/component/GraphPerspectiveBuilderTest.java diff --git a/sonar-core/src/main/java/org/sonar/core/source/DefaultHighlightable.java b/sonar-core/src/main/java/org/sonar/core/source/DefaultHighlightable.java index 006fa22be3a..25435ee4dc1 100644 --- a/sonar-core/src/main/java/org/sonar/core/source/DefaultHighlightable.java +++ b/sonar-core/src/main/java/org/sonar/core/source/DefaultHighlightable.java @@ -25,12 +25,10 @@ import org.sonar.api.scan.source.SyntaxHighlightingRuleSet; public class DefaultHighlightable implements Highlightable { - private final Component component; private final SyntaxHighlightingRuleSet.Builder highlightingRulesBuilder; - public DefaultHighlightable(Component component) { + public DefaultHighlightable() { highlightingRulesBuilder = new SyntaxHighlightingRuleSet.Builder(); - this.component = component; } @Override diff --git a/sonar-core/src/main/java/org/sonar/core/source/HighlightableBuilder.java b/sonar-core/src/main/java/org/sonar/core/source/HighlightableBuilder.java index ba823be360e..72cbf9b4ee2 100644 --- a/sonar-core/src/main/java/org/sonar/core/source/HighlightableBuilder.java +++ b/sonar-core/src/main/java/org/sonar/core/source/HighlightableBuilder.java @@ -31,6 +31,6 @@ public class HighlightableBuilder extends PerspectiveBuilder { @Override protected Highlightable loadPerspective(Class perspectiveClass, Component component) { - return new DefaultHighlightable(component); + return new DefaultHighlightable(); } } diff --git a/sonar-core/src/test/java/org/sonar/core/component/GraphPerspectiveBuilderTest.java b/sonar-core/src/test/java/org/sonar/core/component/GraphPerspectiveBuilderTest.java new file mode 100644 index 00000000000..f7110adf337 --- /dev/null +++ b/sonar-core/src/test/java/org/sonar/core/component/GraphPerspectiveBuilderTest.java @@ -0,0 +1,113 @@ +/* + * Sonar, open source software quality management tool. + * Copyright (C) 2008-2012 SonarSource + * mailto:contact AT sonarsource DOT com + * + * Sonar 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. + * + * Sonar 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 Sonar; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 + */ + +package org.sonar.core.component; + +import org.junit.Test; +import org.sonar.api.component.Component; +import org.sonar.api.component.MutablePerspective; +import org.sonar.api.component.Perspective; +import org.sonar.api.component.mock.MockSourceFile; +import org.sonar.core.graph.BeanVertex; + +import static org.fest.assertions.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class GraphPerspectiveBuilderTest { + + @Test + public void should_return_null_on_null_component() throws Exception { + + String componentKey = "org.foo.Bar"; + + Component component = mock(Component.class); + when(component.key()).thenReturn(componentKey); + + ScanGraph graph = mock(ScanGraph.class); + when(graph.getComponent(componentKey)).thenReturn(null); + + GraphPerspectiveLoader perspectiveLoader = mock(GraphPerspectiveLoader.class); + + GraphPerspectiveBuilder perspectiveBuilder = + new GraphPerspectiveBuilder(graph, MutablePerspective.class, null, perspectiveLoader) {}; + + Perspective loadedPerspective = perspectiveBuilder.loadPerspective(MutablePerspective.class, component); + + assertThat(loadedPerspective).isNull(); + } + + @Test + public void should_load_perspective() throws Exception { + + ScanGraph graph = ScanGraph.create(); + MutablePerspective expectedPerspective = mock(MutablePerspective.class); + + ComponentVertex fileComponent = graph.addComponent(MockSourceFile.createMain("org.foo.Bar")); + GraphPerspectiveLoader perspectiveLoader = mock(GraphPerspectiveLoader.class); + when(perspectiveLoader.load(fileComponent)).thenReturn(expectedPerspective); + + GraphPerspectiveBuilder perspectiveBuilder = + new GraphPerspectiveBuilder(graph, MutablePerspective.class, null, perspectiveLoader) {}; + + Perspective loadedPerspective = perspectiveBuilder.loadPerspective(MutablePerspective.class, fileComponent); + + assertThat(loadedPerspective).isEqualTo(expectedPerspective); + } + + @Test + public void should_create_perspective_when_loaded_one_is_null() throws Exception { + + String perspectiveKey = "perspectiveKey"; + + ScanGraph graph = ScanGraph.create(); + ComponentVertex fileComponent = graph.addComponent(MockSourceFile.createMain("org.foo.Bar")); + + GraphPerspectiveLoader perspectiveLoader = + new GraphPerspectiveLoader(perspectiveKey, DefaultMutablePerspective.class) { + + @Override + public DefaultMutablePerspective load(ComponentVertex component) { + return null; + } + + @Override + protected Class getBeanClass() { + return DefaultMutablePerspective.class; + } + }; + + GraphPerspectiveBuilder perspectiveBuilder = + new GraphPerspectiveBuilder(graph, MutablePerspective.class, null, perspectiveLoader) {}; + + Perspective loadedPerspective = perspectiveBuilder.loadPerspective(MutablePerspective.class, fileComponent); + + assertThat(loadedPerspective).isNotNull(); + assertThat(loadedPerspective).isInstanceOf(DefaultMutablePerspective.class); + } + + public static class DefaultMutablePerspective extends BeanVertex implements MutablePerspective { + + @Override + public Component component() { + return null; + } + } +} diff --git a/sonar-core/src/test/java/org/sonar/core/source/DefaultHighlightableTest.java b/sonar-core/src/test/java/org/sonar/core/source/DefaultHighlightableTest.java index 9990218d2ee..82f5d53b594 100644 --- a/sonar-core/src/test/java/org/sonar/core/source/DefaultHighlightableTest.java +++ b/sonar-core/src/test/java/org/sonar/core/source/DefaultHighlightableTest.java @@ -22,11 +22,9 @@ package org.sonar.core.source; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.sonar.api.component.Component; import org.sonar.api.scan.source.HighlightableTextType; import static org.fest.assertions.Assertions.assertThat; -import static org.mockito.Mockito.mock; public class DefaultHighlightableTest { @@ -36,9 +34,7 @@ public class DefaultHighlightableTest { @Test public void should_register_highlighting_rule() throws Exception { - Component mockComponent = mock(Component.class); - - DefaultHighlightable highlightable = new DefaultHighlightable(mockComponent); + DefaultHighlightable highlightable = new DefaultHighlightable(); highlightable.highlightText(1, 10, HighlightableTextType.KEYWORD); assertThat(highlightable.getHighlightingRules().getSyntaxHighlightingRuleSet()).hasSize(1); @@ -47,11 +43,9 @@ public class DefaultHighlightableTest { @Test public void should_reject_any_call_to_component() throws Exception { - Component mockComponent = mock(Component.class); - throwable.expect(UnsupportedOperationException.class); - DefaultHighlightable highlightable = new DefaultHighlightable(mockComponent); + DefaultHighlightable highlightable = new DefaultHighlightable(); highlightable.component(); } } -- 2.39.5