]> source.dussan.org Git - sonarqube.git/commitdiff
Add TimeMachineTest IT
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 24 Jul 2015 11:13:25 +0000 (13:13 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 24 Jul 2015 11:13:25 +0000 (13:13 +0200)
35 files changed:
it/it-projects/measure/xoo-history-v1/sonar-project.properties [new file with mode: 0644]
it/it-projects/measure/xoo-history-v1/src/main/xoo/sample/ClassToModify.xoo [new file with mode: 0644]
it/it-projects/measure/xoo-history-v1/src/main/xoo/sample/ClassToModify.xoo.measures [new file with mode: 0644]
it/it-projects/measure/xoo-history-v1/src/main/xoo/sample/UnchangedClass.xoo [new file with mode: 0644]
it/it-projects/measure/xoo-history-v1/src/main/xoo/sample/UnchangedClass.xoo.measures [new file with mode: 0644]
it/it-projects/measure/xoo-history-v2/sonar-project.properties [new file with mode: 0644]
it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/ClassAdded.xoo [new file with mode: 0644]
it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/ClassAdded.xoo.measures [new file with mode: 0644]
it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/ClassToModify.xoo [new file with mode: 0644]
it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/ClassToModify.xoo.measures [new file with mode: 0644]
it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/UnchangedClass.xoo [new file with mode: 0644]
it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/UnchangedClass.xoo.measures [new file with mode: 0644]
it/it-tests/src/test/java/measure/suite/MeasureFiltersTest.java
it/it-tests/src/test/java/measure/suite/TimeMachineTest.java [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/TimeMachineTest/one-issue-per-line-profile.xml [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/copy_measure_filter.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/copy_uniqueness_of_name.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/empty_filter.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/initial_search_form.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/link_from_main_header.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/list_change_columns.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/list_delete_column.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/list_move_columns.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/list_sort_by_descending_name.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/list_sort_by_ncloc.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/list_widget.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/list_widget_sort.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/list_widget_warning_if_missing_filter.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/save_with_special_characters.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/search-by-key.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/search-by-name.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/search_for_files.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/search_for_projects.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/should-not-share-filter-when-user-have-no-sharing-permissions.html [new file with mode: 0644]
it/it-tests/src/test/resources/measure/suite/measure_filters/should-unshare-filter-remove-other-filters-favourite.html [new file with mode: 0644]

diff --git a/it/it-projects/measure/xoo-history-v1/sonar-project.properties b/it/it-projects/measure/xoo-history-v1/sonar-project.properties
new file mode 100644 (file)
index 0000000..e01f062
--- /dev/null
@@ -0,0 +1,5 @@
+sonar.projectKey=sample
+sonar.projectName=Sample
+sonar.projectVersion=1.0-SNAPSHOT
+sonar.sources=src/main/xoo
+sonar.language=xoo
\ No newline at end of file
diff --git a/it/it-projects/measure/xoo-history-v1/src/main/xoo/sample/ClassToModify.xoo b/it/it-projects/measure/xoo-history-v1/src/main/xoo/sample/ClassToModify.xoo
new file mode 100644 (file)
index 0000000..2b0288f
--- /dev/null
@@ -0,0 +1,12 @@
+package sample;
+
+public class ClassToModify {
+       
+       public ClassToModify(int i) {
+               int j = i++;
+       }
+       
+       private String myMethod() {
+               return "hello";
+       }
+}
diff --git a/it/it-projects/measure/xoo-history-v1/src/main/xoo/sample/ClassToModify.xoo.measures b/it/it-projects/measure/xoo-history-v1/src/main/xoo/sample/ClassToModify.xoo.measures
new file mode 100644 (file)
index 0000000..7812e41
--- /dev/null
@@ -0,0 +1,2 @@
+ncloc:12
+classes:1
diff --git a/it/it-projects/measure/xoo-history-v1/src/main/xoo/sample/UnchangedClass.xoo b/it/it-projects/measure/xoo-history-v1/src/main/xoo/sample/UnchangedClass.xoo
new file mode 100644 (file)
index 0000000..2b0288f
--- /dev/null
@@ -0,0 +1,12 @@
+package sample;
+
+public class ClassToModify {
+       
+       public ClassToModify(int i) {
+               int j = i++;
+       }
+       
+       private String myMethod() {
+               return "hello";
+       }
+}
diff --git a/it/it-projects/measure/xoo-history-v1/src/main/xoo/sample/UnchangedClass.xoo.measures b/it/it-projects/measure/xoo-history-v1/src/main/xoo/sample/UnchangedClass.xoo.measures
new file mode 100644 (file)
index 0000000..7812e41
--- /dev/null
@@ -0,0 +1,2 @@
+ncloc:12
+classes:1
diff --git a/it/it-projects/measure/xoo-history-v2/sonar-project.properties b/it/it-projects/measure/xoo-history-v2/sonar-project.properties
new file mode 100644 (file)
index 0000000..e01f062
--- /dev/null
@@ -0,0 +1,5 @@
+sonar.projectKey=sample
+sonar.projectName=Sample
+sonar.projectVersion=1.0-SNAPSHOT
+sonar.sources=src/main/xoo
+sonar.language=xoo
\ No newline at end of file
diff --git a/it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/ClassAdded.xoo b/it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/ClassAdded.xoo
new file mode 100644 (file)
index 0000000..b0fd108
--- /dev/null
@@ -0,0 +1,12 @@
+package sample;
+
+public class ClassAdded {
+       
+       public ClassAdded(int i) {
+               int j = i++;
+       }
+
+       private String myMethod() {
+               return "hello";
+       }
+}
diff --git a/it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/ClassAdded.xoo.measures b/it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/ClassAdded.xoo.measures
new file mode 100644 (file)
index 0000000..66ba834
--- /dev/null
@@ -0,0 +1,3 @@
+ncloc:12
+classes:1
+
diff --git a/it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/ClassToModify.xoo b/it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/ClassToModify.xoo
new file mode 100644 (file)
index 0000000..393111b
--- /dev/null
@@ -0,0 +1,16 @@
+package sample;
+
+public class ClassToModify {
+       
+       public ClassToModify(int i) {
+               int j = i++;
+       }
+
+       public String addedMethod() {
+    return "This method was added in v2";
+       }
+
+       private String myMethod() {
+               return "hello";
+       }
+}
diff --git a/it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/ClassToModify.xoo.measures b/it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/ClassToModify.xoo.measures
new file mode 100644 (file)
index 0000000..71d6075
--- /dev/null
@@ -0,0 +1,3 @@
+ncloc:16
+classes:1
+
diff --git a/it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/UnchangedClass.xoo b/it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/UnchangedClass.xoo
new file mode 100644 (file)
index 0000000..2b0288f
--- /dev/null
@@ -0,0 +1,12 @@
+package sample;
+
+public class ClassToModify {
+       
+       public ClassToModify(int i) {
+               int j = i++;
+       }
+       
+       private String myMethod() {
+               return "hello";
+       }
+}
diff --git a/it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/UnchangedClass.xoo.measures b/it/it-projects/measure/xoo-history-v2/src/main/xoo/sample/UnchangedClass.xoo.measures
new file mode 100644 (file)
index 0000000..7812e41
--- /dev/null
@@ -0,0 +1,2 @@
+ncloc:12
+classes:1
index 4d6c3a681485a18664758343c9b4caa4cfb11dde..1162d612c9917ba84b2e566fafb84354333a9d66 100644 (file)
@@ -53,14 +53,14 @@ public class MeasureFiltersTest {
   @Test
   public void execute_measure_filters() {
     Selenese selenese = Selenese.builder().setHtmlTestsInClasspath("execution_of_measure_filters",
-      "/measure/measure_filters/link_from_main_header.html",
-      "/measure/measure_filters/initial_search_form.html",
-      "/measure/measure_filters/search_for_projects.html",
-      "/measure/measure_filters/search_for_files.html",
+      "/measure/suite/measure_filters/link_from_main_header.html",
+      "/measure/suite/measure_filters/initial_search_form.html",
+      "/measure/suite/measure_filters/search_for_projects.html",
+      "/measure/suite/measure_filters/search_for_files.html",
       // SONAR-4195
-      "/measure/measure_filters/search-by-key.html",
-      "/measure/measure_filters/search-by-name.html",
-      "/measure/measure_filters/empty_filter.html"
+      "/measure/suite/measure_filters/search-by-key.html",
+      "/measure/suite/measure_filters/search-by-name.html",
+      "/measure/suite/measure_filters/empty_filter.html"
       ).build();
     orchestrator.executeSelenese(selenese);
   }
@@ -68,11 +68,11 @@ public class MeasureFiltersTest {
   @Test
   public void display_measure_filter_as_list() {
     Selenese selenese = Selenese.builder().setHtmlTestsInClasspath("display_measure_filter_as_list",
-      "/measure/measure_filters/list_change_columns.html",
-      "/measure/measure_filters/list_delete_column.html",
-      "/measure/measure_filters/list_move_columns.html",
-      "/measure/measure_filters/list_sort_by_descending_name.html",
-      "/measure/measure_filters/list_sort_by_ncloc.html"
+      "/measure/suite/measure_filters/list_change_columns.html",
+      "/measure/suite/measure_filters/list_delete_column.html",
+      "/measure/suite/measure_filters/list_move_columns.html",
+      "/measure/suite/measure_filters/list_sort_by_descending_name.html",
+      "/measure/suite/measure_filters/list_sort_by_ncloc.html"
       ).build();
     orchestrator.executeSelenese(selenese);
   }
@@ -86,7 +86,7 @@ public class MeasureFiltersTest {
     try {
       Selenese selenese = Selenese.builder().setHtmlTestsInClasspath("share_measure_filters",
         // SONAR-4469
-        "/measure/measure_filters/should-unshare-filter-remove-other-filters-favourite.html"
+        "/measure/suite/measure_filters/should-unshare-filter-remove-other-filters-favourite.html"
         ).build();
       orchestrator.executeSelenese(selenese);
 
@@ -105,7 +105,7 @@ public class MeasureFiltersTest {
 
     try {
       orchestrator.executeSelenese(Selenese.builder().setHtmlTestsInClasspath("should_not_share_filter_when_user_have_no_sharing_permissions",
-        "/measure/measure_filters/should-not-share-filter-when-user-have-no-sharing-permissions.html"
+        "/measure/suite/measure_filters/should-not-share-filter-when-user-have-no-sharing-permissions.html"
         ).build());
     } finally {
       deactivateUser(user);
@@ -115,8 +115,8 @@ public class MeasureFiltersTest {
   @Test
   public void copy_measure_filters() {
     Selenese selenese = Selenese.builder().setHtmlTestsInClasspath("copy_measure_filters",
-      "/measure/measure_filters/copy_measure_filter.html",
-      "/measure/measure_filters/copy_uniqueness_of_name.html"
+      "/measure/suite/measure_filters/copy_measure_filter.html",
+      "/measure/suite/measure_filters/copy_uniqueness_of_name.html"
       ).build();
     orchestrator.executeSelenese(selenese);
   }
@@ -124,7 +124,7 @@ public class MeasureFiltersTest {
   @Test
   public void manage_measure_filters() {
     Selenese selenese = Selenese.builder().setHtmlTestsInClasspath("manage_measure_filters",
-      "/measure/measure_filters/save_with_special_characters.html"
+      "/measure/suite/measure_filters/save_with_special_characters.html"
       ).build();
     orchestrator.executeSelenese(selenese);
   }
@@ -132,9 +132,9 @@ public class MeasureFiltersTest {
   @Test
   public void measure_filter_list_widget() {
     Selenese selenese = Selenese.builder().setHtmlTestsInClasspath("measure_filter_list_widget",
-      "/measure/measure_filters/list_widget.html",
-      "/measure/measure_filters/list_widget_sort.html",
-      "/measure/measure_filters/list_widget_warning_if_missing_filter.html"
+      "/measure/suite/measure_filters/list_widget.html",
+      "/measure/suite/measure_filters/list_widget_sort.html",
+      "/measure/suite/measure_filters/list_widget_warning_if_missing_filter.html"
       ).build();
     orchestrator.executeSelenese(selenese);
   }
diff --git a/it/it-tests/src/test/java/measure/suite/TimeMachineTest.java b/it/it-tests/src/test/java/measure/suite/TimeMachineTest.java
new file mode 100644 (file)
index 0000000..6db9cb9
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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 measure.suite;
+
+import com.sonar.orchestrator.Orchestrator;
+import com.sonar.orchestrator.build.BuildResult;
+import com.sonar.orchestrator.build.SonarRunner;
+import com.sonar.orchestrator.locator.FileLocation;
+import java.util.Date;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.sonar.wsclient.services.Resource;
+import org.sonar.wsclient.services.ResourceQuery;
+import org.sonar.wsclient.services.TimeMachine;
+import org.sonar.wsclient.services.TimeMachineCell;
+import org.sonar.wsclient.services.TimeMachineQuery;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.projectDir;
+
+public class TimeMachineTest {
+
+  private static final String PROJECT = "sample";
+
+  @ClassRule
+  public static Orchestrator orchestrator = MeasuresTestSuite.ORCHESTRATOR;
+
+  @BeforeClass
+  public static void initialize() {
+    orchestrator.resetData();
+    orchestrator.getServer().restoreProfile(FileLocation.ofClasspath("/measure/suite/TimeMachineTest/one-issue-per-line-profile.xml"));
+    orchestrator.getServer().provisionProject("sample", "Sample");
+    orchestrator.getServer().associateProjectToQualityProfile("sample", "xoo", "one-issue-per-line");
+    analyzeProject("measure/xoo-history-v1", "2014-10-19");
+    analyzeProject("measure/xoo-history-v2", "2014-11-13");
+  }
+
+  private static BuildResult analyzeProject(String path, String date) {
+    return orchestrator.executeBuild(SonarRunner.create(projectDir(path), "sonar.projectDate", date));
+  }
+
+  @Test
+  public void projectIsAnalyzed() {
+    assertThat(orchestrator.getServer().getWsClient().find(new ResourceQuery(PROJECT)).getVersion()).isEqualTo("1.0-SNAPSHOT");
+    assertThat(orchestrator.getServer().getWsClient().find(new ResourceQuery(PROJECT)).getDate().getMonth()).isEqualTo(10); // November
+  }
+
+  @Test
+  public void testHistoryOfIssues() {
+    TimeMachineQuery query = TimeMachineQuery.createForMetrics(PROJECT, "blocker_violations", "critical_violations", "major_violations",
+      "minor_violations", "info_violations");
+    TimeMachine timemachine = orchestrator.getServer().getWsClient().find(query);
+    assertThat(timemachine.getCells().length).isEqualTo(2);
+
+    TimeMachineCell cell1 = timemachine.getCells()[0];
+    TimeMachineCell cell2 = timemachine.getCells()[1];
+
+    assertThat(cell1.getDate().getMonth()).isEqualTo(9);
+    assertThat(cell1.getValues()).isEqualTo(new Object[] {0L, 0L, 0L, 26L, 0L});
+
+    assertThat(cell2.getDate().getMonth()).isEqualTo(10);
+    assertThat(cell2.getValues()).isEqualTo(new Object[] {0L, 0L, 0L, 43L, 0L});
+  }
+
+  @Test
+  public void testHistoryOfMeasures() {
+    TimeMachineQuery query = TimeMachineQuery.createForMetrics(PROJECT, "lines", "ncloc");
+    TimeMachine timemachine = orchestrator.getServer().getWsClient().find(query);
+    assertThat(timemachine.getCells().length).isEqualTo(2);
+
+    TimeMachineCell cell1 = timemachine.getCells()[0];
+    TimeMachineCell cell2 = timemachine.getCells()[1];
+
+    assertThat(cell1.getDate().getMonth()).isEqualTo(9);
+    assertThat(cell1.getValues()).isEqualTo(new Object[] {26L, 24L});
+
+    assertThat(cell2.getDate().getMonth()).isEqualTo(10);
+    assertThat(cell2.getValues()).isEqualTo(new Object[] {43L, 40L});
+  }
+
+  @Test
+  public void unknownMetrics() {
+    TimeMachine timemachine = orchestrator.getServer().getWsClient().find(TimeMachineQuery.createForMetrics(PROJECT, "notfound"));
+    assertThat(timemachine.getCells().length).isEqualTo(0);
+
+    timemachine = orchestrator.getServer().getWsClient().find(TimeMachineQuery.createForMetrics(PROJECT, "lines", "notfound"));
+    assertThat(timemachine.getCells().length).isEqualTo(2);
+    for (TimeMachineCell cell : timemachine.getCells()) {
+      assertThat(cell.getValues().length).isEqualTo(1);
+      assertThat(cell.getValues()[0]).isInstanceOf(Long.class);
+    }
+
+    timemachine = orchestrator.getServer().getWsClient().find(TimeMachineQuery.createForMetrics(PROJECT));
+    assertThat(timemachine.getCells().length).isEqualTo(0);
+  }
+
+  @Test
+  public void noDataForInterval() {
+    Date now = new Date();
+    TimeMachine timemachine = orchestrator.getServer().getWsClient().find(TimeMachineQuery.createForMetrics(PROJECT, "lines").setFrom(now).setTo(now));
+    assertThat(timemachine.getCells().length).isEqualTo(0);
+  }
+
+  @Test
+  public void unknownResource() {
+    TimeMachine timemachine = orchestrator.getServer().getWsClient().find(TimeMachineQuery.createForMetrics("notfound:notfound", "lines"));
+    assertThat(timemachine).isNull();
+  }
+
+  @Test
+  public void test_measure_variations() {
+    Resource project = getProject("files", "ncloc", "violations");
+
+    // period 1 : previous analysis
+    assertThat(project.getPeriod1Mode()).isEqualTo("previous_analysis");
+    assertThat(project.getPeriod1Date()).isNotNull();
+
+    // variations from previous analysis
+    assertThat(project.getMeasure("files").getVariation1()).isEqualTo(1.0);
+    assertThat(project.getMeasure("ncloc").getVariation1()).isEqualTo(16.0);
+    assertThat(project.getMeasure("violations").getVariation1()).isGreaterThan(0.0);
+  }
+
+  /**
+   * SONAR-4962
+   */
+  @Test
+  public void measure_variations_are_only_meaningful_when_includetrends() {
+    String[] metricKeys = {"violations", "new_violations"};
+
+    Resource projectWithTrends = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(PROJECT, metricKeys).setIncludeTrends(true));
+    assertThat(projectWithTrends.getMeasure("violations")).isNotNull();
+    assertThat(projectWithTrends.getMeasure("new_violations")).isNotNull();
+
+    Resource projectWithoutTrends = orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(PROJECT, metricKeys).setIncludeTrends(false));
+    assertThat(projectWithoutTrends.getMeasure("violations")).isNotNull();
+    assertThat(projectWithoutTrends.getMeasure("new_violations")).isNull();
+  }
+
+  private Resource getProject(String... metricKeys) {
+    return orchestrator.getServer().getWsClient().find(ResourceQuery.createForMetrics(PROJECT, metricKeys).setIncludeTrends(true));
+  }
+}
diff --git a/it/it-tests/src/test/resources/measure/suite/TimeMachineTest/one-issue-per-line-profile.xml b/it/it-tests/src/test/resources/measure/suite/TimeMachineTest/one-issue-per-line-profile.xml
new file mode 100644 (file)
index 0000000..521adc7
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<profile>
+  <name>one-issue-per-line</name>
+  <language>xoo</language>
+  <rules>
+    <rule>
+      <repositoryKey>xoo</repositoryKey>
+      <key>OneIssuePerLine</key>
+      <priority>MINOR</priority>
+    </rule>
+  </rules>
+</profile>
\ No newline at end of file
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/copy_measure_filter.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/copy_measure_filter.html
new file mode 100644 (file)
index 0000000..22005c9
--- /dev/null
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>copy_measure_filter</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+       <td>storeEval</td>
+       <td>'list_'+(new Date()).getTime()</td>
+       <td>FILTER_NAME</td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/sessions/logout</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/sessions/new</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=login</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=password</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>name=commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/measures</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForElementPresent</td>
+       <td>name=qualifiers[]</td>
+       <td></td>
+</tr>
+<tr>
+       <td>select</td>
+       <td>name=qualifiers[]</td>
+       <td>Files</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>class=navigator-filter-submit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=save-as</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForElementPresent</td>
+       <td>save-as-filter-form</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=name</td>
+       <td>${FILTER_NAME}</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=save-as-submit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>filter-title</td>
+       <td>*${FILTER_NAME}*</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=copy</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForElementPresent</td>
+       <td>copy-filter-form</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=name</td>
+       <td>copy of ${FILTER_NAME}</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=description</td>
+       <td>description of copy</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>id=copy-submit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>filter-title</td>
+       <td>*copy of ${FILTER_NAME}*</td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>filter-description</td>
+       <td>*description of copy*</td>
+</tr>
+<tr>
+       <td>waitForElementPresent</td>
+       <td>name=qualifiers[]</td>
+       <td>Files</td>
+</tr>
+<tr>
+       <td>assertSelectedLabel</td>
+       <td>name=qualifiers[]</td>
+       <td>Files</td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/copy_uniqueness_of_name.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/copy_uniqueness_of_name.html
new file mode 100644 (file)
index 0000000..7f6f914
--- /dev/null
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>copy_uniqueness_of_name</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+       <td>store</td>
+       <td>javascript{'list_'+(new Date()).getTime()}</td>
+       <td>FILTER_NAME</td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/sessions/logout</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/sessions/new</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=login</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=password</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>name=commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/measures</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForElementPresent</td>
+       <td>name=qualifiers[]</td>
+       <td></td>
+</tr>
+<tr>
+       <td>select</td>
+       <td>name=qualifiers[]</td>
+       <td>Files</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>class=navigator-filter-submit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=save-as</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForElementPresent</td>
+       <td>save-as-filter-form</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=name</td>
+       <td>${FILTER_NAME}</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=save-as-submit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>filter-title</td>
+       <td>*${FILTER_NAME}*</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=copy</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForElementPresent</td>
+       <td>copy-filter-form</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=name</td>
+       <td>${FILTER_NAME}</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=copy-submit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>copy-filter-form</td>
+       <td>*Name already exists*</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=name</td>
+       <td>copy of ${FILTER_NAME}</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=copy-submit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>filter-title</td>
+       <td>*copy of ${FILTER_NAME}*</td>
+</tr>
+<tr>
+       <td>waitForElementPresent</td>
+       <td>name=qualifiers[]</td>
+       <td>Files</td>
+</tr>
+<tr>
+       <td>assertSelectedLabel</td>
+       <td>name=qualifiers[]</td>
+       <td>Files</td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/empty_filter.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/empty_filter.html
new file mode 100644 (file)
index 0000000..65ebe35
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>empty_filter</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/measures/search</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>measures-table</td>
+        <td>*No data*</td>
+    </tr>
+    <tr>
+        <td>assertNotText</td>
+        <td>measures-table</td>
+        <td>*Struts*</td>
+    </tr>
+
+    </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/initial_search_form.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/initial_search_form.html
new file mode 100644 (file)
index 0000000..863df6c
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>initial_search_form</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/measures</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForElementPresent</td>
+        <td>name=qualifiers[]</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForText</td>
+        <td>class=navigator-filters</td>
+        <td>*More Criteria*</td>
+    </tr>
+    <tr>
+        <td>assertElementNotPresent</td>
+        <td>measures-table</td>
+        <td></td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/link_from_main_header.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/link_from_main_header.html
new file mode 100644 (file)
index 0000000..c92986d
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>link_from_main_header</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForElementPresent</td>
+        <td>link=Measures</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>link=Measures</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertLocation</td>
+        <td>*/measures*</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementPresent</td>
+        <td>class=navigator-filters</td>
+        <td></td>
+    </tr>
+
+    </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/list_change_columns.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/list_change_columns.html
new file mode 100644 (file)
index 0000000..b23e78c
--- /dev/null
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>configure-table-columns</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/measures</td>
+        <td></td>
+    </tr>
+    <tr>
+      <td>waitForElementPresent</td>
+      <td>name=qualifiers[]</td>
+      <td></td>
+    </tr>
+    <tr>
+        <td>select</td>
+        <td>name=qualifiers[]</td>
+        <td>Files</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>class=navigator-filter-submit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=change-display</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>select</td>
+        <td>select-metric</td>
+        <td>Complexity</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=add-metric</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>measures-table</td>
+        <td>*Name*Cmpx*</td>
+    </tr>
+    <tr>
+        <td>select</td>
+        <td>select-metric</td>
+        <td>Comment lines</td>
+    </tr>
+    <tr>
+        <td>select</td>
+        <td>id=select-period</td>
+        <td>label=since previous analysis</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=add-metric</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>measures-table</td>
+        <td>*Name*Cmpx*Comment lines*last*</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=exit-edit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>measures-table</td>
+        <td>*Name*Cmpx*Comment lines*last*</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/list_delete_column.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/list_delete_column.html
new file mode 100644 (file)
index 0000000..3075d43
--- /dev/null
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>delete_column</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/measures</td>
+        <td></td>
+    </tr>
+    <tr>
+      <td>waitForElementPresent</td>
+      <td>name=qualifiers[]</td>
+      <td></td>
+    </tr>
+    <tr>
+        <td>select</td>
+        <td>name=qualifiers[]</td>
+        <td>Files</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>class=navigator-filter-submit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=change-display</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>measures-table</td>
+        <td>*Name*Last Analysis*LOC*</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>delete-date</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForText</td>
+        <td>measures-table</td>
+        <td>*Name*LOC*</td>
+    </tr>
+    <tr>
+        <td>assertNotText</td>
+        <td>measures-table</td>
+        <td>*Last Analysis*</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=exit-edit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>measures-table</td>
+        <td>*Name*LOC*</td>
+    </tr>
+    <tr>
+        <td>assertNotText</td>
+        <td>measures-table</td>
+        <td>*Last Analysis*</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/list_move_columns.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/list_move_columns.html
new file mode 100644 (file)
index 0000000..ee78b26
--- /dev/null
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>move_columns</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/measures</td>
+        <td></td>
+    </tr>
+    <tr>
+      <td>waitForElementPresent</td>
+      <td>name=qualifiers[]</td>
+      <td></td>
+    </tr>
+    <tr>
+        <td>select</td>
+        <td>name=qualifiers[]</td>
+        <td>Files</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>class=navigator-filter-submit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=change-display</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>measures-table</td>
+        <td>*Name*Last Analysis*LOC*</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>left-date</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForText</td>
+        <td>measures-table</td>
+        <td>*Last Analysis*Name*LOC*</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>right-name</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForText</td>
+        <td>measures-table</td>
+        <td>*Last Analysis*LOC*Name*</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=exit-edit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>measures-table</td>
+        <td>*Last Analysis*LOC*Name*</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/list_sort_by_descending_name.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/list_sort_by_descending_name.html
new file mode 100644 (file)
index 0000000..8705a7e
--- /dev/null
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ SonarQube, open source software quality management tool.
+  ~ Copyright (C) 2008-2014 SonarSource
+  ~ mailto:contact AT sonarsource DOT com
+  ~
+  ~ SonarQube 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.
+  ~
+  ~ SonarQube 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.
+  -->
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>list_sort_by_descending_name</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/measures</td>
+        <td></td>
+    </tr>
+    <tr>
+      <td>waitForElementPresent</td>
+      <td>name=qualifiers[]</td>
+      <td></td>
+    </tr>
+    <tr>
+        <td>select</td>
+        <td>name=qualifiers[]</td>
+        <td>Files</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>class=navigator-filter-submit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertElementPresent</td>
+        <td>measures-table</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>link=Name</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>measures-table</td>
+        <td>*b2/HelloB2.xoo*b1/HelloB1.xoo*a2/HelloA2.xoo*a1/HelloA1.xoo*</td>
+    </tr>
+
+    </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/list_sort_by_ncloc.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/list_sort_by_ncloc.html
new file mode 100644 (file)
index 0000000..95ef3b0
--- /dev/null
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ SonarQube, open source software quality management tool.
+  ~ Copyright (C) 2008-2014 SonarSource
+  ~ mailto:contact AT sonarsource DOT com
+  ~
+  ~ SonarQube 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.
+  ~
+  ~ SonarQube 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.
+  -->
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  <title>list_sort_by_ncloc</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+  <tbody>
+  <tr>
+    <td>open</td>
+    <td>/sonar/measures</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForElementPresent</td>
+    <td>name=qualifiers[]</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>select</td>
+    <td>name=qualifiers[]</td>
+    <td>Files</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>class=navigator-filter-submit</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertElementPresent</td>
+    <td>measures-table</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertText</td>
+    <td>css=#measures-table tfoot</td>
+    <td>*4 results*</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>link=LOC</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertText</td>
+    <td>measures-table</td>
+    <td>*a2/HelloA2.xoo*a1/HelloA1.xoo*b1/HelloB1.xoo*b2/HelloB2.xoo*</td>
+  </tr>
+  <tr>
+    <td>assertText</td>
+    <td>css=#measures-table tfoot</td>
+    <td>*4 results*</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>link=LOC</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertText</td>
+    <td>css=#measures-table tfoot</td>
+    <td>*4 results*</td>
+  </tr>
+  <tr>
+    <td>assertText</td>
+    <td>measures-table</td>
+    <td>*a1/HelloA1.xoo*b1/HelloB1.xoo*b2/HelloB2.xoo*a2/HelloA2.xoo*</td>
+  </tr>
+  </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/list_widget.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/list_widget.html
new file mode 100644 (file)
index 0000000..8169582
--- /dev/null
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ SonarQube, open source software quality management tool.
+  ~ Copyright (C) 2008-2014 SonarSource
+  ~ mailto:contact AT sonarsource DOT com
+  ~
+  ~ SonarQube 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.
+  ~
+  ~ SonarQube 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.
+  -->
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>list_widget</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/logout</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/measures/manage</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>name=commit</td>
+        <td></td>
+    </tr>
+
+    <tr>
+        <td>clickAndWait</td>
+        <td>xpath=(//table[contains(@id, 'shared-filters')]//a[contains(text(),'Projects')])</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>storeEval</td>
+        <td>window.location.pathname.split('/').last()</td>
+        <td>FILTER_ID</td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/widget?id=measure_filter_list&amp;filter=${FILTER_ID}</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>block_1</td>
+        <td>*Name*Version*LOC*Last Analysis*</td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>block_1</td>
+        <td>*Multi-modules Sample*1.0-SNAPSHOT*</td>
+    </tr>
+    <tr>
+        <td>assertNotText</td>
+        <td>block_1</td>
+        <td>*Module A*</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/list_widget_sort.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/list_widget_sort.html
new file mode 100644 (file)
index 0000000..82b5f7e
--- /dev/null
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ SonarQube, open source software quality management tool.
+  ~ Copyright (C) 2008-2014 SonarSource
+  ~ mailto:contact AT sonarsource DOT com
+  ~
+  ~ SonarQube 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.
+  ~
+  ~ SonarQube 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.
+  -->
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>list_widget_sort</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+       <td>storeEval</td>
+       <td>'sort_widget_'+(new Date()).getTime()</td>
+       <td>FILTER_NAME</td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/sessions/logout</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/sessions/new</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>login</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>password</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>name=commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/measures</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>class=navigator-filters</td>
+       <td>*More Criteria*</td>
+</tr>
+<tr>
+       <td>select</td>
+       <td>name=qualifiers[]</td>
+       <td>Files</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>class=navigator-filter-submit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=save-as</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForElementPresent</td>
+       <td>save-as-filter-form</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>name</td>
+       <td>${FILTER_NAME}</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>id=save-as-submit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>storeEval</td>
+       <td>window.location.pathname.split('/').last()</td>
+       <td>FILTER_ID</td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/widget?id=measure_filter_list&amp;filter=${FILTER_ID}</td>
+       <td></td>
+</tr>
+<tr>
+       <td>assertText</td>
+       <td>block_1</td>
+       <td>*Name*LOC*</td>
+</tr>
+<tr>
+       <td>assertText</td>
+       <td>block_1</td>
+       <td>*a1/HelloA1.xoo*a2/HelloA2.xoo*b1/HelloB1.xoo*b2/HelloB2.xoo*</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>link=LOC</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>block_1</td>
+       <td>*a2/HelloA2.xoo*a1/HelloA1.xoo*b1/HelloB1.xoo*b2/HelloB2.xoo*</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>link=LOC</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>block_1</td>
+       <td>*HelloA1*HelloB1*HelloB2*HelloA2*</td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/list_widget_warning_if_missing_filter.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/list_widget_warning_if_missing_filter.html
new file mode 100644 (file)
index 0000000..4bcd30c
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>list_widget</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/widget?id=measure_filter_list</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>block_1</td>
+        <td>*This widget is configured to display a measure filter that does not exist anymore.*</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/save_with_special_characters.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/save_with_special_characters.html
new file mode 100644 (file)
index 0000000..19b1167
--- /dev/null
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>save_with_special_characters</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+
+    <tbody>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/logout</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/sessions/new</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>login</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>password</td>
+        <td>admin</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>commit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>open</td>
+        <td>/sonar/measures</td>
+        <td></td>
+    </tr>
+    <tr>
+      <td>waitForElementPresent</td>
+      <td>name=qualifiers[]</td>
+      <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>class=navigator-filter-submit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>id=save-as</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForElementPresent</td>
+        <td>save-as-filter-form</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=name</td>
+        <td>special $àé'@&quot;</td>
+    </tr>
+    <tr>
+        <td>type</td>
+        <td>id=description</td>
+        <td>description with special characters &quot; ' éà</td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=save-as-submit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>filter-description</td>
+        <td>*description with special characters &quot; ' éà*</td>
+    </tr>
+    <tr>
+      <td>waitForElementPresent</td>
+      <td>id=manage-favorites</td>
+      <td></td>
+    </tr>
+    <tr>
+        <td>clickAndWait</td>
+        <td>id=manage-favorites</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>assertText</td>
+        <td>my-filters</td>
+        <td>*special $àé'@&quot;*description with special characters &quot; ' éà*</td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>id=delete_special-ae</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForElementPresent</td>
+        <td>confirm-submit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>click</td>
+        <td>id=confirm-submit</td>
+        <td></td>
+    </tr>
+    <tr>
+        <td>waitForNotText</td>
+        <td>my-filters</td>
+        <td>*special $àé'@&quot;*</td>
+    </tr>
+    </tbody>
+</table>
+</body>
+</html>
+
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/search-by-key.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/search-by-key.html
new file mode 100644 (file)
index 0000000..50fce19
--- /dev/null
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ SonarQube, open source software quality management tool.
+  ~ Copyright (C) 2008-2014 SonarSource
+  ~ mailto:contact AT sonarsource DOT com
+  ~
+  ~ SonarQube 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.
+  ~
+  ~ SonarQube 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.
+  -->
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  <title>search-by-key</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+  <tbody>
+  <tr>
+    <td>open</td>
+    <td>/sonar/measures</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForElementPresent</td>
+    <td>name=qualifiers[]</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>select</td>
+    <td>name=qualifiers[]</td>
+    <td>Projects</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>name=keySearch</td>
+    <td>multi-modules</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>class=navigator-filter-submit</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertText</td>
+    <td>measures-table</td>
+    <td>*Sonar :: Integration Tests :: Multi-modules Sample*</td>
+  </tr>
+  <tr>
+    <td>assertText</td>
+    <td>css=#measures-table tfoot</td>
+    <td>*1 results*</td>
+  </tr>
+  </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/search-by-name.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/search-by-name.html
new file mode 100644 (file)
index 0000000..2c4fb8c
--- /dev/null
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ SonarQube, open source software quality management tool.
+  ~ Copyright (C) 2008-2014 SonarSource
+  ~ mailto:contact AT sonarsource DOT com
+  ~
+  ~ SonarQube 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.
+  ~
+  ~ SonarQube 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.
+  -->
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  <title>search-by-name</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+  <tbody>
+  <tr>
+    <td>open</td>
+    <td>/sonar/measures</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForElementPresent</td>
+    <td>name=qualifiers[]</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>select</td>
+    <td>name=qualifiers[]</td>
+    <td>Projects</td>
+  </tr>
+  <tr>
+    <td>type</td>
+    <td>name=nameSearch</td>
+    <td>Integration</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>class=navigator-filter-submit</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertText</td>
+    <td>measures-table</td>
+    <td>*Sonar :: Integration Tests :: Multi-modules Sample*</td>
+  </tr>
+  <tr>
+    <td>assertText</td>
+    <td>css=#measures-table tfoot</td>
+    <td>*1 results*</td>
+  </tr>
+  </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/search_for_files.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/search_for_files.html
new file mode 100644 (file)
index 0000000..4e001a5
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  <title>search_for_files</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+  <tbody>
+  <tr>
+    <td>open</td>
+    <td>/sonar/measures</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForElementPresent</td>
+    <td>name=qualifiers[]</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>select</td>
+    <td>name=qualifiers[]</td>
+    <td>Files</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>class=navigator-filter-submit</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertText</td>
+    <td>measures-table</td>
+    <td>*a1/HelloA1.xoo*a2/HelloA2.xoo*b1/HelloB1.xoo*b2/HelloB2.xoo*</td>
+  </tr>
+  <tr>
+    <td>assertText</td>
+    <td>css=#measures-table tfoot</td>
+    <td>*4 results*</td>
+  </tr>
+  <tr>
+    <td>assertNotText</td>
+    <td>measures-table</td>
+    <td>*Module A*</td>
+  </tr>
+  </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/search_for_projects.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/search_for_projects.html
new file mode 100644 (file)
index 0000000..c7c0e83
--- /dev/null
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ SonarQube, open source software quality management tool.
+  ~ Copyright (C) 2008-2014 SonarSource
+  ~ mailto:contact AT sonarsource DOT com
+  ~
+  ~ SonarQube 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.
+  ~
+  ~ SonarQube 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.
+  -->
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  <title>search_for_projects_by_default</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+  <tbody>
+  <tr>
+    <td>open</td>
+    <td>/sonar/measures</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>waitForElementPresent</td>
+    <td>name=qualifiers[]</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>select</td>
+    <td>name=qualifiers[]</td>
+    <td>Projects</td>
+  </tr>
+  <tr>
+    <td>clickAndWait</td>
+    <td>class=navigator-filter-submit</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertElementPresent</td>
+    <td>measures-table</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>assertText</td>
+    <td>measures-table</td>
+    <td>*Sonar :: Integration Tests :: Multi-modules Sample*</td>
+  </tr>
+  </tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/should-not-share-filter-when-user-have-no-sharing-permissions.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/should-not-share-filter-when-user-have-no-sharing-permissions.html
new file mode 100644 (file)
index 0000000..94f85a0
--- /dev/null
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>should_save_issue_filters</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<tbody>
+<tr>
+       <td>storeEval</td>
+       <td>'filter_'+(new Date()).getTime()</td>
+       <td>FILTER_NAME</td>
+</tr>
+<tr>
+    <td>open</td>
+    <td>/sonar/sessions/logout</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/sessions/new</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>login</td>
+       <td>user-measures-filter-with-no-share-perm</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>password</td>
+       <td>password</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/measures</td>
+       <td></td>
+</tr>
+<tr>
+  <td>waitForElementPresent</td>
+  <td>name=qualifiers[]</td>
+  <td></td>
+</tr>
+<tr>
+       <td>select</td>
+       <td>name=qualifiers[]</td>
+       <td>Projects</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>class=navigator-filter-submit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=save-as</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>save-as-filter-form</td>
+       <td>*Save Filter*</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=name</td>
+       <td>user_${FILTER_NAME}</td>
+</tr>
+<tr>
+  <td>assertNotText</td>
+  <td>save-as-filter-form</td>
+  <td>*Shared with all users*</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=save-as-submit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>filter-title</td>
+       <td>*user_${FILTER_NAME}*Private*</td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>
diff --git a/it/it-tests/src/test/resources/measure/suite/measure_filters/should-unshare-filter-remove-other-filters-favourite.html b/it/it-tests/src/test/resources/measure/suite/measure_filters/should-unshare-filter-remove-other-filters-favourite.html
new file mode 100644 (file)
index 0000000..8b6fb44
--- /dev/null
@@ -0,0 +1,249 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+    <title>should_save_issue_filters</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<tbody>
+<tr>
+       <td>storeEval</td>
+       <td>'filter_'+(new Date()).getTime()</td>
+       <td>FILTER_NAME</td>
+</tr>
+<tr>
+    <td>open</td>
+    <td>/sonar/sessions/logout</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/sessions/new</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>login</td>
+       <td>user-measures-filter-with-sharing-perm</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>password</td>
+       <td>password</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/measures</td>
+       <td></td>
+</tr>
+<tr>
+  <td>waitForElementPresent</td>
+  <td>name=qualifiers[]</td>
+  <td></td>
+</tr>
+<tr>
+       <td>select</td>
+       <td>name=qualifiers[]</td>
+       <td>Projects</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>class=navigator-filter-submit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=save-as</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>save-as-filter-form</td>
+       <td>*Save Filter*</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>id=name</td>
+       <td>user_${FILTER_NAME}</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=shared</td>
+       <td></td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=save-as-submit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>filter-title</td>
+       <td>*user_${FILTER_NAME}*Shared with all users*</td>
+</tr>
+<tr>
+    <td>open</td>
+    <td>/sonar/sessions/logout</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/sessions/new</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>login</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>password</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/measures/manage</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>content</td>
+       <td>*My Measures Filters*</td>
+</tr>
+<tr>
+       <td>assertText</td>
+       <td>shared-filters</td>
+       <td>*user_${FILTER_NAME}*</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=star-user_${FILTER_NAME}</td>
+       <td></td>
+</tr>
+<tr>
+    <td>open</td>
+    <td>/sonar/sessions/logout</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/sessions/new</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>login</td>
+       <td>user-measures-filter-with-sharing-perm</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>password</td>
+       <td>password</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/measures</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForElementPresent</td>
+       <td>id=manage-favorites</td>
+       <td></td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>id=manage-favorites</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>my-filters</td>
+       <td>*user_${FILTER_NAME}*</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>id=edit_user_${FILTER_NAME}</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>edit-filter-form</td>
+       <td>*Edit Filter*</td>
+</tr>
+<tr>
+       <td>click</td>
+       <td>shared</td>
+       <td></td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>id=save-submit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>filter-title</td>
+       <td>*user_${FILTER_NAME}*Private*</td>
+</tr>
+<tr>
+    <td>open</td>
+    <td>/sonar/sessions/logout</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/sessions/new</td>
+       <td></td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>login</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>type</td>
+       <td>password</td>
+       <td>admin</td>
+</tr>
+<tr>
+       <td>clickAndWait</td>
+       <td>commit</td>
+       <td></td>
+</tr>
+<tr>
+       <td>open</td>
+       <td>/sonar/measures/manage</td>
+       <td></td>
+</tr>
+<tr>
+       <td>waitForText</td>
+       <td>content</td>
+       <td>*My Measures Filters*</td>
+</tr>
+<tr>
+       <td>assertNotText</td>
+       <td>shared-filters</td>
+       <td>*user_${FILTER_NAME}*</td>
+</tr>
+</tbody>
+</table>
+</body>
+</html>