aboutsummaryrefslogtreecommitdiffstats
path: root/it/it-plugins
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2016-02-15 15:19:25 +0100
committerJulien Lancelot <julien.lancelot@sonarsource.com>2016-02-15 17:04:48 +0100
commit6b1c892c3b40a9fd5e3210cf5c6c411ff3165236 (patch)
tree79ba3a96c07b0685c1d6b4639a263f0e5243ff50 /it/it-plugins
parent548073320479de0adac1c79db0766dcfa70137d8 (diff)
downloadsonarqube-6b1c892c3b40a9fd5e3210cf5c6c411ff3165236.tar.gz
sonarqube-6b1c892c3b40a9fd5e3210cf5c6c411ff3165236.zip
Migrate UI ITs
Diffstat (limited to 'it/it-plugins')
-rw-r--r--it/it-plugins/pom.xml2
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/pom.xml39
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/AbstractWidget.java39
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/RequiredMeasuresWidgetsDashboard.java48
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/RequiredMeasuresWidgetsPlugin.java35
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetMandatoryAndOneOfSatisfied.java26
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetMandatoryNotSatisfied.java26
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetMandatorySatisfied.java26
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetMandatorySatisfiedButNotOneOf.java26
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetNoConstraints.java27
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetOneOfNotSatisfied.java26
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetOneOfSatisfied.java26
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetOneOfSatisfiedButNotMandatory.java26
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetMandatoryAndOneOfSatisfied.html.erb1
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetMandatoryNotSatisfied.html.erb2
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetMandatorySatisfied.html.erb1
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetMandatorySatisfiedButNotOneOf.html.erb2
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetNoConstraints.html.erb1
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetOneOfNotSatisfied.html.erb2
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetOneOfSatisfied.html.erb1
-rw-r--r--it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetOneOfSatisfiedButNotMandatory.html.erb2
-rw-r--r--it/it-plugins/ui-extensions-plugin/pom.xml39
-rw-r--r--it/it-plugins/ui-extensions-plugin/src/main/java/FakePageDecorations.java28
-rw-r--r--it/it-plugins/ui-extensions-plugin/src/main/java/ResourceConfigurationPage.java39
-rw-r--r--it/it-plugins/ui-extensions-plugin/src/main/java/RubyApiGlobalPage.java40
-rw-r--r--it/it-plugins/ui-extensions-plugin/src/main/java/RubyApiProjectPage.java42
-rw-r--r--it/it-plugins/ui-extensions-plugin/src/main/java/UiExtensionsPlugin.java34
-rw-r--r--it/it-plugins/ui-extensions-plugin/src/main/resources/fake_page_decoration.html.erb22
-rw-r--r--it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/controllers/fake_app_controller.rb10
-rw-r--r--it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/controllers/resource_configuration_sample_controller.rb9
-rw-r--r--it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/helpers/fake_app_helper.rb5
-rw-r--r--it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/views/fake_app/_advanced.html.erb9
-rw-r--r--it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/views/fake_app/index.html.erb2
-rw-r--r--it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/views/resource_configuration_sample/index.html.erb2
-rw-r--r--it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/init.rb1
-rw-r--r--it/it-plugins/ui-extensions-plugin/src/main/resources/ruby-api-global-page.erb33
-rw-r--r--it/it-plugins/ui-extensions-plugin/src/main/resources/ruby-api-project.page.rb3
-rw-r--r--it/it-plugins/ui-extensions-plugin/src/main/resources/static/cute.jpgbin0 -> 23245 bytes
-rw-r--r--it/it-plugins/ui-extensions-plugin/src/main/resources/static/file.html6
39 files changed, 708 insertions, 0 deletions
diff --git a/it/it-plugins/pom.xml b/it/it-plugins/pom.xml
index a44beb0b8f2..dfaf77516f2 100644
--- a/it/it-plugins/pom.xml
+++ b/it/it-plugins/pom.xml
@@ -43,12 +43,14 @@
<module>project-builder-plugin</module>
<module>property-relocation-plugin</module>
<module>property-sets-plugin</module>
+ <module>required-measures-widgets-plugin</module>
<module>security-plugin</module>
<module>server-plugin</module>
<module>settings-encryption-plugin</module>
<module>settings-plugin</module>
<module>sonar-fake-plugin</module>
<module>sonar-subcategories-plugin</module>
+ <module>ui-extensions-plugin</module>
<module>issue-filter-plugin</module>
</modules>
</project>
diff --git a/it/it-plugins/required-measures-widgets-plugin/pom.xml b/it/it-plugins/required-measures-widgets-plugin/pom.xml
new file mode 100644
index 00000000000..050e8c86fee
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/pom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.sonarsource.sonarqube</groupId>
+ <artifactId>it-plugins</artifactId>
+ <version>5.5-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>required-measures-widgets-plugin</artifactId>
+ <packaging>sonar-plugin</packaging>
+ <version>1.0-SNAPSHOT</version>
+ <description>Plugins :: RequiredMeasures Widgets plugin</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.sonarsource.sonarqube</groupId>
+ <artifactId>sonar-plugin-api</artifactId>
+ <version>${apiVersion}</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
+ <artifactId>sonar-packaging-maven-plugin</artifactId>
+ <version>1.15</version>
+ <extensions>true</extensions>
+ <configuration>
+ <pluginClass>org.sonar.samples.RequiredMeasuresWidgetsPlugin</pluginClass>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/AbstractWidget.java b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/AbstractWidget.java
new file mode 100644
index 00000000000..e142c133358
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/AbstractWidget.java
@@ -0,0 +1,39 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact 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.samples;
+
+import org.sonar.api.web.AbstractRubyTemplate;
+import org.sonar.api.web.RubyRailsWidget;
+
+public abstract class AbstractWidget extends AbstractRubyTemplate implements RubyRailsWidget {
+
+ public String getId() {
+ return this.getClass().getSimpleName();
+ }
+
+ public String getTitle() {
+ return getId();
+ }
+
+ @Override
+ protected String getTemplatePath() {
+ return "/" + getId() + ".html.erb";
+ }
+}
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/RequiredMeasuresWidgetsDashboard.java b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/RequiredMeasuresWidgetsDashboard.java
new file mode 100644
index 00000000000..5799449a7b3
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/RequiredMeasuresWidgetsDashboard.java
@@ -0,0 +1,48 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact 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.samples;
+
+import org.sonar.api.web.Dashboard;
+import org.sonar.api.web.DashboardLayout;
+import org.sonar.api.web.DashboardTemplate;
+
+public final class RequiredMeasuresWidgetsDashboard extends DashboardTemplate {
+
+ @Override
+ public String getName() {
+ return "RequiredMeasuresWidgetsDashboard";
+ }
+
+ @Override
+ public Dashboard createDashboard() {
+ Dashboard dashboard = Dashboard.create();
+ dashboard.setLayout(DashboardLayout.TWO_COLUMNS);
+ dashboard.addWidget("WidgetMandatoryAndOneOfSatisfied", 1);
+ dashboard.addWidget("WidgetMandatoryNotSatisfied", 1);
+ dashboard.addWidget("WidgetMandatorySatisfied", 1);
+ dashboard.addWidget("WidgetMandatorySatisfiedButNotOneOf", 1);
+ dashboard.addWidget("WidgetNoConstraints", 1);
+ dashboard.addWidget("WidgetOneOfNotSatisfied", 1);
+ dashboard.addWidget("WidgetOneOfSatisfied", 1);
+ dashboard.addWidget("WidgetOneOfSatisfiedButNotMandatory", 1);
+ return dashboard;
+ }
+
+}
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/RequiredMeasuresWidgetsPlugin.java b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/RequiredMeasuresWidgetsPlugin.java
new file mode 100644
index 00000000000..b4286630fff
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/RequiredMeasuresWidgetsPlugin.java
@@ -0,0 +1,35 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact 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.samples;
+
+import java.util.Arrays;
+import java.util.List;
+import org.sonar.api.SonarPlugin;
+
+public final class RequiredMeasuresWidgetsPlugin extends SonarPlugin {
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ public List getExtensions() {
+ return Arrays.asList(RequiredMeasuresWidgetsDashboard.class,
+ WidgetMandatoryAndOneOfSatisfied.class, WidgetMandatoryNotSatisfied.class,
+ WidgetMandatorySatisfied.class, WidgetMandatorySatisfiedButNotOneOf.class,
+ WidgetNoConstraints.class, WidgetOneOfNotSatisfied.class,
+ WidgetOneOfSatisfied.class, WidgetOneOfSatisfiedButNotMandatory.class);
+ }
+}
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetMandatoryAndOneOfSatisfied.java b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetMandatoryAndOneOfSatisfied.java
new file mode 100644
index 00000000000..fcda9010a29
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetMandatoryAndOneOfSatisfied.java
@@ -0,0 +1,26 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact 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.samples;
+
+import org.sonar.api.web.RequiredMeasures;
+
+@RequiredMeasures(allOf = {"lines", "complexity"}, anyOf = {"non-core-metric", "lines", "complexity"})
+public class WidgetMandatoryAndOneOfSatisfied extends AbstractWidget {
+}
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetMandatoryNotSatisfied.java b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetMandatoryNotSatisfied.java
new file mode 100644
index 00000000000..07bc2678809
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetMandatoryNotSatisfied.java
@@ -0,0 +1,26 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact 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.samples;
+
+import org.sonar.api.web.RequiredMeasures;
+
+@RequiredMeasures(allOf = {"lines", "non-core-metric"})
+public class WidgetMandatoryNotSatisfied extends AbstractWidget {
+}
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetMandatorySatisfied.java b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetMandatorySatisfied.java
new file mode 100644
index 00000000000..83931b81ca0
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetMandatorySatisfied.java
@@ -0,0 +1,26 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact 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.samples;
+
+import org.sonar.api.web.RequiredMeasures;
+
+@RequiredMeasures(allOf={"lines", "complexity"})
+public class WidgetMandatorySatisfied extends AbstractWidget {
+}
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetMandatorySatisfiedButNotOneOf.java b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetMandatorySatisfiedButNotOneOf.java
new file mode 100644
index 00000000000..938490fcfb3
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetMandatorySatisfiedButNotOneOf.java
@@ -0,0 +1,26 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact 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.samples;
+
+import org.sonar.api.web.RequiredMeasures;
+
+@RequiredMeasures(allOf={"lines", "complexity"}, anyOf={"non-core-metric1", "non-core-metric2", "non-core-metric3"})
+public class WidgetMandatorySatisfiedButNotOneOf extends AbstractWidget {
+}
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetNoConstraints.java b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetNoConstraints.java
new file mode 100644
index 00000000000..ae2cc6171c3
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetNoConstraints.java
@@ -0,0 +1,27 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact 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.samples;
+
+
+/**
+ * Widget without @RequiredMeasures annotation => should always be displayed
+ */
+public class WidgetNoConstraints extends AbstractWidget {
+}
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetOneOfNotSatisfied.java b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetOneOfNotSatisfied.java
new file mode 100644
index 00000000000..9322e596425
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetOneOfNotSatisfied.java
@@ -0,0 +1,26 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact 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.samples;
+
+import org.sonar.api.web.RequiredMeasures;
+
+@RequiredMeasures(anyOf={"non-core-metric1", "non-core-metric2", "non-core-metric3"})
+public class WidgetOneOfNotSatisfied extends AbstractWidget {
+}
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetOneOfSatisfied.java b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetOneOfSatisfied.java
new file mode 100644
index 00000000000..fa22bd152cb
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetOneOfSatisfied.java
@@ -0,0 +1,26 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact 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.samples;
+
+import org.sonar.api.web.RequiredMeasures;
+
+@RequiredMeasures(anyOf={"non-core-metric", "lines", "complexity"})
+public class WidgetOneOfSatisfied extends AbstractWidget {
+}
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetOneOfSatisfiedButNotMandatory.java b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetOneOfSatisfiedButNotMandatory.java
new file mode 100644
index 00000000000..27916c137bb
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/java/org/sonar/samples/WidgetOneOfSatisfiedButNotMandatory.java
@@ -0,0 +1,26 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact 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.samples;
+
+import org.sonar.api.web.RequiredMeasures;
+
+@RequiredMeasures(allOf={"non-core-metric", "complexity"}, anyOf={"lines", "ncloc"})
+public class WidgetOneOfSatisfiedButNotMandatory extends AbstractWidget {
+}
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetMandatoryAndOneOfSatisfied.html.erb b/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetMandatoryAndOneOfSatisfied.html.erb
new file mode 100644
index 00000000000..95741e88577
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetMandatoryAndOneOfSatisfied.html.erb
@@ -0,0 +1 @@
+<b>WidgetMandatoryAndOneOfSatisfied</b> \ No newline at end of file
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetMandatoryNotSatisfied.html.erb b/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetMandatoryNotSatisfied.html.erb
new file mode 100644
index 00000000000..a1120143002
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetMandatoryNotSatisfied.html.erb
@@ -0,0 +1,2 @@
+<b>WidgetMandatoryNotSatisfied</b>
+<b>SHOULD NOT BE DISPLAYED</b> \ No newline at end of file
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetMandatorySatisfied.html.erb b/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetMandatorySatisfied.html.erb
new file mode 100644
index 00000000000..3d363b6dd6a
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetMandatorySatisfied.html.erb
@@ -0,0 +1 @@
+<b>WidgetMandatorySatisfied</b> \ No newline at end of file
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetMandatorySatisfiedButNotOneOf.html.erb b/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetMandatorySatisfiedButNotOneOf.html.erb
new file mode 100644
index 00000000000..69e734e3639
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetMandatorySatisfiedButNotOneOf.html.erb
@@ -0,0 +1,2 @@
+<b>WidgetMandatorySatisfiedButNotOneOf</b>
+<b>SHOULD NOT BE DISPLAYED</b> \ No newline at end of file
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetNoConstraints.html.erb b/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetNoConstraints.html.erb
new file mode 100644
index 00000000000..62797756a25
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetNoConstraints.html.erb
@@ -0,0 +1 @@
+<b>WidgetNoConstraints</b> \ No newline at end of file
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetOneOfNotSatisfied.html.erb b/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetOneOfNotSatisfied.html.erb
new file mode 100644
index 00000000000..583581fcf94
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetOneOfNotSatisfied.html.erb
@@ -0,0 +1,2 @@
+<b>WidgetOneOfNotSatisfied</b>
+<b>SHOULD NOT BE DISPLAYED</b> \ No newline at end of file
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetOneOfSatisfied.html.erb b/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetOneOfSatisfied.html.erb
new file mode 100644
index 00000000000..0bdb6139a09
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetOneOfSatisfied.html.erb
@@ -0,0 +1 @@
+<b>WidgetOneOfSatisfied</b> \ No newline at end of file
diff --git a/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetOneOfSatisfiedButNotMandatory.html.erb b/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetOneOfSatisfiedButNotMandatory.html.erb
new file mode 100644
index 00000000000..3769dd8d42a
--- /dev/null
+++ b/it/it-plugins/required-measures-widgets-plugin/src/main/resources/WidgetOneOfSatisfiedButNotMandatory.html.erb
@@ -0,0 +1,2 @@
+<b>WidgetOneOfSatisfiedButNotMandatory</b>
+<b>SHOULD NOT BE DISPLAYED</b> \ No newline at end of file
diff --git a/it/it-plugins/ui-extensions-plugin/pom.xml b/it/it-plugins/ui-extensions-plugin/pom.xml
new file mode 100644
index 00000000000..aa8439349b4
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/pom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.sonarsource.sonarqube</groupId>
+ <artifactId>it-plugins</artifactId>
+ <version>5.5-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>ui-extensions-plugin</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>sonar-plugin</packaging>
+ <name>SonarQube Integration Tests :: Plugins :: UI extensions</name>
+ <description>Main plugin for UT extensions tests</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.sonarsource.sonarqube</groupId>
+ <artifactId>sonar-plugin-api</artifactId>
+ <version>${apiVersion}</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
+ <artifactId>sonar-packaging-maven-plugin</artifactId>
+ <version>1.15</version>
+ <extensions>true</extensions>
+ <configuration>
+ <pluginClass>UiExtensionsPlugin</pluginClass>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/it/it-plugins/ui-extensions-plugin/src/main/java/FakePageDecorations.java b/it/it-plugins/ui-extensions-plugin/src/main/java/FakePageDecorations.java
new file mode 100644
index 00000000000..bc05bb2288b
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/src/main/java/FakePageDecorations.java
@@ -0,0 +1,28 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact 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.
+ */
+import org.sonar.api.web.PageDecoration;
+
+public class FakePageDecorations extends PageDecoration {
+
+ @Override
+ protected String getTemplatePath() {
+ return "/fake_page_decoration.html.erb";
+ }
+}
diff --git a/it/it-plugins/ui-extensions-plugin/src/main/java/ResourceConfigurationPage.java b/it/it-plugins/ui-extensions-plugin/src/main/java/ResourceConfigurationPage.java
new file mode 100644
index 00000000000..b804359642d
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/src/main/java/ResourceConfigurationPage.java
@@ -0,0 +1,39 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact 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.
+ */
+import org.sonar.api.resources.Qualifiers;
+import org.sonar.api.web.NavigationSection;
+import org.sonar.api.web.Page;
+import org.sonar.api.web.ResourceQualifier;
+import org.sonar.api.web.UserRole;
+
+@NavigationSection(NavigationSection.RESOURCE_CONFIGURATION)
+@UserRole(UserRole.ADMIN)
+@ResourceQualifier({Qualifiers.PROJECT})
+public class ResourceConfigurationPage implements Page {
+
+ public String getId() {
+ return "/resource_configuration_sample";
+ }
+
+ public String getTitle() {
+ return "Resource Configuration";
+ }
+
+}
diff --git a/it/it-plugins/ui-extensions-plugin/src/main/java/RubyApiGlobalPage.java b/it/it-plugins/ui-extensions-plugin/src/main/java/RubyApiGlobalPage.java
new file mode 100644
index 00000000000..37c3ae6e180
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/src/main/java/RubyApiGlobalPage.java
@@ -0,0 +1,40 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact 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.
+ */
+import org.sonar.api.web.AbstractRubyTemplate;
+import org.sonar.api.web.NavigationSection;
+import org.sonar.api.web.RubyRailsPage;
+
+@NavigationSection({NavigationSection.HOME})
+public class RubyApiGlobalPage extends AbstractRubyTemplate implements RubyRailsPage {
+
+ public String getId() {
+ return getClass().getName();
+ }
+
+ public String getTitle() {
+ return "Ruby API Global Page";
+ }
+
+ @Override
+ public String getTemplatePath() {
+ return "/ruby-api-global-page.erb";
+ }
+
+}
diff --git a/it/it-plugins/ui-extensions-plugin/src/main/java/RubyApiProjectPage.java b/it/it-plugins/ui-extensions-plugin/src/main/java/RubyApiProjectPage.java
new file mode 100644
index 00000000000..c868215ba11
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/src/main/java/RubyApiProjectPage.java
@@ -0,0 +1,42 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact 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.
+ */
+import org.sonar.api.web.AbstractRubyTemplate;
+import org.sonar.api.web.NavigationSection;
+import org.sonar.api.web.RubyRailsPage;
+import org.sonar.api.web.UserRole;
+
+@NavigationSection({NavigationSection.RESOURCE})
+@UserRole(UserRole.USER)
+public class RubyApiProjectPage extends AbstractRubyTemplate implements RubyRailsPage {
+
+ public String getId() {
+ return getClass().getName();
+ }
+
+ public String getTitle() {
+ return "Ruby API Project Page";
+ }
+
+ @Override
+ public String getTemplatePath() {
+ return "/ruby-api-project-page.erb";
+ }
+
+}
diff --git a/it/it-plugins/ui-extensions-plugin/src/main/java/UiExtensionsPlugin.java b/it/it-plugins/ui-extensions-plugin/src/main/java/UiExtensionsPlugin.java
new file mode 100644
index 00000000000..e75149eb32d
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/src/main/java/UiExtensionsPlugin.java
@@ -0,0 +1,34 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact 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.
+ */
+
+import java.util.Arrays;
+import java.util.List;
+import org.sonar.api.SonarPlugin;
+
+public class UiExtensionsPlugin extends SonarPlugin {
+ public List getExtensions() {
+ return Arrays.asList(
+ FakePageDecorations.class,
+ RubyApiGlobalPage.class,
+ RubyApiProjectPage.class,
+ ResourceConfigurationPage.class
+ );
+ }
+}
diff --git a/it/it-plugins/ui-extensions-plugin/src/main/resources/fake_page_decoration.html.erb b/it/it-plugins/ui-extensions-plugin/src/main/resources/fake_page_decoration.html.erb
new file mode 100644
index 00000000000..e888224f7b2
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/src/main/resources/fake_page_decoration.html.erb
@@ -0,0 +1,22 @@
+<% content_for :script do %>
+ <script>
+ function fakeFooter() {
+ $j('#fake-footer').html("Footer generated by plugin");
+ }
+ </script>
+<% end %>
+
+
+
+<% content_for :header do %>
+ <div id="fake-header">Header generated by plugin</div>
+<% end %>
+
+
+
+<% content_for :footer do %>
+ <div id="fake-footer"></div>
+ <script>
+ fakeFooter();
+ </script>
+<% end %>
diff --git a/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/controllers/fake_app_controller.rb b/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/controllers/fake_app_controller.rb
new file mode 100644
index 00000000000..6442fac5140
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/controllers/fake_app_controller.rb
@@ -0,0 +1,10 @@
+class FakeAppController < ApplicationController
+ SECTION=Navigation::SECTION_HOME
+ def index
+ @title = 'Fake application'
+ end
+
+ def advanced
+ render :partial => 'fake_app/advanced', :locals => {:properties => Property.find(:all)}
+ end
+end
diff --git a/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/controllers/resource_configuration_sample_controller.rb b/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/controllers/resource_configuration_sample_controller.rb
new file mode 100644
index 00000000000..9d735a0e551
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/controllers/resource_configuration_sample_controller.rb
@@ -0,0 +1,9 @@
+class ResourceConfigurationSampleController < ApplicationController
+
+ SECTION=Navigation::SECTION_RESOURCE
+
+ def index
+ init_resource_for_role(:user, :resource) if params[:resource]
+ end
+
+end
diff --git a/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/helpers/fake_app_helper.rb b/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/helpers/fake_app_helper.rb
new file mode 100644
index 00000000000..dbe0021b17a
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/helpers/fake_app_helper.rb
@@ -0,0 +1,5 @@
+module FakeAppHelper
+ def call_helper
+ 'message generated by helper'
+ end
+end
diff --git a/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/views/fake_app/_advanced.html.erb b/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/views/fake_app/_advanced.html.erb
new file mode 100644
index 00000000000..082cd4c8728
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/views/fake_app/_advanced.html.erb
@@ -0,0 +1,9 @@
+<div id="fake-div">
+
+<p>This page requests database and use RoR partial</p>
+
+<% unless properties.empty? %>
+ <p>Database connection OK</p>
+<% end %>
+
+</div> \ No newline at end of file
diff --git a/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/views/fake_app/index.html.erb b/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/views/fake_app/index.html.erb
new file mode 100644
index 00000000000..3686424c668
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/views/fake_app/index.html.erb
@@ -0,0 +1,2 @@
+<span id="fake-app"><%= @title -%></span>
+<span id="helper-test"><%= call_helper -%></span>
diff --git a/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/views/resource_configuration_sample/index.html.erb b/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/views/resource_configuration_sample/index.html.erb
new file mode 100644
index 00000000000..b2b22ef23c7
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/app/views/resource_configuration_sample/index.html.erb
@@ -0,0 +1,2 @@
+<div>Hello <%= @resource.key %> ! </div>
+
diff --git a/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/init.rb b/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/init.rb
new file mode 100644
index 00000000000..65006bed958
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/src/main/resources/org/sonar/ror/uiextensionsplugin/init.rb
@@ -0,0 +1 @@
+# initialization script \ No newline at end of file
diff --git a/it/it-plugins/ui-extensions-plugin/src/main/resources/ruby-api-global-page.erb b/it/it-plugins/ui-extensions-plugin/src/main/resources/ruby-api-global-page.erb
new file mode 100644
index 00000000000..40aea8687f9
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/src/main/resources/ruby-api-global-page.erb
@@ -0,0 +1,33 @@
+<h1>Ruby API Global Page</h1>
+
+<% success=true %>
+
+<% if logged_in? %>
+ <h2>User Properties</h2>
+ <ul id="user_properties">
+ <%
+ current_user.set_property({:prop_key => 'foo', :text_value => 'bar'})
+ test=current_user.property_value('foo')=='bar'
+ success&=test
+ %>
+ <li>create: <%= 'OK' if test -%></li>
+
+ <%
+ current_user.delete_property('foo')
+ test=current_user.property('foo').nil?
+ success&=test
+ %>
+ <li>delete: <%= 'OK' if test -%></li>
+
+ <%
+ current_user.set_property({:prop_key => 'foo', :text_value => 'bar'})
+ current_user.set_property({:prop_key => 'foo', :text_value => 'newbar'})
+ test=current_user.property_value('foo')=='newbar'
+ success&=test
+ %>
+ <li>update: <%= 'OK' if test -%></li>
+ </ul>
+<% end %>
+
+<br/>
+<p>Result: <span id="ruby-api-result"><%= success ? 'OK' : 'FAIL' %></span></p>
diff --git a/it/it-plugins/ui-extensions-plugin/src/main/resources/ruby-api-project.page.rb b/it/it-plugins/ui-extensions-plugin/src/main/resources/ruby-api-project.page.rb
new file mode 100644
index 00000000000..7cbc55a983d
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/src/main/resources/ruby-api-project.page.rb
@@ -0,0 +1,3 @@
+<h1>Ruby API Project</h1>
+
+<p>Project name is: <span id="ruby-api-project"><%= @project.name -%></span></p>
diff --git a/it/it-plugins/ui-extensions-plugin/src/main/resources/static/cute.jpg b/it/it-plugins/ui-extensions-plugin/src/main/resources/static/cute.jpg
new file mode 100644
index 00000000000..20f59bc1c42
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/src/main/resources/static/cute.jpg
Binary files differ
diff --git a/it/it-plugins/ui-extensions-plugin/src/main/resources/static/file.html b/it/it-plugins/ui-extensions-plugin/src/main/resources/static/file.html
new file mode 100644
index 00000000000..6b0300e5f19
--- /dev/null
+++ b/it/it-plugins/ui-extensions-plugin/src/main/resources/static/file.html
@@ -0,0 +1,6 @@
+<html>
+ <body>
+ Text from static resource
+ <img id="cute-image" src="cute.jpg"/>
+ </body>
+</html>