]> source.dussan.org Git - sonarqube.git/commitdiff
(SONAR-3893) Improve the highlighter API to not depend on sonar-channel and allow...
authorJean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com>
Fri, 5 Apr 2013 08:49:19 +0000 (10:49 +0200)
committerJean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com>
Fri, 5 Apr 2013 08:49:19 +0000 (10:49 +0200)
sonar-core/src/main/java/org/sonar/core/source/DefaultHighlightable.java
sonar-core/src/main/java/org/sonar/core/source/HighlightableBuilder.java
sonar-core/src/test/java/org/sonar/core/component/GraphPerspectiveBuilderTest.java [new file with mode: 0644]
sonar-core/src/test/java/org/sonar/core/source/DefaultHighlightableTest.java

index 006fa22be3a5c843e30b786d87ed58548a9ed78d..25435ee4dc1af2118af04114458ffffc615d5558 100644 (file)
@@ -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
index ba823be360ef5d6c70b2b43ab017fe1ac07c85a4..72cbf9b4ee272f544cb88c5c7ed69e77e5d2a5b2 100644 (file)
@@ -31,6 +31,6 @@ public class HighlightableBuilder extends PerspectiveBuilder<Highlightable> {
 
   @Override
   protected Highlightable loadPerspective(Class<Highlightable> 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 (file)
index 0000000..f7110ad
--- /dev/null
@@ -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<DefaultMutablePerspective> perspectiveLoader =
+            new GraphPerspectiveLoader<DefaultMutablePerspective>(perspectiveKey, DefaultMutablePerspective.class) {
+
+              @Override
+              public DefaultMutablePerspective load(ComponentVertex component) {
+                return null;
+              }
+
+              @Override
+              protected Class<? extends BeanVertex> 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;
+    }
+  }
+}
index 9990218d2eea8c1377bb7d05412744160b984e87..82f5d53b5941b8b1258a58722d196e7a4572c595 100644 (file)
@@ -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();
   }
 }