summaryrefslogtreecommitdiffstatsabout
diff options
context:
space:
mode:
authorMickael Istria2013-09-17 03:53:40 (EDT)
committer Jan Sievers2013-09-27 10:55:24 (EDT)
commitbc3ceb4043c0c28629eabbfc8bceeebea179dd55 (patch)
tree742fb1d0d56e8676a999d6ad353438a5006664fc
parent38887889dd2776013611cd3aa3a7163a16c48b1d (diff)
downloadorg.eclipse.tycho-bc3ceb4043c0c28629eabbfc8bceeebea179dd55.zip
org.eclipse.tycho-bc3ceb4043c0c28629eabbfc8bceeebea179dd55.tar.gz
org.eclipse.tycho-bc3ceb4043c0c28629eabbfc8bceeebea179dd55.tar.bz2
386988 ITs for running tests on provisioned applicationrefs/changes/98/16498/6
These integration tests create a stripped down dummy RCP product and verify that tycho surefire is able to * Provision the product and then run tests * Run tests on an existing provisioned application Bug: 386988 Change-Id: Id6d8c1fff2fb4ced8d4aef724f9b43503554a36f Signed-off-by: Mickael Istria <mistria@redhat.com> Also-by: jan.sievers@sap.com
-rw-r--r--tycho-its/projects/surefire.provisionedApplication/example-feature/README.txt0
-rw-r--r--tycho-its/projects/surefire.provisionedApplication/example-feature/build.properties12
-rw-r--r--tycho-its/projects/surefire.provisionedApplication/example-feature/feature.xml13
-rw-r--r--tycho-its/projects/surefire.provisionedApplication/example-feature/pom.xml26
-rw-r--r--tycho-its/projects/surefire.provisionedApplication/example-product/example.product29
-rw-r--r--tycho-its/projects/surefire.provisionedApplication/example-product/pom.xml53
-rw-r--r--tycho-its/projects/surefire.provisionedApplication/pom.xml64
-rw-r--r--tycho-its/projects/surefire.provisionedApplication/testProvisionApplication/META-INF/MANIFEST.MF6
-rw-r--r--tycho-its/projects/surefire.provisionedApplication/testProvisionApplication/build.properties4
-rw-r--r--tycho-its/projects/surefire.provisionedApplication/testProvisionApplication/pom.xml60
-rw-r--r--tycho-its/projects/surefire.provisionedApplication/testProvisionApplication/src/testProvisioning/RootFileTest.java19
-rw-r--r--tycho-its/projects/surefire.provisionedApplication/testProvisionedApplication/META-INF/MANIFEST.MF6
-rw-r--r--tycho-its/projects/surefire.provisionedApplication/testProvisionedApplication/build.properties4
-rw-r--r--tycho-its/projects/surefire.provisionedApplication/testProvisionedApplication/pom.xml73
-rw-r--r--tycho-its/projects/surefire.provisionedApplication/testProvisionedApplication/src/testProvisioning/RootFileTest.java19
-rw-r--r--tycho-its/src/test/java/org/eclipse/tycho/test/surefire/provisionedApplication/ProvisioningTest.java50
16 files changed, 438 insertions, 0 deletions
diff --git a/tycho-its/projects/surefire.provisionedApplication/example-feature/README.txt b/tycho-its/projects/surefire.provisionedApplication/example-feature/README.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tycho-its/projects/surefire.provisionedApplication/example-feature/README.txt
diff --git a/tycho-its/projects/surefire.provisionedApplication/example-feature/build.properties b/tycho-its/projects/surefire.provisionedApplication/example-feature/build.properties
new file mode 100644
index 0000000..01eea0d
--- /dev/null
+++ b/tycho-its/projects/surefire.provisionedApplication/example-feature/build.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2013 SAP AG and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# SAP AG - initial API and implementation
+###############################################################################
+bin.includes = feature.xml
+root = file:README.txt
diff --git a/tycho-its/projects/surefire.provisionedApplication/example-feature/feature.xml b/tycho-its/projects/surefire.provisionedApplication/example-feature/feature.xml
new file mode 100644
index 0000000..92c4ee2
--- /dev/null
+++ b/tycho-its/projects/surefire.provisionedApplication/example-feature/feature.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+ id="example-feature"
+ label="Example Feature"
+ version="1.0.0">
+ <!-- empty feature just transporting root files -->
+ <requires>
+ <!-- bare minimum requirements to be able to launch an application -->
+ <import plugin="org.eclipse.equinox.app"/>
+ <import plugin="org.eclipse.equinox.launcher"/>
+ </requires>
+
+</feature>
diff --git a/tycho-its/projects/surefire.provisionedApplication/example-feature/pom.xml b/tycho-its/projects/surefire.provisionedApplication/example-feature/pom.xml
new file mode 100644
index 0000000..f2b9e42
--- /dev/null
+++ b/tycho-its/projects/surefire.provisionedApplication/example-feature/pom.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (c) 2013 SAP AG and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+
+Contributors:
+ SAP AG - initial API and implementation
+-->
+<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.eclipse.tycho.tycho-its</groupId>
+ <artifactId>provisionedApplicationParent</artifactId>
+ <version>1.0.0</version>
+ </parent>
+
+ <artifactId>example-feature</artifactId>
+
+ <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/tycho-its/projects/surefire.provisionedApplication/example-product/example.product b/tycho-its/projects/surefire.provisionedApplication/example-product/example.product
new file mode 100644
index 0000000..9a79724
--- /dev/null
+++ b/tycho-its/projects/surefire.provisionedApplication/example-product/example.product
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product uid="example-product" application="bogus" version="1.0.0" useFeatures="true" includeLaunchers="false">
+
+ <configIni use="default">
+ </configIni>
+
+ <launcherArgs>
+ </launcherArgs>
+
+ <launcher>
+ </launcher>
+
+ <vm>
+ </vm>
+
+ <plugins>
+ </plugins>
+
+ <features>
+ <feature id="example-feature" version="0.0.0"/>
+ </features>
+
+ <configurations>
+ <plugin id="org.eclipse.equinox.app" autoStart="true" startLevel="0" />
+ </configurations>
+
+</product>
diff --git a/tycho-its/projects/surefire.provisionedApplication/example-product/pom.xml b/tycho-its/projects/surefire.provisionedApplication/example-product/pom.xml
new file mode 100644
index 0000000..b757401
--- /dev/null
+++ b/tycho-its/projects/surefire.provisionedApplication/example-product/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Copyright (c) 2013 Red Hat Inc.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ Mickael Istria (Red Hat JBoss) - exampl produce
+-->
+
+<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.eclipse.tycho.tycho-its</groupId>
+ <artifactId>provisionedApplicationParent</artifactId>
+ <version>1.0.0</version>
+ </parent>
+
+ <groupId>org.eclipse.tycho.tycho-its.testProvisionedApplication</groupId>
+ <artifactId>example-product</artifactId>
+ <version>1.0.0</version>
+ <packaging>eclipse-repository</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-director-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <executions>
+ <execution>
+ <id>materialize-products</id>
+ <goals>
+ <goal>materialize-products</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>archive-products</id>
+ <goals>
+ <goal>archive-products</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/tycho-its/projects/surefire.provisionedApplication/pom.xml b/tycho-its/projects/surefire.provisionedApplication/pom.xml
new file mode 100644
index 0000000..342d271
--- /dev/null
+++ b/tycho-its/projects/surefire.provisionedApplication/pom.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Copyright (c) 2013 Red Hat Inc.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ Mickael Istria (Red Hat JBoss) - sample project
+-->
+
+<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>
+
+ <groupId>org.eclipse.tycho.tycho-its</groupId>
+ <artifactId>provisionedApplicationParent</artifactId>
+ <version>1.0.0</version>
+
+ <packaging>pom</packaging>
+
+ <repositories>
+ <repository>
+ <id>eclipse352-minimal</id>
+ <url>${p2.repo.url}</url>
+ <layout>p2</layout>
+ </repository>
+ </repositories>
+
+ <modules>
+ <module>example-feature</module>
+ <module>example-product</module>
+ </modules>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-maven-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <extensions>true</extensions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <!-- scenario 1: provision and test a product -->
+ <id>provisionProduct</id>
+ <modules>
+ <module>testProvisionApplication</module>
+ </modules>
+ </profile>
+ <profile>
+ <!-- scenario 2: run tests on top of a previously provisioned product -->
+ <id>useProvisionedProduct</id>
+ <modules>
+ <module>testProvisionedApplication</module>
+ </modules>
+ </profile>
+ </profiles>
+</project>
diff --git a/tycho-its/projects/surefire.provisionedApplication/testProvisionApplication/META-INF/MANIFEST.MF b/tycho-its/projects/surefire.provisionedApplication/testProvisionApplication/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..24cfb85
--- /dev/null
+++ b/tycho-its/projects/surefire.provisionedApplication/testProvisionApplication/META-INF/MANIFEST.MF
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: testProvisionApplication
+Bundle-Version: 1.0.0
+Require-Bundle: org.junit,
+ org.eclipse.core.runtime
diff --git a/tycho-its/projects/surefire.provisionedApplication/testProvisionApplication/build.properties b/tycho-its/projects/surefire.provisionedApplication/testProvisionApplication/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/tycho-its/projects/surefire.provisionedApplication/testProvisionApplication/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/tycho-its/projects/surefire.provisionedApplication/testProvisionApplication/pom.xml b/tycho-its/projects/surefire.provisionedApplication/testProvisionApplication/pom.xml
new file mode 100644
index 0000000..572360d
--- /dev/null
+++ b/tycho-its/projects/surefire.provisionedApplication/testProvisionApplication/pom.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Copyright (c) 2013 Red Hat Inc.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ Mickael Istria (Red Hat JBoss) - example produce
+-->
+
+<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.eclipse.tycho.tycho-its</groupId>
+ <artifactId>provisionedApplicationParent</artifactId>
+ <version>1.0.0</version>
+ </parent>
+
+ <groupId>org.eclipse.tycho.tycho-its.testProvisionedApplication</groupId>
+ <artifactId>testProvisionApplication</artifactId>
+ <version>1.0.0</version>
+
+ <packaging>eclipse-test-plugin</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-surefire-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <testRuntime>p2Installed</testRuntime>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>target-platform-configuration</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <dependency-resolution>
+ <extraRequirements>
+ <!-- add dependency to product IU under test -->
+ <requirement>
+ <type>p2-installable-unit</type>
+ <id>example-product</id>
+ <versionRange>0.0.0</versionRange>
+ </requirement>
+ </extraRequirements>
+ </dependency-resolution>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/tycho-its/projects/surefire.provisionedApplication/testProvisionApplication/src/testProvisioning/RootFileTest.java b/tycho-its/projects/surefire.provisionedApplication/testProvisionApplication/src/testProvisioning/RootFileTest.java
new file mode 100644
index 0000000..81bba71
--- /dev/null
+++ b/tycho-its/projects/surefire.provisionedApplication/testProvisionApplication/src/testProvisioning/RootFileTest.java
@@ -0,0 +1,19 @@
+package testProvisioning;
+
+import java.io.File;
+
+import junit.framework.TestCase;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Platform;
+
+public class RootFileTest extends TestCase {
+
+ public void testIsProvisionedInstallation() throws Exception {
+ File eclipseInstallationRoot = new File(FileLocator.toFileURL(
+ Platform.getInstallLocation().getURL()).getPath());
+ File rootFile = new File(eclipseInstallationRoot, "README.txt");
+ assertTrue(rootFile + " does not exist - installation was not provisioned by p2", rootFile.isFile());
+ }
+
+}
diff --git a/tycho-its/projects/surefire.provisionedApplication/testProvisionedApplication/META-INF/MANIFEST.MF b/tycho-its/projects/surefire.provisionedApplication/testProvisionedApplication/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..9b94454
--- /dev/null
+++ b/tycho-its/projects/surefire.provisionedApplication/testProvisionedApplication/META-INF/MANIFEST.MF
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: testProvisionedApplication
+Bundle-Version: 1.0.0
+Require-Bundle: org.junit,
+ org.eclipse.core.runtime
diff --git a/tycho-its/projects/surefire.provisionedApplication/testProvisionedApplication/build.properties b/tycho-its/projects/surefire.provisionedApplication/testProvisionedApplication/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/tycho-its/projects/surefire.provisionedApplication/testProvisionedApplication/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/tycho-its/projects/surefire.provisionedApplication/testProvisionedApplication/pom.xml b/tycho-its/projects/surefire.provisionedApplication/testProvisionedApplication/pom.xml
new file mode 100644
index 0000000..84004ef
--- /dev/null
+++ b/tycho-its/projects/surefire.provisionedApplication/testProvisionedApplication/pom.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Copyright (c) 2013 Red Hat Inc.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ Mickael Istria (Red Hat JBoss) - sample product and surefire-config for 386988
+-->
+
+<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.eclipse.tycho.tycho-its</groupId>
+ <artifactId>provisionedApplicationParent</artifactId>
+ <version>1.0.0</version>
+ </parent>
+
+ <groupId>org.eclipse.tycho.tycho-its.testProvisionedApplication</groupId>
+ <artifactId>testProvisionedApplication</artifactId>
+ <version>1.0.0</version>
+ <packaging>eclipse-test-plugin</packaging>
+
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-surefire-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <testRuntime>p2Installed</testRuntime>
+ </configuration>
+ </plugin>
+
+ <!-- unpack provisioned product archive before running tests -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <version>2.8</version>
+ <executions>
+ <execution>
+ <id>unpack-product</id>
+ <phase>compile</phase>
+ <goals>
+ <goal>unpack</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.eclipse.tycho.tycho-its.testProvisionedApplication</groupId>
+ <artifactId>example-product</artifactId>
+ <version>1.0.0</version>
+ <type>zip</type>
+ <!-- os.ws.arch classifier is set by ProvisioningTest -->
+ <classifier>${productClassifier}</classifier>
+ <!-- this is where tycho surefire expects/creates the installation under test by default-->
+ <outputDirectory>${project.build.directory}/work</outputDirectory>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/tycho-its/projects/surefire.provisionedApplication/testProvisionedApplication/src/testProvisioning/RootFileTest.java b/tycho-its/projects/surefire.provisionedApplication/testProvisionedApplication/src/testProvisioning/RootFileTest.java
new file mode 100644
index 0000000..81bba71
--- /dev/null
+++ b/tycho-its/projects/surefire.provisionedApplication/testProvisionedApplication/src/testProvisioning/RootFileTest.java
@@ -0,0 +1,19 @@
+package testProvisioning;
+
+import java.io.File;
+
+import junit.framework.TestCase;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Platform;
+
+public class RootFileTest extends TestCase {
+
+ public void testIsProvisionedInstallation() throws Exception {
+ File eclipseInstallationRoot = new File(FileLocator.toFileURL(
+ Platform.getInstallLocation().getURL()).getPath());
+ File rootFile = new File(eclipseInstallationRoot, "README.txt");
+ assertTrue(rootFile + " does not exist - installation was not provisioned by p2", rootFile.isFile());
+ }
+
+}
diff --git a/tycho-its/src/test/java/org/eclipse/tycho/test/surefire/provisionedApplication/ProvisioningTest.java b/tycho-its/src/test/java/org/eclipse/tycho/test/surefire/provisionedApplication/ProvisioningTest.java
new file mode 100644
index 0000000..68df47e
--- /dev/null
+++ b/tycho-its/src/test/java/org/eclipse/tycho/test/surefire/provisionedApplication/ProvisioningTest.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Red Hat Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Mickael Istria (Red Hat JBoss) - Test
+ *******************************************************************************/
+package org.eclipse.tycho.test.surefire.provisionedApplication;
+
+import static java.util.Arrays.asList;
+
+import java.util.List;
+
+import org.apache.maven.it.Verifier;
+import org.eclipse.tycho.core.facade.TargetEnvironment;
+import org.eclipse.tycho.test.AbstractTychoIntegrationTest;
+import org.eclipse.tycho.test.util.ResourceUtil;
+import org.junit.Test;
+
+public class ProvisioningTest extends AbstractTychoIntegrationTest {
+
+ @Test
+ public void testProvisionAppAndRunTest() throws Exception {
+ Verifier verifier = getVerifier("surefire.provisionedApplication", false);
+ List options = verifier.getCliOptions();
+ options.add("-Dp2.repo.url=" + ResourceUtil.P2Repositories.ECLIPSE_352.toString());
+ options.add("-PprovisionProduct");
+ verifier.executeGoals(asList("clean", "integration-test"));
+ verifier.verifyErrorFreeLog();
+ }
+
+ @Test
+ public void testRunTestOnProvisionedApp() throws Exception {
+ Verifier verifier = getVerifier("surefire.provisionedApplication", false);
+ List options = verifier.getCliOptions();
+ options.add("-Dp2.repo.url=" + ResourceUtil.P2Repositories.ECLIPSE_352.toString());
+ options.add("-PuseProvisionedProduct");
+ options.add("-DproductClassifier=" + getProductClassifier());
+ verifier.executeGoals(asList("clean", "integration-test"));
+ verifier.verifyErrorFreeLog();
+ }
+
+ private static String getProductClassifier() {
+ TargetEnvironment currentEnv = TargetEnvironment.getRunningEnvironment();
+ return currentEnv.getOs() + "." + currentEnv.getWs() + "." + currentEnv.getArch();
+ }
+}