IDEMPIERE-4289 Implement Support for JUnit5 Unit Testing (#53)
Add JUnit5 unit testing project org.idempiere.test Add tycho sure fire test (skip by default)
This commit is contained in:
parent
9d050a96b3
commit
4c03fef8a8
|
@ -396,6 +396,11 @@
|
||||||
<artifactId>maven-dependency-plugin</artifactId>
|
<artifactId>maven-dependency-plugin</artifactId>
|
||||||
<version>${maven.dependency.version}</version>
|
<version>${maven.dependency.version}</version>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.eclipse.tycho</groupId>
|
||||||
|
<artifactId>tycho-surefire-plugin</artifactId>
|
||||||
|
<version>${tycho.version}</version>
|
||||||
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</pluginManagement>
|
</pluginManagement>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||||
|
<classpathentry kind="src" path="src">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="test" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="output" path="target/classes"/>
|
||||||
|
</classpath>
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>org.idempiere.test</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.pde.ManifestBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.pde.SchemaBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.pde.PluginNature</nature>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
|
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
|
@ -0,0 +1,2 @@
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
encoding/<project>=UTF-8
|
|
@ -0,0 +1,9 @@
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
|
||||||
|
org.eclipse.jdt.core.compiler.compliance=11
|
||||||
|
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
|
||||||
|
org.eclipse.jdt.core.compiler.release=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.source=11
|
|
@ -0,0 +1,3 @@
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
pluginProject.extensions=false
|
||||||
|
resolve.requirebundle=false
|
|
@ -0,0 +1,21 @@
|
||||||
|
Manifest-Version: 1.0
|
||||||
|
Bundle-ManifestVersion: 2
|
||||||
|
Bundle-Name: iDempiere Unit Testing
|
||||||
|
Bundle-SymbolicName: org.idempiere.test
|
||||||
|
Bundle-Version: 7.1.0.qualifier
|
||||||
|
Bundle-Vendor: iDempiere
|
||||||
|
Automatic-Module-Name: org.idempiere.test
|
||||||
|
Bundle-RequiredExecutionEnvironment: JavaSE-11
|
||||||
|
Import-Package: org.junit.jupiter.api;version="5.6.0",
|
||||||
|
org.junit.jupiter.api.condition;version="5.6.0",
|
||||||
|
org.junit.jupiter.api.extension;version="5.6.0",
|
||||||
|
org.junit.jupiter.api.extension.support;version="5.6.0",
|
||||||
|
org.junit.jupiter.api.function;version="5.6.0",
|
||||||
|
org.junit.jupiter.api.io;version="5.6.0",
|
||||||
|
org.junit.jupiter.api.parallel;version="5.6.0",
|
||||||
|
org.junit.jupiter.params;version="5.6.0",
|
||||||
|
org.junit.jupiter.params.aggregator;version="5.6.0",
|
||||||
|
org.junit.jupiter.params.converter;version="5.6.0",
|
||||||
|
org.junit.jupiter.params.provider;version="5.6.0",
|
||||||
|
org.junit.jupiter.params.support;version="5.6.0"
|
||||||
|
Require-Bundle: org.adempiere.base;bundle-version="7.1.0"
|
|
@ -0,0 +1,4 @@
|
||||||
|
source.. = src/
|
||||||
|
output.. = target/classes/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.
|
|
@ -0,0 +1,568 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
|
||||||
|
<booleanAttribute key="append.args" value="true"/>
|
||||||
|
<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
|
||||||
|
<booleanAttribute key="askclear" value="false"/>
|
||||||
|
<booleanAttribute key="automaticAdd" value="true"/>
|
||||||
|
<booleanAttribute key="automaticValidate" value="true"/>
|
||||||
|
<stringAttribute key="bootstrap" value=""/>
|
||||||
|
<stringAttribute key="checked" value="[NONE]"/>
|
||||||
|
<booleanAttribute key="clearConfig" value="true"/>
|
||||||
|
<booleanAttribute key="clearws" value="true"/>
|
||||||
|
<booleanAttribute key="clearwslog" value="false"/>
|
||||||
|
<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
|
||||||
|
<booleanAttribute key="default" value="false"/>
|
||||||
|
<setAttribute key="deselected_workspace_bundles">
|
||||||
|
<setEntry value="org.adempiere.replication"/>
|
||||||
|
<setEntry value="org.adempiere.replication.server"/>
|
||||||
|
<setEntry value="org.adempiere.server"/>
|
||||||
|
<setEntry value="org.adempiere.ui.zk"/>
|
||||||
|
<setEntry value="org.idempiere.felix.webconsole"/>
|
||||||
|
<setEntry value="org.idempiere.javadoc"/>
|
||||||
|
<setEntry value="org.idempiere.webservices"/>
|
||||||
|
<setEntry value="org.idempiere.zk.extra"/>
|
||||||
|
</setAttribute>
|
||||||
|
<booleanAttribute key="includeOptional" value="true"/>
|
||||||
|
<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
|
||||||
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||||
|
<listEntry value="/org.idempiere.test"/>
|
||||||
|
</listAttribute>
|
||||||
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||||
|
<listEntry value="4"/>
|
||||||
|
</listAttribute>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value="=org.idempiere.test"/>
|
||||||
|
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit5"/>
|
||||||
|
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.idempiere.test"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc}"/>
|
||||||
|
<stringAttribute key="pde.version" value="3.3"/>
|
||||||
|
<stringAttribute key="product" value="org.adempiere.server.server_product"/>
|
||||||
|
<booleanAttribute key="run_in_ui_thread" value="true"/>
|
||||||
|
<setAttribute key="selected_target_bundles">
|
||||||
|
<setEntry value="bcmail@default:default"/>
|
||||||
|
<setEntry value="bcpkix@default:default"/>
|
||||||
|
<setEntry value="bcprov@default:default"/>
|
||||||
|
<setEntry value="bctsp@default:default"/>
|
||||||
|
<setEntry value="ca.odell.glazedlists@default:default"/>
|
||||||
|
<setEntry value="ch.qos.logback.classic@default:default"/>
|
||||||
|
<setEntry value="ch.qos.logback.core@default:default"/>
|
||||||
|
<setEntry value="com.cronutils@default:default"/>
|
||||||
|
<setEntry value="com.diffplug.osgi.extension.sun.misc@default:false"/>
|
||||||
|
<setEntry value="com.fasterxml.jackson.core.jackson-annotations@default:default"/>
|
||||||
|
<setEntry value="com.fasterxml.jackson.core.jackson-core@default:default"/>
|
||||||
|
<setEntry value="com.fasterxml.jackson.core.jackson-databind@default:default"/>
|
||||||
|
<setEntry value="com.fasterxml.jackson.dataformat.jackson-dataformat-xml@default:default"/>
|
||||||
|
<setEntry value="com.fasterxml.jackson.datatype.jackson-datatype-guava@default:default"/>
|
||||||
|
<setEntry value="com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default"/>
|
||||||
|
<setEntry value="com.fasterxml.jackson.datatype.jackson-datatype-json-org@default:default"/>
|
||||||
|
<setEntry value="com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default"/>
|
||||||
|
<setEntry value="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default"/>
|
||||||
|
<setEntry value="com.fasterxml.jackson.jaxrs.jackson-jaxrs-xml-provider@default:default"/>
|
||||||
|
<setEntry value="com.fasterxml.jackson.module.jackson-module-jaxb-annotations@default:default"/>
|
||||||
|
<setEntry value="com.fasterxml.jackson.module.jackson-module-jsonSchema@default:default"/>
|
||||||
|
<setEntry value="com.fasterxml.woodstox.woodstox-core@default:default"/>
|
||||||
|
<setEntry value="com.github.relaxng.Datatype@default:default"/>
|
||||||
|
<setEntry value="com.google.flogger.systembackend@default:default"/>
|
||||||
|
<setEntry value="com.google.flogger.testing@default:default"/>
|
||||||
|
<setEntry value="com.google.flogger@default:default"/>
|
||||||
|
<setEntry value="com.google.gson@default:default"/>
|
||||||
|
<setEntry value="com.google.guava@default:default"/>
|
||||||
|
<setEntry value="com.google.zxing.core@default:default"/>
|
||||||
|
<setEntry value="com.graphql.java.dataloader@default:default"/>
|
||||||
|
<setEntry value="com.ibm.icu*63.1.0@default:default"/>
|
||||||
|
<setEntry value="com.ibm.icu*64.2.0.v20190507-1337@default:default"/>
|
||||||
|
<setEntry value="com.itextpdf@default:default"/>
|
||||||
|
<setEntry value="com.jaspersoft.studio.bundles.barbecue@default:default"/>
|
||||||
|
<setEntry value="com.jaspersoft.studio.bundles.itext@default:default"/>
|
||||||
|
<setEntry value="com.jcraft.jsch@default:default"/>
|
||||||
|
<setEntry value="com.konghq.unirest-java@default:default"/>
|
||||||
|
<setEntry value="com.sun.activation.jakarta.activation@default:default"/>
|
||||||
|
<setEntry value="com.sun.el@default:default"/>
|
||||||
|
<setEntry value="com.sun.grid.drmaa@default:default"/>
|
||||||
|
<setEntry value="com.sun.istack.commons-runtime@default:default"/>
|
||||||
|
<setEntry value="com.sun.jna.platform@default:default"/>
|
||||||
|
<setEntry value="com.sun.jna@default:default"/>
|
||||||
|
<setEntry value="com.sun.mail.gimap@default:default"/>
|
||||||
|
<setEntry value="com.sun.mail.imap@default:default"/>
|
||||||
|
<setEntry value="com.sun.mail.jakarta.mail@default:default"/>
|
||||||
|
<setEntry value="com.sun.mail.smtp@default:default"/>
|
||||||
|
<setEntry value="com.sun.org.apache.xml.internal.resolver@default:default"/>
|
||||||
|
<setEntry value="com.sun.xml.bind.external.rngom@default:default"/>
|
||||||
|
<setEntry value="com.sun.xml.bind.jaxb-impl@default:default"/>
|
||||||
|
<setEntry value="com.sun.xml.bind.jaxb-jxc@default:default"/>
|
||||||
|
<setEntry value="com.sun.xml.bind.jaxb-osgi@default:default"/>
|
||||||
|
<setEntry value="com.sun.xml.bind.jaxb-xjc@default:default"/>
|
||||||
|
<setEntry value="com.sun.xml.fastinfoset.FastInfoset@default:default"/>
|
||||||
|
<setEntry value="com.sun.xml.messaging.saaj.impl@default:default"/>
|
||||||
|
<setEntry value="com.sun.xml.stream.buffer.streambuffer@default:default"/>
|
||||||
|
<setEntry value="com.sun.xml.ws.jaxws-rt@default:default"/>
|
||||||
|
<setEntry value="com.sun.xml.ws.policy@default:default"/>
|
||||||
|
<setEntry value="groovy-ant@default:false"/>
|
||||||
|
<setEntry value="groovy-cli-commons@default:false"/>
|
||||||
|
<setEntry value="groovy-cli-picocli@default:false"/>
|
||||||
|
<setEntry value="groovy-console@default:false"/>
|
||||||
|
<setEntry value="groovy-datetime@default:false"/>
|
||||||
|
<setEntry value="groovy-docgenerator@default:false"/>
|
||||||
|
<setEntry value="groovy-groovydoc@default:false"/>
|
||||||
|
<setEntry value="groovy-groovysh@default:false"/>
|
||||||
|
<setEntry value="groovy-jmx@default:false"/>
|
||||||
|
<setEntry value="groovy-json@default:false"/>
|
||||||
|
<setEntry value="groovy-jsr223@default:false"/>
|
||||||
|
<setEntry value="groovy-macro@default:false"/>
|
||||||
|
<setEntry value="groovy-nio@default:false"/>
|
||||||
|
<setEntry value="groovy-servlet@default:false"/>
|
||||||
|
<setEntry value="groovy-sql@default:false"/>
|
||||||
|
<setEntry value="groovy-swing@default:false"/>
|
||||||
|
<setEntry value="groovy-xml@default:false"/>
|
||||||
|
<setEntry value="groovy@default:default"/>
|
||||||
|
<setEntry value="io.github.classgraph@default:default"/>
|
||||||
|
<setEntry value="jakarta.jws-api@default:default"/>
|
||||||
|
<setEntry value="jakarta.mail.api@default:default"/>
|
||||||
|
<setEntry value="jakarta.persistence-api@default:default"/>
|
||||||
|
<setEntry value="jakarta.ws.rs-api@default:default"/>
|
||||||
|
<setEntry value="jakarta.xml.bind-api@default:default"/>
|
||||||
|
<setEntry value="jakarta.xml.soap-api@default:default"/>
|
||||||
|
<setEntry value="jakarta.xml.ws-api@default:default"/>
|
||||||
|
<setEntry value="java_cup-runtime@default:default"/>
|
||||||
|
<setEntry value="java_cup@default:default"/>
|
||||||
|
<setEntry value="javaewah@default:default"/>
|
||||||
|
<setEntry value="javax.annotation-api@default:default"/>
|
||||||
|
<setEntry value="javax.annotation@default:default"/>
|
||||||
|
<setEntry value="javax.el@default:default"/>
|
||||||
|
<setEntry value="javax.enterprise.cdi-api@default:default"/>
|
||||||
|
<setEntry value="javax.inject@default:default"/>
|
||||||
|
<setEntry value="javax.interceptor-api@default:default"/>
|
||||||
|
<setEntry value="javax.jms@default:default"/>
|
||||||
|
<setEntry value="javax.measure.unit-api@default:default"/>
|
||||||
|
<setEntry value="javax.servlet.jsp@default:default"/>
|
||||||
|
<setEntry value="javax.servlet@default:default"/>
|
||||||
|
<setEntry value="javax.transaction-api@default:default"/>
|
||||||
|
<setEntry value="javax.validation.api@default:default"/>
|
||||||
|
<setEntry value="javax.validation@default:default"/>
|
||||||
|
<setEntry value="javax.websocket-api@default:default"/>
|
||||||
|
<setEntry value="javax.ws.rs@default:default"/>
|
||||||
|
<setEntry value="joda-time@default:default"/>
|
||||||
|
<setEntry value="json@default:default"/>
|
||||||
|
<setEntry value="net.bytebuddy.byte-buddy-agent@default:default"/>
|
||||||
|
<setEntry value="net.bytebuddy.byte-buddy@default:default"/>
|
||||||
|
<setEntry value="net.i2p.crypto.eddsa@default:default"/>
|
||||||
|
<setEntry value="net.sf.jasperreports.engine@default:default"/>
|
||||||
|
<setEntry value="net.sf.supercsv.super-csv@default:default"/>
|
||||||
|
<setEntry value="org.antlr.runtime@default:default"/>
|
||||||
|
<setEntry value="org.aopalliance@default:default"/>
|
||||||
|
<setEntry value="org.apache.activemq.activemq-core@default:default"/>
|
||||||
|
<setEntry value="org.apache.activemq.kahadb@default:default"/>
|
||||||
|
<setEntry value="org.apache.ant@default:default"/>
|
||||||
|
<setEntry value="org.apache.aries.spifly.dynamic.bundle@default:default"/>
|
||||||
|
<setEntry value="org.apache.aries.util@default:default"/>
|
||||||
|
<setEntry value="org.apache.batik.constants@default:default"/>
|
||||||
|
<setEntry value="org.apache.batik.css@default:default"/>
|
||||||
|
<setEntry value="org.apache.batik.i18n@default:default"/>
|
||||||
|
<setEntry value="org.apache.batik.util@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.beanutils@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.codec@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.collections@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.commons-collections4@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.commons-configuration2@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.compress@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.csv@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.digester@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.discovery@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.fileupload@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.io@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.jxpath@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.lang3.source@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.lang3@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.lang@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.logging@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.math3@default:default"/>
|
||||||
|
<setEntry value="org.apache.commons.net@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-core@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-rt-bindings-soap@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-rt-bindings-xml@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-rt-databinding-jaxb@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-rt-databinding-xmlbeans@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-rt-frontend-jaxrs@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-rt-frontend-jaxws@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-rt-frontend-simple@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-rt-management@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-rt-rs-extension-providers@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-rt-rs-http-sci@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-rt-rs-service-description@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-rt-security@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-rt-transports-http-jetty@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-rt-transports-http@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-rt-ws-addr@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-rt-ws-policy@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.cxf-rt-wsdl@default:default"/>
|
||||||
|
<setEntry value="org.apache.cxf.rt-ws-transfer@default:default"/>
|
||||||
|
<setEntry value="org.apache.felix.gogo.command@default:default"/>
|
||||||
|
<setEntry value="org.apache.felix.gogo.runtime@default:default"/>
|
||||||
|
<setEntry value="org.apache.felix.gogo.shell@default:default"/>
|
||||||
|
<setEntry value="org.apache.felix.inventory@default:default"/>
|
||||||
|
<setEntry value="org.apache.felix.scr@1:true"/>
|
||||||
|
<setEntry value="org.apache.felix.webconsole.plugins.ds@default:default"/>
|
||||||
|
<setEntry value="org.apache.felix.webconsole.plugins.memoryusage@default:default"/>
|
||||||
|
<setEntry value="org.apache.felix.webconsole@default:default"/>
|
||||||
|
<setEntry value="org.apache.geronimo.specs.geronimo-j2ee-management_1.1_spec@default:default"/>
|
||||||
|
<setEntry value="org.apache.httpcomponents.httpasyncclient@default:default"/>
|
||||||
|
<setEntry value="org.apache.httpcomponents.httpclient@default:default"/>
|
||||||
|
<setEntry value="org.apache.httpcomponents.httpcore-nio@default:default"/>
|
||||||
|
<setEntry value="org.apache.httpcomponents.httpcore@default:default"/>
|
||||||
|
<setEntry value="org.apache.httpcomponents.httpmime@default:default"/>
|
||||||
|
<setEntry value="org.apache.jasper.glassfish@default:default"/>
|
||||||
|
<setEntry value="org.apache.jclouds.api.cloudwatch@default:default"/>
|
||||||
|
<setEntry value="org.apache.jclouds.api.ec2@default:default"/>
|
||||||
|
<setEntry value="org.apache.jclouds.api.openstack-cinder@default:default"/>
|
||||||
|
<setEntry value="org.apache.jclouds.api.openstack-keystone@default:default"/>
|
||||||
|
<setEntry value="org.apache.jclouds.api.openstack-nova@default:default"/>
|
||||||
|
<setEntry value="org.apache.jclouds.api.sts@default:default"/>
|
||||||
|
<setEntry value="org.apache.jclouds.common.openstack-common@default:default"/>
|
||||||
|
<setEntry value="org.apache.jclouds.driver.jclouds-slf4j@default:default"/>
|
||||||
|
<setEntry value="org.apache.jclouds.jclouds-blobstore@default:default"/>
|
||||||
|
<setEntry value="org.apache.jclouds.jclouds-compute@default:default"/>
|
||||||
|
<setEntry value="org.apache.jclouds.jclouds-core@default:default"/>
|
||||||
|
<setEntry value="org.apache.jclouds.jclouds-scriptbuilder@default:default"/>
|
||||||
|
<setEntry value="org.apache.jclouds.labs.docker@default:default"/>
|
||||||
|
<setEntry value="org.apache.jclouds.labs.openstack-neutron@default:default"/>
|
||||||
|
<setEntry value="org.apache.lucene.analyzers-common@default:default"/>
|
||||||
|
<setEntry value="org.apache.lucene.analyzers-smartcn@default:default"/>
|
||||||
|
<setEntry value="org.apache.lucene.core@default:default"/>
|
||||||
|
<setEntry value="org.apache.maven.resolver.api@default:default"/>
|
||||||
|
<setEntry value="org.apache.maven.resolver.connector.basic@default:default"/>
|
||||||
|
<setEntry value="org.apache.maven.resolver.impl@default:default"/>
|
||||||
|
<setEntry value="org.apache.maven.resolver.spi@default:default"/>
|
||||||
|
<setEntry value="org.apache.maven.resolver.transport.file@default:default"/>
|
||||||
|
<setEntry value="org.apache.maven.resolver.transport.http@default:default"/>
|
||||||
|
<setEntry value="org.apache.maven.resolver.util@default:default"/>
|
||||||
|
<setEntry value="org.apache.neethi@default:default"/>
|
||||||
|
<setEntry value="org.apache.onami.configuration@default:default"/>
|
||||||
|
<setEntry value="org.apache.pdfbox.fontbox@default:default"/>
|
||||||
|
<setEntry value="org.apache.pdfbox.preflight@default:default"/>
|
||||||
|
<setEntry value="org.apache.pdfbox.xmpbox@default:default"/>
|
||||||
|
<setEntry value="org.apache.pdfbox@default:default"/>
|
||||||
|
<setEntry value="org.apache.poi.poi-ooxml-schemas@default:default"/>
|
||||||
|
<setEntry value="org.apache.poi.poi-ooxml@default:default"/>
|
||||||
|
<setEntry value="org.apache.poi.poi@default:default"/>
|
||||||
|
<setEntry value="org.apache.servicemix.bundles.cglib@default:default"/>
|
||||||
|
<setEntry value="org.apache.servicemix.bundles.jaxen@default:default"/>
|
||||||
|
<setEntry value="org.apache.servicemix.bundles.rhino@default:default"/>
|
||||||
|
<setEntry value="org.apache.servicemix.bundles.spring-aop@default:default"/>
|
||||||
|
<setEntry value="org.apache.servicemix.bundles.spring-beans@default:default"/>
|
||||||
|
<setEntry value="org.apache.servicemix.bundles.spring-context-support@default:default"/>
|
||||||
|
<setEntry value="org.apache.servicemix.bundles.spring-context@default:default"/>
|
||||||
|
<setEntry value="org.apache.servicemix.bundles.spring-core@default:default"/>
|
||||||
|
<setEntry value="org.apache.servicemix.bundles.spring-expression@default:default"/>
|
||||||
|
<setEntry value="org.apache.servicemix.bundles.spring-web@default:default"/>
|
||||||
|
<setEntry value="org.apache.servicemix.bundles.wsdl4j@default:default"/>
|
||||||
|
<setEntry value="org.apache.servicemix.bundles.xerces@default:default"/>
|
||||||
|
<setEntry value="org.apache.sshd.core@default:default"/>
|
||||||
|
<setEntry value="org.apache.sshd.osgi@default:default"/>
|
||||||
|
<setEntry value="org.apache.sshd.putty@default:default"/>
|
||||||
|
<setEntry value="org.apache.sshd.sftp@default:default"/>
|
||||||
|
<setEntry value="org.apache.taglibs.standard-impl@default:default"/>
|
||||||
|
<setEntry value="org.apache.taglibs.standard-jstlel@default:default"/>
|
||||||
|
<setEntry value="org.apache.taglibs.taglibs-standard-spec@default:default"/>
|
||||||
|
<setEntry value="org.apache.velocity@default:default"/>
|
||||||
|
<setEntry value="org.apache.ws.commons.util@default:default"/>
|
||||||
|
<setEntry value="org.apache.ws.xmlschema.core@default:default"/>
|
||||||
|
<setEntry value="org.apache.xalan@default:default"/>
|
||||||
|
<setEntry value="org.apache.xml.resolver@default:default"/>
|
||||||
|
<setEntry value="org.apache.xml.serializer@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlbeans@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics.batik-anim@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics.batik-awt-util@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics.batik-bridge@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics.batik-codec@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics.batik-constants@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics.batik-css@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics.batik-dom@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics.batik-ext@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics.batik-extension@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics.batik-gvt@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics.batik-i18n@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics.batik-parser@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics.batik-script@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics.batik-svg-dom@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics.batik-svggen@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics.batik-util@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics.batik-xml@default:default"/>
|
||||||
|
<setEntry value="org.apache.xmlgraphics@default:default"/>
|
||||||
|
<setEntry value="org.apiguardian@default:default"/>
|
||||||
|
<setEntry value="org.assertj@default:default"/>
|
||||||
|
<setEntry value="org.atmosphere.runtime@default:default"/>
|
||||||
|
<setEntry value="org.cryptacular@default:default"/>
|
||||||
|
<setEntry value="org.dom4j@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.ant.core@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.core.commands@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.core.contenttype@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.core.databinding.beans@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.core.databinding.observable@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.core.databinding.property@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.core.databinding@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.core.expressions@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.core.externaltools@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.core.filebuffers@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.core.filesystem@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.core.jobs@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.core.net@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.core.resources@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.core.runtime@default:true"/>
|
||||||
|
<setEntry value="org.eclipse.core.variables@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.debug.core@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.ecf.filetransfer@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.ecf.identity@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.ecf.provider.filetransfer.httpclient45@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.ecf.provider.filetransfer.ssl@default:false"/>
|
||||||
|
<setEntry value="org.eclipse.ecf.provider.filetransfer@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.ecf.ssl@default:false"/>
|
||||||
|
<setEntry value="org.eclipse.ecf@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.app@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.bidi@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.cm@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.common@2:true"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.concurrent@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.console@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.coordinator@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.device@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.ds@1:true"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.event@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.frameworkadmin.equinox@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.frameworkadmin@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.http.jetty@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.http.registry@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.http.servlet@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.http.servletbridge@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.jsp.jasper.registry@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.jsp.jasper@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.metatype@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.artifact.repository@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.console@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.core@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.director.app@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.director@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.directorywatcher@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.engine@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.extensionlocation@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.garbagecollector@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.jarprocessor@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.metadata.repository@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.metadata@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.operations@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.publisher.eclipse@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.publisher@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.reconciler.dropins@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.repository.tools@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.repository@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.touchpoint.eclipse@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.touchpoint.natives@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.transport.ecf@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.updatechecker@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.p2.updatesite@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.preferences@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.registry@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.security@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.servletbridge@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.simpleconfigurator.manipulator@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.simpleconfigurator@1:true"/>
|
||||||
|
<setEntry value="org.eclipse.equinox.useradmin@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.help.base@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.help.webapp@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.help@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jdt.annotation*1.1.400.v20180921-1416@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jdt.annotation*2.2.400.v20191120-1313@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jdt.apt.core@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jdt.apt.pluggable.core@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jdt.compiler.apt@default:false"/>
|
||||||
|
<setEntry value="org.eclipse.jdt.compiler.tool@default:false"/>
|
||||||
|
<setEntry value="org.eclipse.jdt.core.formatterapp@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jdt.core@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jdt.debug@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jdt.doc.user@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jdt.junit.runtime@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jdt.junit4.runtime@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jdt.junit5.runtime@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.alpn.api@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.alpn.client@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.alpn.server@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.annotations@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.apache-jsp@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.client@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.continuation*9.4.27.v20200227@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.continuation*9.4.28.v20200408@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.deploy@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.http*9.4.27.v20200227@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.http*9.4.28.v20200408@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.http2.client.http@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.http2.client@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.http2.common@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.http2.hpack@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.http2.server@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.io*9.4.27.v20200227@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.io*9.4.28.v20200408@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.jaas@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.jmx@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.jndi@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.osgi-servlet-api@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.osgi.alpn.fragment@default:false"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.osgi.boot.jsp@default:false"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.osgi.boot.warurl@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.osgi.boot@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.osgi.httpservice@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.plus@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.proxy@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.rewrite@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.security*9.4.27.v20200227@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.security*9.4.28.v20200408@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.server*9.4.27.v20200227@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.server*9.4.28.v20200408@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.servlet*9.4.27.v20200227@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.servlet*9.4.28.v20200408@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.servlets@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.util*9.4.27.v20200227@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.util*9.4.28.v20200408@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.util.ajax@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.webapp@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.websocket.api@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.websocket.client@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.websocket.common@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.websocket.javax.websocket.server@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.websocket.javax.websocket@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.websocket.server@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.websocket.servlet@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jetty.xml@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.jsch.core@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.ltk.core.refactoring@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.orbit.mongodb@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.osgi.compatibility.state@default:false"/>
|
||||||
|
<setEntry value="org.eclipse.osgi.services@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.osgi.util@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.osgi@-1:true"/>
|
||||||
|
<setEntry value="org.eclipse.text@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.update.configurator@default:default"/>
|
||||||
|
<setEntry value="org.eclipse.urischeme@default:default"/>
|
||||||
|
<setEntry value="org.ejml.core@default:default"/>
|
||||||
|
<setEntry value="org.ejml.dense64@default:default"/>
|
||||||
|
<setEntry value="org.ejml.denseC64@default:default"/>
|
||||||
|
<setEntry value="org.ejml.ejml-all@default:default"/>
|
||||||
|
<setEntry value="org.ejml.equation@default:default"/>
|
||||||
|
<setEntry value="org.ejml.experimental@default:default"/>
|
||||||
|
<setEntry value="org.ejml.simple@default:default"/>
|
||||||
|
<setEntry value="org.freemarker@default:default"/>
|
||||||
|
<setEntry value="org.ggf.drmaa@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.external.management-api@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.gmbal.gmbal@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.hk2.api@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.hk2.locator@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.hk2.osgi-resource-locator@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.hk2.utils@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.jaxb.txw2@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.jersey.apache.connector@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.jersey.bundles.repackaged.jersey-guava@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.jersey.containers.servlet.core@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.jersey.containers.servlet@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.jersey.core.jersey-client@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.jersey.core.jersey-common@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.jersey.core.jersey-server@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.jersey.ext.entityfiltering@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.jersey.media.jersey-media-json-jackson@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.pfl.pfl-asm@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.pfl.pfl-basic@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.pfl.pfl-dynamic@default:default"/>
|
||||||
|
<setEntry value="org.glassfish.pfl.pfl-tf@default:default"/>
|
||||||
|
<setEntry value="org.hamcrest.core@default:default"/>
|
||||||
|
<setEntry value="org.hamcrest.library@default:default"/>
|
||||||
|
<setEntry value="org.hsqldb@default:default"/>
|
||||||
|
<setEntry value="org.jacoco.agent@default:default"/>
|
||||||
|
<setEntry value="org.jacoco.core@default:default"/>
|
||||||
|
<setEntry value="org.jacoco.report@default:default"/>
|
||||||
|
<setEntry value="org.jaxen@default:default"/>
|
||||||
|
<setEntry value="org.jcodings@default:default"/>
|
||||||
|
<setEntry value="org.jdom2@default:default"/>
|
||||||
|
<setEntry value="org.jfree.chart@default:default"/>
|
||||||
|
<setEntry value="org.jfree.jcommon@default:default"/>
|
||||||
|
<setEntry value="org.joni@default:default"/>
|
||||||
|
<setEntry value="org.jsoup@default:default"/>
|
||||||
|
<setEntry value="org.junit.jupiter.api@default:default"/>
|
||||||
|
<setEntry value="org.junit.jupiter.engine@default:default"/>
|
||||||
|
<setEntry value="org.junit.jupiter.migrationsupport@default:default"/>
|
||||||
|
<setEntry value="org.junit.jupiter.params@default:default"/>
|
||||||
|
<setEntry value="org.junit.platform.commons@default:default"/>
|
||||||
|
<setEntry value="org.junit.platform.engine@default:default"/>
|
||||||
|
<setEntry value="org.junit.platform.launcher@default:default"/>
|
||||||
|
<setEntry value="org.junit.platform.runner@default:default"/>
|
||||||
|
<setEntry value="org.junit.platform.suite.api@default:default"/>
|
||||||
|
<setEntry value="org.junit.vintage.engine@default:default"/>
|
||||||
|
<setEntry value="org.junit@default:default"/>
|
||||||
|
<setEntry value="org.jvnet.mimepull@default:default"/>
|
||||||
|
<setEntry value="org.jvnet.staxex.stax-ex@default:default"/>
|
||||||
|
<setEntry value="org.kohsuke.args4j@default:default"/>
|
||||||
|
<setEntry value="org.krysalis.barcode4j@default:default"/>
|
||||||
|
<setEntry value="org.mockito@default:default"/>
|
||||||
|
<setEntry value="org.mortbay.jasper.apache-el@default:default"/>
|
||||||
|
<setEntry value="org.mortbay.jasper.apache-jsp@default:default"/>
|
||||||
|
<setEntry value="org.mozilla.javascript@default:default"/>
|
||||||
|
<setEntry value="org.objectweb.asm*7.0.0@default:default"/>
|
||||||
|
<setEntry value="org.objectweb.asm*7.2.0.v20191010-1910@default:default"/>
|
||||||
|
<setEntry value="org.objectweb.asm.analysis@default:default"/>
|
||||||
|
<setEntry value="org.objectweb.asm.commons*7.0.0@default:default"/>
|
||||||
|
<setEntry value="org.objectweb.asm.commons*7.2.0.v20191010-1910@default:default"/>
|
||||||
|
<setEntry value="org.objectweb.asm.tree*7.0.0@default:default"/>
|
||||||
|
<setEntry value="org.objectweb.asm.tree*7.2.0.v20191010-1910@default:default"/>
|
||||||
|
<setEntry value="org.objectweb.asm.tree.analysis@default:default"/>
|
||||||
|
<setEntry value="org.objectweb.asm.util*7.0.0@default:default"/>
|
||||||
|
<setEntry value="org.objectweb.asm.util*7.2.0.v20191010-1910@default:default"/>
|
||||||
|
<setEntry value="org.objenesis@default:default"/>
|
||||||
|
<setEntry value="org.opentest4j@default:default"/>
|
||||||
|
<setEntry value="org.passay@default:default"/>
|
||||||
|
<setEntry value="org.reactivestreams@default:default"/>
|
||||||
|
<setEntry value="org.sat4j.core@default:default"/>
|
||||||
|
<setEntry value="org.sat4j.pb@default:default"/>
|
||||||
|
<setEntry value="org.springframework.spring-jcl@default:default"/>
|
||||||
|
<setEntry value="org.tukaani.xz@default:default"/>
|
||||||
|
<setEntry value="org.w3c.css.sac@default:default"/>
|
||||||
|
<setEntry value="org.w3c.dom.events@default:default"/>
|
||||||
|
<setEntry value="org.w3c.dom.smil@default:default"/>
|
||||||
|
<setEntry value="org.w3c.dom.svg.patch@default:false"/>
|
||||||
|
<setEntry value="org.w3c.dom.svg@default:default"/>
|
||||||
|
<setEntry value="org.zkoss.zsoup@default:default"/>
|
||||||
|
<setEntry value="slf4j.api@default:default"/>
|
||||||
|
<setEntry value="slf4j.jcl@default:false"/>
|
||||||
|
<setEntry value="slf4j.jdk14@default:false"/>
|
||||||
|
<setEntry value="stax2-api@default:default"/>
|
||||||
|
<setEntry value="zjavassist@default:default"/>
|
||||||
|
</setAttribute>
|
||||||
|
<setAttribute key="selected_workspace_bundles">
|
||||||
|
<setEntry value="org.adempiere.base.callout@default:default"/>
|
||||||
|
<setEntry value="org.adempiere.base.process@default:default"/>
|
||||||
|
<setEntry value="org.adempiere.base@default:default"/>
|
||||||
|
<setEntry value="org.adempiere.eclipse.equinox.http.servlet@default:default"/>
|
||||||
|
<setEntry value="org.adempiere.install@default:default"/>
|
||||||
|
<setEntry value="org.adempiere.payment.processor@default:default"/>
|
||||||
|
<setEntry value="org.adempiere.pipo.handlers@default:default"/>
|
||||||
|
<setEntry value="org.adempiere.pipo@default:default"/>
|
||||||
|
<setEntry value="org.adempiere.plugin.utils@default:default"/>
|
||||||
|
<setEntry value="org.adempiere.report.jasper.library@default:false"/>
|
||||||
|
<setEntry value="org.adempiere.report.jasper@default:default"/>
|
||||||
|
<setEntry value="org.adempiere.ui@default:default"/>
|
||||||
|
<setEntry value="org.apache.ecs@default:default"/>
|
||||||
|
<setEntry value="org.compiere.db.oracle.provider@default:default"/>
|
||||||
|
<setEntry value="org.compiere.db.postgresql.provider@default:default"/>
|
||||||
|
<setEntry value="org.idempiere.hazelcast.service@default:default"/>
|
||||||
|
<setEntry value="org.idempiere.test@default:default"/>
|
||||||
|
</setAttribute>
|
||||||
|
<booleanAttribute key="show_selected_only" value="false"/>
|
||||||
|
<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
|
||||||
|
<booleanAttribute key="tracing" value="false"/>
|
||||||
|
<booleanAttribute key="useCustomFeatures" value="false"/>
|
||||||
|
<booleanAttribute key="useDefaultConfig" value="true"/>
|
||||||
|
<booleanAttribute key="useDefaultConfigArea" value="false"/>
|
||||||
|
<booleanAttribute key="useProduct" value="false"/>
|
||||||
|
</launchConfiguration>
|
|
@ -0,0 +1,50 @@
|
||||||
|
<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/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.idempiere</groupId>
|
||||||
|
<artifactId>org.idempiere.parent</artifactId>
|
||||||
|
<version>7.1.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../org.idempiere.parent/pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
<artifactId>org.idempiere.test</artifactId>
|
||||||
|
<packaging>eclipse-test-plugin</packaging>
|
||||||
|
<properties>
|
||||||
|
<idempiere.home>..</idempiere.home>
|
||||||
|
<skipTests>true</skipTests>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.eclipse.tycho</groupId>
|
||||||
|
<artifactId>tycho-surefire-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<argLine>
|
||||||
|
-DIDEMPIERE_HOME=${idempiere.home}
|
||||||
|
</argLine>
|
||||||
|
<testRuntime>p2Installed</testRuntime>
|
||||||
|
<skipTests>${skipTests}</skipTests>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.eclipse.tycho</groupId>
|
||||||
|
<artifactId>target-platform-configuration</artifactId>
|
||||||
|
<version>${tycho.version}</version>
|
||||||
|
<configuration>
|
||||||
|
<dependency-resolution>
|
||||||
|
<extraRequirements>
|
||||||
|
<!-- product IU under test -->
|
||||||
|
<requirement>
|
||||||
|
<type>p2-installable-unit</type>
|
||||||
|
<id>org.adempiere.server.product</id>
|
||||||
|
<versionRange>0.0.0</versionRange>
|
||||||
|
</requirement>
|
||||||
|
</extraRequirements>
|
||||||
|
</dependency-resolution>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
|
@ -0,0 +1,191 @@
|
||||||
|
/***********************************************************************
|
||||||
|
* This file is part of iDempiere ERP Open Source *
|
||||||
|
* http://www.idempiere.org *
|
||||||
|
* *
|
||||||
|
* Copyright (C) Contributors *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU General Public License *
|
||||||
|
* as published by the Free Software Foundation; either version 2 *
|
||||||
|
* 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 General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU 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. *
|
||||||
|
* *
|
||||||
|
* Contributors: *
|
||||||
|
* - hengsin *
|
||||||
|
**********************************************************************/
|
||||||
|
package org.idempiere.test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.fail;
|
||||||
|
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
|
||||||
|
import org.compiere.Adempiere;
|
||||||
|
import org.compiere.model.MAcctSchema;
|
||||||
|
import org.compiere.model.MClientInfo;
|
||||||
|
import org.compiere.model.MRole;
|
||||||
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Language;
|
||||||
|
import org.compiere.util.Trx;
|
||||||
|
import org.junit.jupiter.api.AfterAll;
|
||||||
|
import org.junit.jupiter.api.AfterEach;
|
||||||
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author hengsin
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public abstract class AbstractTestCase {
|
||||||
|
|
||||||
|
private Trx trx;
|
||||||
|
private LoginDetails loginDetails;
|
||||||
|
|
||||||
|
protected final int GARDEN_WORLD_CLIENT = 11;
|
||||||
|
protected final int GARDEN_WORLD_HQ_ORG = 11;
|
||||||
|
protected final int GARDEN_WORLD_ADMIN_USER = 101;
|
||||||
|
protected final int GARDEN_WORLD_ADMIN_ROLE = 102;
|
||||||
|
protected final int GARDEN_WORLD_HQ_WAREHOUSE = 103;
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
static void setup() {
|
||||||
|
Adempiere.startup(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
protected void init() {
|
||||||
|
String trxName = Trx.createTrxName(getClass().getName()+"_");
|
||||||
|
trx = Trx.get(trxName, true);
|
||||||
|
trx.start();
|
||||||
|
|
||||||
|
initContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected LoginDetails newLoginDetails() {
|
||||||
|
return new LoginDetails(GARDEN_WORLD_CLIENT, GARDEN_WORLD_HQ_ORG, GARDEN_WORLD_ADMIN_USER, GARDEN_WORLD_ADMIN_ROLE, GARDEN_WORLD_HQ_WAREHOUSE,
|
||||||
|
new Timestamp(System.currentTimeMillis()), Language.getLanguage("en_US"));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void initContext() {
|
||||||
|
loginDetails = newLoginDetails();
|
||||||
|
|
||||||
|
Env.setContext(Env.getCtx(), Env.AD_CLIENT_ID, loginDetails.getClientId());
|
||||||
|
Env.setContext(Env.getCtx(), Env.AD_ORG_ID, loginDetails.getOrganizationId());
|
||||||
|
Env.setContext(Env.getCtx(), Env.AD_USER_ID, loginDetails.getUserId());
|
||||||
|
Env.setContext(Env.getCtx(), Env.AD_ROLE_ID, loginDetails.getRoleId());
|
||||||
|
Env.setContext(Env.getCtx(), Env.M_WAREHOUSE_ID, loginDetails.getWarehouseId());
|
||||||
|
Env.setContext(Env.getCtx(), "#LanguageName", loginDetails.getLoginLanguage().getName());
|
||||||
|
Env.setContext(Env.getCtx(), "#Date", loginDetails.getLoginDate());
|
||||||
|
|
||||||
|
Env.verifyLanguage(Env.getCtx(), getLanguage());
|
||||||
|
Env.setContext(Env.getCtx(), Env.LANGUAGE, getLanguage().getAD_Language());
|
||||||
|
Env.setContext(Env.getCtx(), Env.LOCALE, getLanguage().getLocale().toString());
|
||||||
|
|
||||||
|
if (loginDetails.getRoleId() > 0) {
|
||||||
|
if (MRole.getDefault(Env.getCtx(), false).isShowAcct())
|
||||||
|
Env.setContext(Env.getCtx(), "#ShowAcct", "Y");
|
||||||
|
else
|
||||||
|
Env.setContext(Env.getCtx(), "#ShowAcct", "N");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Define AcctSchema , Currency, HasAlias **/
|
||||||
|
if (loginDetails.getClientId() > 0) {
|
||||||
|
if (MClientInfo.get(Env.getCtx(), loginDetails.getClientId()).getC_AcctSchema1_ID() > 0) {
|
||||||
|
MAcctSchema primary = MAcctSchema.get(Env.getCtx(), MClientInfo.get(Env.getCtx(), loginDetails.getClientId()).getC_AcctSchema1_ID());
|
||||||
|
Env.setContext(Env.getCtx(), "$C_AcctSchema_ID", primary.getC_AcctSchema_ID());
|
||||||
|
Env.setContext(Env.getCtx(), "$C_Currency_ID", primary.getC_Currency_ID());
|
||||||
|
Env.setContext(Env.getCtx(), "$HasAlias", primary.isHasAlias());
|
||||||
|
}
|
||||||
|
|
||||||
|
MAcctSchema[] ass = MAcctSchema.getClientAcctSchema(Env.getCtx(), loginDetails.getClientId());
|
||||||
|
if(ass != null && ass.length > 1) {
|
||||||
|
for(MAcctSchema as : ass) {
|
||||||
|
if (as.getAD_OrgOnly_ID() != 0) {
|
||||||
|
if (as.isSkipOrg(loginDetails.getOrganizationId())) {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
Env.setContext(Env.getCtx(), "$C_AcctSchema_ID", as.getC_AcctSchema_ID());
|
||||||
|
Env.setContext(Env.getCtx(), "$C_Currency_ID", as.getC_Currency_ID());
|
||||||
|
Env.setContext(Env.getCtx(), "$HasAlias", as.isHasAlias());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterEach
|
||||||
|
protected void tearDown() {
|
||||||
|
if (trx != null && trx.isActive()) {
|
||||||
|
trx.rollback();
|
||||||
|
trx.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Trx getTrx() {
|
||||||
|
return trx;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void commit() {
|
||||||
|
if (trx != null && trx.isActive()) {
|
||||||
|
try {
|
||||||
|
trx.commit(true);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
fail(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void rollback() {
|
||||||
|
if (trx != null && trx.isActive()) {
|
||||||
|
trx.rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected int getAD_Client_ID() {
|
||||||
|
return loginDetails.getClientId();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected int getAD_Org_ID() {
|
||||||
|
return loginDetails.getOrganizationId();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected int getAD_User_ID() {
|
||||||
|
return loginDetails.getUserId();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected int getAD_Role_ID() {
|
||||||
|
return loginDetails.getRoleId();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected int getM_Warehouse_ID() {
|
||||||
|
return loginDetails.getWarehouseId();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Language getLanguage() {
|
||||||
|
return loginDetails.getLoginLanguage();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Timestamp getLoginDate() {
|
||||||
|
return loginDetails.getLoginDate();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getTrxName() {
|
||||||
|
return trx.getTrxName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterAll
|
||||||
|
static void shutdown() {
|
||||||
|
Adempiere.stop();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,114 @@
|
||||||
|
/***********************************************************************
|
||||||
|
* This file is part of iDempiere ERP Open Source *
|
||||||
|
* http://www.idempiere.org *
|
||||||
|
* *
|
||||||
|
* Copyright (C) Contributors *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU General Public License *
|
||||||
|
* as published by the Free Software Foundation; either version 2 *
|
||||||
|
* 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 General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU 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. *
|
||||||
|
* *
|
||||||
|
* Contributors: *
|
||||||
|
* - hengsin *
|
||||||
|
**********************************************************************/
|
||||||
|
package org.idempiere.test;
|
||||||
|
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
|
||||||
|
import org.compiere.util.Language;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author hengsin
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class LoginDetails {
|
||||||
|
private int clientId;
|
||||||
|
private int organizationId;
|
||||||
|
private int userId;
|
||||||
|
private int roleId;
|
||||||
|
private int warehouseId;
|
||||||
|
private Timestamp loginDate;
|
||||||
|
private Language loginLanguage;
|
||||||
|
|
||||||
|
public LoginDetails(int clientId, int organizationId, int userId, int roleId, int warehouseId, Timestamp loginDate,
|
||||||
|
Language loginLanguage) {
|
||||||
|
super();
|
||||||
|
this.clientId = clientId;
|
||||||
|
this.organizationId = organizationId;
|
||||||
|
this.userId = userId;
|
||||||
|
this.roleId = roleId;
|
||||||
|
this.warehouseId = warehouseId;
|
||||||
|
this.loginDate = loginDate;
|
||||||
|
this.loginLanguage = loginLanguage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getClientId() {
|
||||||
|
return clientId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setClientId(int clientId) {
|
||||||
|
this.clientId = clientId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getOrganizationId() {
|
||||||
|
return organizationId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrganizationId(int organizationId) {
|
||||||
|
this.organizationId = organizationId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getUserId() {
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserId(int userId) {
|
||||||
|
this.userId = userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRoleId() {
|
||||||
|
return roleId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRoleId(int roleId) {
|
||||||
|
this.roleId = roleId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getWarehouseId() {
|
||||||
|
return warehouseId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWarehouseId(int warehouseId) {
|
||||||
|
this.warehouseId = warehouseId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Timestamp getLoginDate() {
|
||||||
|
return loginDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLoginDate(Timestamp loginDate) {
|
||||||
|
this.loginDate = loginDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Language getLoginLanguage() {
|
||||||
|
return loginLanguage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLoginLanguage(Language loginLanguage) {
|
||||||
|
this.loginLanguage = loginLanguage;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,207 @@
|
||||||
|
/******************************************************************************
|
||||||
|
* Product: Adempiere ERP & CRM Smart Business Solution *
|
||||||
|
* Copyright (C) 2008 SC ARHIPAC SERVICE SRL. All Rights Reserved. *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms version 2 of the GNU General Public License as published *
|
||||||
|
* by the Free Software Foundation. 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 General Public License for more details. *
|
||||||
|
* You should have received a copy of the GNU General Public License along *
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
|
||||||
|
*****************************************************************************/
|
||||||
|
package org.idempiere.test.base;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertSame;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.adempiere.exceptions.DBException;
|
||||||
|
import org.compiere.model.MTable;
|
||||||
|
import org.compiere.util.DB;
|
||||||
|
import org.compiere.util.KeyNamePair;
|
||||||
|
import org.compiere.util.TimeUtil;
|
||||||
|
import org.compiere.util.ValueNamePair;
|
||||||
|
import org.idempiere.test.AbstractTestCase;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test {@link org.compiere.util.DB} class
|
||||||
|
* @author Teo Sarca, www.arhipac.ro
|
||||||
|
* @author hengsin
|
||||||
|
*/
|
||||||
|
public class DBTest extends AbstractTestCase
|
||||||
|
{
|
||||||
|
@Test
|
||||||
|
public void test_getSQLValueEx() throws Exception
|
||||||
|
{
|
||||||
|
int result = DB.getSQLValueEx(null, "SELECT 10 FROM DUAL");
|
||||||
|
assertEquals(10, result);
|
||||||
|
//
|
||||||
|
result = DB.getSQLValue(null, "SELECT 10 FROM AD_SYSTEM WHERE 1=2");
|
||||||
|
assertEquals(-1, result, "No value should be returned");
|
||||||
|
//
|
||||||
|
assertThrows(DBException.class, () -> {
|
||||||
|
DB.getSQLValueEx(null, "SELECT 10 FROM INEXISTENT_TABLE");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_getSQLValue() throws Exception
|
||||||
|
{
|
||||||
|
int result = DB.getSQLValue(null, "SELECT 10 FROM DUAL");
|
||||||
|
assertEquals(10, result);
|
||||||
|
//
|
||||||
|
result = DB.getSQLValue(null, "SELECT 10 FROM AD_SYSTEM WHERE 1=2");
|
||||||
|
assertEquals(-1, result, "No value should be returned");
|
||||||
|
//
|
||||||
|
result = DB.getSQLValue(null, "SELECT 10 FROM INEXISTENT_TABLE");
|
||||||
|
assertEquals(-1, result, "Error should be signaled");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_getSQLValueBDEx() throws Exception
|
||||||
|
{
|
||||||
|
BigDecimal result = DB.getSQLValueBDEx(null, "SELECT 10 FROM DUAL");
|
||||||
|
assertEquals(BigDecimal.TEN, result);
|
||||||
|
//
|
||||||
|
result = DB.getSQLValueBD(null, "SELECT 10 FROM AD_SYSTEM WHERE 1=2");
|
||||||
|
assertNull(result, "No value should be returned");
|
||||||
|
//
|
||||||
|
assertThrows(DBException.class, () -> {
|
||||||
|
DB.getSQLValueBDEx(null, "SELECT 10 FROM INEXISTENT_TABLE");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_getSQLValueBD() throws Exception
|
||||||
|
{
|
||||||
|
BigDecimal result = DB.getSQLValueBD(null, "SELECT 10 FROM DUAL");
|
||||||
|
assertEquals(BigDecimal.TEN, result);
|
||||||
|
//
|
||||||
|
result = DB.getSQLValueBD(null, "SELECT 10 FROM AD_SYSTEM WHERE 1=2");
|
||||||
|
assertNull(result, "No value should be returned");
|
||||||
|
//
|
||||||
|
result = DB.getSQLValueBD(null, "SELECT 10 FROM INEXISTENT_TABLE");
|
||||||
|
assertNull(result, "Error should be signaled");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_getSQLValueStringEx() throws Exception
|
||||||
|
{
|
||||||
|
String result = DB.getSQLValueStringEx(null, "SELECT 'string' FROM DUAL");
|
||||||
|
assertEquals("string", result);
|
||||||
|
//
|
||||||
|
result = DB.getSQLValueStringEx(null, "SELECT 10 FROM AD_SYSTEM WHERE 1=2");
|
||||||
|
assertNull(result, "No value should be returned");
|
||||||
|
//
|
||||||
|
assertThrows(DBException.class, () -> {
|
||||||
|
DB.getSQLValueStringEx(null, "SELECT 'string' FROM INEXISTENT_TABLE");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_getSQLValueString() throws Exception
|
||||||
|
{
|
||||||
|
String result = DB.getSQLValueString(null, "SELECT 'string' FROM DUAL");
|
||||||
|
assertEquals("string", result);
|
||||||
|
//
|
||||||
|
result = DB.getSQLValueString(null, "SELECT 'string' FROM AD_SYSTEM WHERE 1=2");
|
||||||
|
assertNull(result, "No value should be returned");
|
||||||
|
//
|
||||||
|
result = DB.getSQLValueString(null, "SELECT 'string' FROM INEXISTENT_TABLE");
|
||||||
|
assertNull(result, "Error should be signaled");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_getSQLValueTSEx() throws Exception
|
||||||
|
{
|
||||||
|
final Timestamp target = TimeUtil.getDay(2008, 01, 01);
|
||||||
|
//
|
||||||
|
Timestamp result = DB.getSQLValueTSEx(null, "SELECT TO_DATE('2008-01-01','YYYY-MM-DD') FROM AD_SYSTEM");
|
||||||
|
assertEquals(target, result);
|
||||||
|
//
|
||||||
|
result = DB.getSQLValueTSEx(null, "SELECT TO_DATE('2008-01-01','YYYY-MM-DD') FROM AD_SYSTEM WHERE 1=2");
|
||||||
|
assertNull(result, "No value should be returned");
|
||||||
|
//
|
||||||
|
assertThrows(DBException.class, () -> {
|
||||||
|
DB.getSQLValueTSEx(null, "SELECT TO_DATE('2008-01-01','YYYY-MM-DD') FROM INEXISTENT_TABLE");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_getSQLValueTS() throws Exception
|
||||||
|
{
|
||||||
|
final Timestamp target = TimeUtil.getDay(2008, 01, 01);
|
||||||
|
//
|
||||||
|
Timestamp result = DB.getSQLValueTS(null, "SELECT TO_DATE('2008-01-01','YYYY-MM-DD') FROM DUAL");
|
||||||
|
assertEquals(target, result);
|
||||||
|
//
|
||||||
|
result = DB.getSQLValueTS(null, "SELECT TO_DATE('2008-01-01','YYYY-MM-DD') FROM AD_SYSTEM WHERE 1=2");
|
||||||
|
assertNull(result, "No value should be returned");
|
||||||
|
//
|
||||||
|
result = DB.getSQLValueTS(null, "SELECT TO_DATE('2008-01-01','YYYY-MM-DD') FROM INEXISTENT_TABLE");
|
||||||
|
assertNull(result, "Error should be signaled");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_getValueNamePairs() throws Exception
|
||||||
|
{
|
||||||
|
ArrayList<Object> params = new ArrayList<Object>();
|
||||||
|
params.add(MTable.ACCESSLEVEL_AD_Reference_ID);
|
||||||
|
final String sql = "SELECT Value, Name FROM AD_Ref_List WHERE AD_Reference_ID=? ORDER BY Value";
|
||||||
|
// Get (with optional item)
|
||||||
|
ValueNamePair[] arr = DB.getValueNamePairs(sql, true, params);
|
||||||
|
assertEquals(6+1, arr.length, "Invalid size");
|
||||||
|
assertSame(ValueNamePair.EMPTY, arr[0], "First value should be EMPTY");
|
||||||
|
assertEquals(arr[1].getValue(), "1");
|
||||||
|
assertEquals(arr[2].getValue(), "2");
|
||||||
|
assertEquals(arr[3].getValue(), "3");
|
||||||
|
assertEquals(arr[4].getValue(), "4");
|
||||||
|
assertEquals(arr[5].getValue(), "6");
|
||||||
|
assertEquals(arr[6].getValue(), "7");
|
||||||
|
// Get (NO optional item)
|
||||||
|
arr = DB.getValueNamePairs(sql, false, params);
|
||||||
|
assertEquals(6, arr.length, "Invalid size");
|
||||||
|
assertEquals(arr[0].getValue(), "1");
|
||||||
|
assertEquals(arr[1].getValue(), "2");
|
||||||
|
assertEquals(arr[2].getValue(), "3");
|
||||||
|
assertEquals(arr[3].getValue(), "4");
|
||||||
|
assertEquals(arr[4].getValue(), "6");
|
||||||
|
assertEquals(arr[5].getValue(), "7");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_getKeyNamePairs() throws Exception
|
||||||
|
{
|
||||||
|
ArrayList<Object> params = new ArrayList<Object>();
|
||||||
|
params.add(MTable.ACCESSLEVEL_AD_Reference_ID);
|
||||||
|
final String sql = "SELECT AD_Ref_List_ID, Value FROM AD_Ref_List WHERE AD_Reference_ID=? ORDER BY Value";
|
||||||
|
// Get (with optional item)
|
||||||
|
KeyNamePair[] arr = DB.getKeyNamePairs(sql, true, params);
|
||||||
|
assertEquals(6+1, arr.length, "Invalid size");
|
||||||
|
assertSame(KeyNamePair.EMPTY, arr[0], "First value should be EMPTY");
|
||||||
|
assertEquals(arr[1].getName(), "1");
|
||||||
|
assertEquals(arr[2].getName(), "2");
|
||||||
|
assertEquals(arr[3].getName(), "3");
|
||||||
|
assertEquals(arr[4].getName(), "4");
|
||||||
|
assertEquals(arr[5].getName(), "6");
|
||||||
|
assertEquals(arr[6].getName(), "7");
|
||||||
|
// Get (NO optional item)
|
||||||
|
arr = DB.getKeyNamePairs(sql, false, params);
|
||||||
|
assertEquals(6, arr.length, "Invalid size");
|
||||||
|
assertEquals(arr[0].getName(), "1");
|
||||||
|
assertEquals(arr[1].getName(), "2");
|
||||||
|
assertEquals(arr[2].getName(), "3");
|
||||||
|
assertEquals(arr[3].getName(), "4");
|
||||||
|
assertEquals(arr[4].getName(), "6");
|
||||||
|
assertEquals(arr[5].getName(), "7");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,84 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* This file is part of iDempiere ERP Open Source *
|
||||||
|
* http://www.idempiere.org *
|
||||||
|
* *
|
||||||
|
* Copyright (C) Contributors *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU General Public License *
|
||||||
|
* as published by the Free Software Foundation; either version 2 *
|
||||||
|
* 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 General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU 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. *
|
||||||
|
* *
|
||||||
|
* Contributors: *
|
||||||
|
* - Carlos Ruiz - globalqss *
|
||||||
|
* - hengsin *
|
||||||
|
**********************************************************************/
|
||||||
|
package org.idempiere.test.base;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import org.compiere.util.EMail;
|
||||||
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
|
import org.junit.jupiter.params.provider.MethodSource;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Unit test sample from http://examples.javacodegeeks.com/core-java/util/regex/matcher/validate-email-address-with-java-regular-expression-example/
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class EmailFormatValidatorTest {
|
||||||
|
|
||||||
|
public EmailFormatValidatorTest() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Collection<Object[]> data() {
|
||||||
|
Object[][] data = new Object[][] {
|
||||||
|
{ "javacodegeeks@gmail.com.2j",true },
|
||||||
|
{ "java@java@oracle.com", false }, // you cannot have @ twice in the address
|
||||||
|
{ "java!!!@example.com", true },
|
||||||
|
{ "mysite@.com", false }, // tld cannot start with a dot
|
||||||
|
{ "javacodegees.com", false }, // must contain a @ character and a tld
|
||||||
|
{ ".javacodegees.com@at.com", false },
|
||||||
|
{ "javacodegees..javacom@at.com", false },
|
||||||
|
{ "javacodegeeks@gmail.com",true },
|
||||||
|
{ "nikos+mylist@gmail.com", true },
|
||||||
|
{ "abc.efg-900@gmail-list.com", true },
|
||||||
|
{ "abc123@example.com.gr", true },
|
||||||
|
{ "username+detail@example.com", true },
|
||||||
|
{ "user@example.museum", true },
|
||||||
|
{ "myemail+sketchysite@gmail.com", true },
|
||||||
|
{ "micky.o'finnagan@wherever.com", true },
|
||||||
|
{ "exampleemail@testing.info", true },
|
||||||
|
{ "marcelo.calbucci%mandic@fapesp.com.br", true },
|
||||||
|
{ "customer/department=shipping@example.com", true },
|
||||||
|
{ "$A12345@example.com", true },
|
||||||
|
{ "!def!xyz%abc@example.com", true },
|
||||||
|
{ "_somename@example.com", true },
|
||||||
|
{ "nuñez@globalqss.com", true },
|
||||||
|
{ "name@tld", true },
|
||||||
|
{ "john@server.department.company.com", true }
|
||||||
|
};
|
||||||
|
|
||||||
|
return Arrays.asList(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ParameterizedTest
|
||||||
|
@MethodSource("data")
|
||||||
|
public void test(String arg, Boolean expectedValidation) {
|
||||||
|
Boolean res = EMail.validate(arg);
|
||||||
|
assertEquals(expectedValidation, res, "Result");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,322 @@
|
||||||
|
/***********************************************************************
|
||||||
|
* This file is part of iDempiere ERP Open Source *
|
||||||
|
* http://www.idempiere.org *
|
||||||
|
* *
|
||||||
|
* Copyright (C) Contributors *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU General Public License *
|
||||||
|
* as published by the Free Software Foundation; either version 2 *
|
||||||
|
* 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 General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU 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. *
|
||||||
|
* *
|
||||||
|
* Contributors: *
|
||||||
|
* - teo sarca *
|
||||||
|
* - hengsin *
|
||||||
|
**********************************************************************/
|
||||||
|
package org.idempiere.test.base;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.adempiere.exceptions.DBException;
|
||||||
|
import org.compiere.model.MClient;
|
||||||
|
import org.compiere.model.MTest;
|
||||||
|
import org.compiere.model.POInfo;
|
||||||
|
import org.compiere.util.DB;
|
||||||
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.Trx;
|
||||||
|
import org.idempiere.test.AbstractTestCase;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for {@link org.compiere.model.PO} class.
|
||||||
|
* @author Teo Sarca, SC ARHIPAC SERVICE SRL
|
||||||
|
* @author hengsin
|
||||||
|
*/
|
||||||
|
public class POTest extends AbstractTestCase
|
||||||
|
{
|
||||||
|
public static class MyTestPO extends MTest
|
||||||
|
{
|
||||||
|
private static final long serialVersionUID = -6861171283806782985L;
|
||||||
|
protected boolean failOnSave = false;
|
||||||
|
|
||||||
|
|
||||||
|
private MyTestPO m_parent = null;
|
||||||
|
private MyTestPO m_dependentRecord = null;
|
||||||
|
|
||||||
|
public static String getName(int Test_ID, String trxName)
|
||||||
|
{
|
||||||
|
String sql = "SELECT "+COLUMNNAME_Name+" FROM "+Table_Name
|
||||||
|
+" WHERE "+COLUMNNAME_Test_ID+"=?";
|
||||||
|
return DB.getSQLValueStringEx(trxName, sql, Test_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean exists(int Test_ID, String trxName)
|
||||||
|
{
|
||||||
|
final String sql = "SELECT "+COLUMNNAME_Test_ID+" FROM "+Table_Name
|
||||||
|
+" WHERE "+COLUMNNAME_Test_ID+"=?";
|
||||||
|
int id = DB.getSQLValueEx(trxName, sql, Test_ID);
|
||||||
|
return id > 0 && id == Test_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MyTestPO(Properties ctx, boolean failOnSave, String trxName)
|
||||||
|
{
|
||||||
|
super(ctx, "Test_"+System.currentTimeMillis(), 10);
|
||||||
|
this.set_TrxName(trxName);
|
||||||
|
this.setDescription(""+getClass());
|
||||||
|
this.failOnSave = failOnSave;
|
||||||
|
}
|
||||||
|
public MyTestPO(Properties ctx, int id, String trxName)
|
||||||
|
{
|
||||||
|
super(ctx, id, trxName);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected boolean afterSave(boolean newRecord, boolean success)
|
||||||
|
{
|
||||||
|
if (m_parent == null)
|
||||||
|
{
|
||||||
|
m_dependentRecord = new MyTestPO(getCtx(), false, get_TrxName());
|
||||||
|
m_dependentRecord.m_parent = this;
|
||||||
|
m_dependentRecord.setName("D_"+this.getName());
|
||||||
|
m_dependentRecord.saveEx();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.failOnSave)
|
||||||
|
throw new RuntimeException("Never save this object [trxName="+get_TrxName()+", success="+success+"]");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDependent_ID()
|
||||||
|
{
|
||||||
|
return (m_dependentRecord != null ? m_dependentRecord.get_ID() : -1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the following methods:
|
||||||
|
* <ul>
|
||||||
|
* <li>{@link org.compiere.model.PO#is_Changed()}
|
||||||
|
* <li>{@link org.compiere.model.PO#is_ValueChanged(String)}
|
||||||
|
* </ul>
|
||||||
|
* Applies to following bugs:
|
||||||
|
* <ul>
|
||||||
|
* <li>[ 1704828 ] PO.is_Changed() and PO.is_ValueChanged are not consistent
|
||||||
|
* </ul>
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void test_Changed()
|
||||||
|
{
|
||||||
|
String[] testStrings = new String[] {
|
||||||
|
"a",
|
||||||
|
"test",
|
||||||
|
};
|
||||||
|
// Create the test PO and save
|
||||||
|
MTest testPO = new MTest(Env.getCtx(), getClass().getName(), 1);
|
||||||
|
testPO.set_TrxName(getTrxName());
|
||||||
|
|
||||||
|
for (String str : testStrings)
|
||||||
|
{
|
||||||
|
testPO.setHelp(str);
|
||||||
|
testPO.saveEx();
|
||||||
|
String originalString = testPO.getHelp();
|
||||||
|
String info = "testString=[" + str + "]" + ", originalString=[" + originalString + "]";
|
||||||
|
|
||||||
|
// Initial asserts (nothing changed)
|
||||||
|
assertFalse(testPO.is_ValueChanged(MTest.COLUMNNAME_Help), info);
|
||||||
|
assertFalse(testPO.is_Changed(), info);
|
||||||
|
// Set the same name
|
||||||
|
testPO.setHelp(originalString);
|
||||||
|
assertFalse(testPO.is_ValueChanged(MTest.COLUMNNAME_Help), info);
|
||||||
|
assertFalse(testPO.is_Changed(), info);
|
||||||
|
// Set a new name
|
||||||
|
testPO.setHelp(originalString+"-changed");
|
||||||
|
assertTrue(testPO.is_ValueChanged(MTest.COLUMNNAME_Help), info);
|
||||||
|
assertTrue(testPO.is_Changed(), info);
|
||||||
|
// Set the original name back
|
||||||
|
testPO.setHelp(originalString);
|
||||||
|
assertFalse(testPO.is_ValueChanged(MTest.COLUMNNAME_Help), info);
|
||||||
|
assertFalse(testPO.is_Changed(), info);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finally, delete the testPO
|
||||||
|
testPO.delete(true, getTrxName());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <li>BF [ 1990856 ] PO.set_Value* : truncate string more than needed
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testTruncatedStrings() {
|
||||||
|
//
|
||||||
|
// Creating a huge string for testing:
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (int i = 1; i <= 1000; i++) {
|
||||||
|
sb.append("0123456789");
|
||||||
|
}
|
||||||
|
String bigString = sb.toString();
|
||||||
|
//
|
||||||
|
// Create the test PO:
|
||||||
|
MTest testPO = new MTest(Env.getCtx(), getClass().getName(), 1);
|
||||||
|
testPO.set_TrxName(getTrxName());
|
||||||
|
//
|
||||||
|
// Getting Max Length:
|
||||||
|
POInfo info = POInfo.getPOInfo(Env.getCtx(), MTest.Table_ID);
|
||||||
|
int maxLength = info.getFieldLength(info.getColumnIndex(MTest.COLUMNNAME_Name));
|
||||||
|
//
|
||||||
|
// Test with a string that has less then maxLength
|
||||||
|
{
|
||||||
|
testPO.set_ValueOfColumn(MTest.COLUMNNAME_Name, bigString.substring(0, maxLength - 1));
|
||||||
|
String resultString = (String) testPO.get_Value(MTest.COLUMNNAME_Name);
|
||||||
|
assertEquals(maxLength - 1, resultString.length(), "String was not truncated correctly (1)");
|
||||||
|
//
|
||||||
|
testPO.setName(bigString.substring(0, maxLength - 1));
|
||||||
|
assertEquals(maxLength - 1, testPO.getName().length(), "String was not truncated correctly (2)");
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Test with a string that has maxLength
|
||||||
|
{
|
||||||
|
testPO.set_ValueOfColumn(MTest.COLUMNNAME_Name, bigString.substring(0, maxLength));
|
||||||
|
String resultString = (String) testPO.get_Value(MTest.COLUMNNAME_Name);
|
||||||
|
assertEquals(maxLength, resultString.length(), "String was not truncated correctly (3)");
|
||||||
|
//
|
||||||
|
testPO.setName(bigString.substring(0, maxLength));
|
||||||
|
assertEquals(maxLength, testPO.getName().length(), "String was not truncated correctly (4)");
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Test with a string that has more than maxLength
|
||||||
|
{
|
||||||
|
testPO.set_ValueOfColumn(MTest.COLUMNNAME_Name, bigString);
|
||||||
|
String resultString = (String) testPO.get_Value(MTest.COLUMNNAME_Name);
|
||||||
|
assertEquals(maxLength, resultString.length(), "String was not truncated correctly (5)");
|
||||||
|
//
|
||||||
|
testPO.setName(bigString);
|
||||||
|
assertEquals(maxLength, testPO.getName().length(), "String was not truncated correctly (6)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object should NOT be saved if afterSave fails EVEN if is outside transaction (trxName=null)
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testAfterSaveError()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Test for new objects
|
||||||
|
{
|
||||||
|
MyTestPO test = new MyTestPO(Env.getCtx(), true, null);
|
||||||
|
assertFalse(test.save(), "Object should not be saved -- "+test);
|
||||||
|
assertFalse(test.get_ID() <= 0, "Object should not be saved -- "+test);
|
||||||
|
assertFalse(MyTestPO.exists(test.get_ID(), null), "Object should not be saved(2) -- "+test);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Test for old objects
|
||||||
|
{
|
||||||
|
MyTestPO test = new MyTestPO(Env.getCtx(), false, null);
|
||||||
|
assertTrue(test.save(), "Object *should* be saved -- "+test);
|
||||||
|
//
|
||||||
|
MyTestPO test2 = new MyTestPO(Env.getCtx(), test.get_ID(), null);
|
||||||
|
assertEquals(test2.get_ID(), test.get_ID(), "Object not found");
|
||||||
|
test2.failOnSave = true;
|
||||||
|
test2.setName(test2.getName()+"_2");
|
||||||
|
assertFalse(test2.save(), "Object should not be saved -- "+test2);
|
||||||
|
//
|
||||||
|
String name = MyTestPO.getName(test2.get_ID(), null);
|
||||||
|
assertEquals(test.getName(), name, "Object should not be modified(2) -- id="+test2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If one object fails on after save we should not revert all transaction.
|
||||||
|
* BF [ 2849122 ] PO.AfterSave is not rollback on error
|
||||||
|
* https://sourceforge.net/tracker/index.php?func=detail&aid=2849122&group_id=176962&atid=879332#
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testAfterSaveError_BF2849122()
|
||||||
|
{
|
||||||
|
assertNotNull(getTrxName(), "TrxName should not be null");
|
||||||
|
|
||||||
|
MyTestPO t1 = new MyTestPO(Env.getCtx(), false, getTrxName());
|
||||||
|
t1.saveEx();
|
||||||
|
assertTrue(MyTestPO.exists(t1.get_ID(), getTrxName()), "Object not found(1) - t1="+t1);
|
||||||
|
assertTrue(MyTestPO.exists(t1.getDependent_ID(), getTrxName()), "Object not found(1) - t1(dep)="+t1);
|
||||||
|
//
|
||||||
|
final MyTestPO t2 = new MyTestPO(Env.getCtx(), true, getTrxName());
|
||||||
|
try
|
||||||
|
{
|
||||||
|
t2.saveEx();
|
||||||
|
}
|
||||||
|
catch (Exception e){}
|
||||||
|
assertTrue(MyTestPO.exists(t1.get_ID(), getTrxName()), "Object not found(2) - t1="+t1);
|
||||||
|
assertTrue(MyTestPO.exists(t1.getDependent_ID(), getTrxName()), "Object not found(2) - t1(dep)="+t1);
|
||||||
|
assertFalse(MyTestPO.exists(t2.get_ID(), getTrxName()), "Object found(2) - t2="+t2);
|
||||||
|
assertFalse(MyTestPO.exists(t2.getDependent_ID(), getTrxName()), "Object found(2) - t2(dep)="+t2);
|
||||||
|
//
|
||||||
|
final MyTestPO t3 = new MyTestPO(Env.getCtx(), false, getTrxName());
|
||||||
|
t3.saveEx();
|
||||||
|
assertTrue(MyTestPO.exists(t1.get_ID(), getTrxName()), "Object not found(3) - t1="+t1);
|
||||||
|
assertTrue(MyTestPO.exists(t1.getDependent_ID(), getTrxName()), "Object not found(3) - t1(dep)="+t1);
|
||||||
|
assertFalse(MyTestPO.exists(t2.get_ID(), getTrxName()), "Object found(3) - t2="+t2);
|
||||||
|
assertFalse(MyTestPO.exists(t2.getDependent_ID(), getTrxName()), "Object found(3) - t2(dep)="+t2);
|
||||||
|
assertTrue(MyTestPO.exists(t3.get_ID(), getTrxName()), "Object not found(3) - t3="+t3);
|
||||||
|
assertTrue(MyTestPO.exists(t3.getDependent_ID(), getTrxName()), "Object not found(3) - t3(dep)="+t3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testForUpdate()
|
||||||
|
{
|
||||||
|
MClient client = new MClient(Env.getCtx(), Env.getAD_Client_ID(Env.getCtx()), getTrxName());
|
||||||
|
assertDoesNotThrow(() -> {
|
||||||
|
boolean ok = DB.getDatabase().forUpdate(client, 5);
|
||||||
|
assertTrue(ok);
|
||||||
|
});
|
||||||
|
|
||||||
|
Trx trx2 = Trx.get(Trx.createTrxName(), true);
|
||||||
|
try {
|
||||||
|
trx2.start();
|
||||||
|
MClient client2 = new MClient(Env.getCtx(), Env.getAD_Client_ID(Env.getCtx()), trx2.getTrxName());
|
||||||
|
assertThrows(DBException.class, () -> {
|
||||||
|
DB.getDatabase().forUpdate(client2, 5);
|
||||||
|
});
|
||||||
|
} finally {
|
||||||
|
trx2.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
String description = client.getDescription();
|
||||||
|
client.setDescription(client.getName()+".Description");
|
||||||
|
assertDoesNotThrow(() -> {
|
||||||
|
client.saveEx();
|
||||||
|
});
|
||||||
|
rollback();
|
||||||
|
client.load(getTrxName());
|
||||||
|
assertEquals(description, client.getDescription());
|
||||||
|
|
||||||
|
Trx trx3 = Trx.get(Trx.createTrxName(), true);
|
||||||
|
try {
|
||||||
|
trx3.start();
|
||||||
|
MClient client3 = new MClient(Env.getCtx(), Env.getAD_Client_ID(Env.getCtx()), trx3.getTrxName());
|
||||||
|
assertDoesNotThrow(() -> {
|
||||||
|
boolean ok = DB.getDatabase().forUpdate(client3, 5);
|
||||||
|
assertTrue(ok);
|
||||||
|
});
|
||||||
|
} finally {
|
||||||
|
trx3.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,326 @@
|
||||||
|
/***********************************************************************
|
||||||
|
* This file is part of iDempiere ERP Open Source *
|
||||||
|
* http://www.idempiere.org *
|
||||||
|
* *
|
||||||
|
* Copyright (C) Contributors *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU General Public License *
|
||||||
|
* as published by the Free Software Foundation; either version 2 *
|
||||||
|
* 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 General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU 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. *
|
||||||
|
* *
|
||||||
|
* Contributors: *
|
||||||
|
* - hengsin *
|
||||||
|
**********************************************************************/
|
||||||
|
package org.idempiere.test.base;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
import static org.junit.jupiter.api.Assertions.fail;
|
||||||
|
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.adempiere.exceptions.DBException;
|
||||||
|
import org.compiere.model.MTable;
|
||||||
|
import org.compiere.model.POResultSet;
|
||||||
|
import org.compiere.model.Query;
|
||||||
|
import org.compiere.model.X_AD_Element;
|
||||||
|
import org.compiere.util.DB;
|
||||||
|
import org.compiere.util.Env;
|
||||||
|
import org.compiere.util.KeyNamePair;
|
||||||
|
import org.idempiere.test.AbstractTestCase;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author hengsin
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class QueryTest extends AbstractTestCase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public QueryTest() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNoTable() {
|
||||||
|
assertThrows(IllegalArgumentException.class, () -> {
|
||||||
|
new Query(Env.getCtx(), "NO_TABLE_DEFINED", null, getTrxName());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testList() throws Exception
|
||||||
|
{
|
||||||
|
List<MTable> list = new Query(Env.getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
||||||
|
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
||||||
|
.setOrderBy("TableName")
|
||||||
|
.list();
|
||||||
|
assertEquals(2, list.size(), "Invalid list size");
|
||||||
|
assertEquals(list.get(0).getTableName(), "C_Invoice", "Invalid object 1");
|
||||||
|
assertEquals(list.get(1).getTableName(), "M_InOut", "Invalid object 2");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testScroll() throws Exception
|
||||||
|
{
|
||||||
|
POResultSet<MTable> rs = new Query(Env.getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
||||||
|
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
||||||
|
.setOrderBy("TableName")
|
||||||
|
.scroll();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
while (rs.hasNext())
|
||||||
|
{
|
||||||
|
MTable t = rs.next();
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
assertEquals("C_Invoice", t.getTableName(), "Invalid object "+i);
|
||||||
|
}
|
||||||
|
else if (i == 1)
|
||||||
|
{
|
||||||
|
assertEquals("M_InOut", t.getTableName(), "Invalid object "+i);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fail("More objects retrived than expected");
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
DB.close(rs);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIterate() throws Exception
|
||||||
|
{
|
||||||
|
Iterator<MTable> it = new Query(Env.getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
||||||
|
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
||||||
|
.setOrderBy("TableName")
|
||||||
|
.iterate();
|
||||||
|
int i = 0;
|
||||||
|
while(it.hasNext())
|
||||||
|
{
|
||||||
|
MTable t = it.next();
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
assertEquals("C_Invoice", t.getTableName(), "Invalid object "+i);
|
||||||
|
}
|
||||||
|
else if (i == 1)
|
||||||
|
{
|
||||||
|
assertEquals("M_InOut", t.getTableName(), "Invalid object "+i);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fail("More objects retrived than expected");
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCount() throws Exception
|
||||||
|
{
|
||||||
|
int count = new Query(Env.getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
||||||
|
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
||||||
|
.setOrderBy("TableName")
|
||||||
|
.count();
|
||||||
|
assertEquals(2, count, "Invalid count");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCount_BadSQL() throws Exception
|
||||||
|
{
|
||||||
|
assertThrows(DBException.class, () -> {
|
||||||
|
new Query(Env.getCtx(), "AD_Table", "TableName IN (?,?) AND BAD_SQL", getTrxName())
|
||||||
|
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
||||||
|
.setOrderBy("TableName")
|
||||||
|
.count();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCount_NoValues() throws Exception
|
||||||
|
{
|
||||||
|
int count = new Query(Env.getCtx(), "AD_Table", "1=2", getTrxName()).count();
|
||||||
|
assertEquals(0, count, "Counter should be ZERO");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFirst() throws Exception
|
||||||
|
{
|
||||||
|
MTable t = new Query(Env.getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
||||||
|
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
||||||
|
.setOrderBy("TableName")
|
||||||
|
.first();
|
||||||
|
assertEquals("C_Invoice", t.getTableName(), "Invalid object");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFirstId() throws Exception
|
||||||
|
{
|
||||||
|
int id = new Query(Env.getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
||||||
|
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
||||||
|
.setOrderBy("TableName")
|
||||||
|
.firstId();
|
||||||
|
int expectedId = 318; // C_Invoice
|
||||||
|
assertEquals(expectedId, id, "Invalid ID");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFirstOnly() throws Exception
|
||||||
|
{
|
||||||
|
MTable t = new Query(Env.getCtx(), "AD_Table", "AD_Table_ID=?", getTrxName())
|
||||||
|
.setParameters(new Object[]{318})
|
||||||
|
.firstOnly();
|
||||||
|
assertEquals(318, t.get_ID(), "Invalid table ID");
|
||||||
|
//
|
||||||
|
assertThrows(DBException.class, () -> {
|
||||||
|
new Query(Env.getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
||||||
|
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
||||||
|
.setOrderBy("TableName")
|
||||||
|
.firstOnly();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFirstIdOnly() throws Exception
|
||||||
|
{
|
||||||
|
int expectedId = 318; // C_Invoice
|
||||||
|
int id = new Query(Env.getCtx(), "AD_Table", "AD_Table_ID=?", getTrxName())
|
||||||
|
.setParameters(new Object[]{expectedId})
|
||||||
|
.firstIdOnly();
|
||||||
|
assertEquals(expectedId, id, "Invalid table ID");
|
||||||
|
//
|
||||||
|
assertThrows(DBException.class, () -> {
|
||||||
|
new Query(Env.getCtx(), "AD_Table", "TableName IN (?,?)", getTrxName())
|
||||||
|
.setParameters(new Object[]{"C_Invoice", "M_InOut"})
|
||||||
|
.setOrderBy("TableName")
|
||||||
|
.firstIdOnly();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSetClient_ID() throws Exception
|
||||||
|
{
|
||||||
|
int AD_Client_ID = Env.getAD_Client_ID(Env.getCtx());
|
||||||
|
String sql = "SELECT COUNT(*) FROM C_Invoice WHERE IsActive='Y' AND AD_Client_ID="+AD_Client_ID;
|
||||||
|
int targetCount = DB.getSQLValue(null, sql);
|
||||||
|
//
|
||||||
|
int count = new Query(Env.getCtx(), "C_Invoice", "1=1", getTrxName())
|
||||||
|
.setOnlyActiveRecords(true)
|
||||||
|
.setClient_ID()
|
||||||
|
.count();
|
||||||
|
assertEquals(targetCount, count, "Invoice # not match");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGet_IDs() throws Exception
|
||||||
|
{
|
||||||
|
final String whereClause = "AD_Element_ID IN (101, 102)";
|
||||||
|
int[] ids = new Query(Env.getCtx(), "AD_Element", whereClause, getTrxName())
|
||||||
|
.setOrderBy("AD_Element_ID")
|
||||||
|
.getIDs();
|
||||||
|
assertNotNull(ids);
|
||||||
|
assertEquals(2, ids.length);
|
||||||
|
assertEquals(101, ids[0]);
|
||||||
|
assertEquals(102, ids[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAggregate() throws Exception
|
||||||
|
{
|
||||||
|
final int AD_Client_ID = Env.getAD_Client_ID(Env.getCtx());
|
||||||
|
final String sqlFrom = "FROM C_InvoiceLine WHERE IsActive='Y' AND AD_Client_ID="+AD_Client_ID;
|
||||||
|
final Query query = new Query(Env.getCtx(), "C_InvoiceLine", null, getTrxName())
|
||||||
|
.setOnlyActiveRecords(true)
|
||||||
|
.setClient_ID();
|
||||||
|
//
|
||||||
|
// Test COUNT:
|
||||||
|
assertEquals(DB.getSQLValueBDEx(getTrxName(), "SELECT COUNT(*) "+sqlFrom),
|
||||||
|
query.aggregate(null, Query.AGGREGATE_COUNT), "COUNT not match");
|
||||||
|
//
|
||||||
|
// Test SUM:
|
||||||
|
assertEquals(DB.getSQLValueBDEx(getTrxName(), "SELECT SUM(LineNetAmt+TaxAmt) "+sqlFrom),
|
||||||
|
query.aggregate("LineNetAmt+TaxAmt", Query.AGGREGATE_SUM), "SUM not match");
|
||||||
|
//
|
||||||
|
// Test MIN:
|
||||||
|
assertEquals(DB.getSQLValueBDEx(getTrxName(), "SELECT MIN(LineNetAmt) "+sqlFrom),
|
||||||
|
query.aggregate("LineNetAmt", Query.AGGREGATE_MIN), "MIN not match");
|
||||||
|
//
|
||||||
|
// Test MAX:
|
||||||
|
assertEquals(DB.getSQLValueBDEx(getTrxName(), "SELECT MAX(LineNetAmt) "+sqlFrom),
|
||||||
|
query.aggregate("LineNetAmt", Query.AGGREGATE_MAX), "MAX not match");
|
||||||
|
//
|
||||||
|
// Test aggregate (String) - FR [ 2726447 ]
|
||||||
|
assertEquals(DB.getSQLValueStringEx(getTrxName(), "SELECT MAX(Description) "+sqlFrom),
|
||||||
|
(String)query.aggregate("Description", Query.AGGREGATE_MAX, String.class), "MAX not match (String)");
|
||||||
|
//
|
||||||
|
// Test aggregate (Timestamp) - FR [ 2726447 ]
|
||||||
|
assertEquals(DB.getSQLValueTSEx(getTrxName(), "SELECT MAX(Updated) "+sqlFrom),
|
||||||
|
(Timestamp)query.aggregate("Updated", Query.AGGREGATE_MAX, Timestamp.class), "MAX not match (Timestamp)");
|
||||||
|
//
|
||||||
|
// Test Exception : No Aggregate Function defined
|
||||||
|
assertThrows(DBException.class, () -> {
|
||||||
|
query.aggregate("*", null);
|
||||||
|
},
|
||||||
|
"No Aggregate Function defined"
|
||||||
|
);
|
||||||
|
//
|
||||||
|
// Test Exception : No Expression defined
|
||||||
|
assertThrows(DBException.class, () -> {
|
||||||
|
query.aggregate(null, Query.AGGREGATE_SUM);
|
||||||
|
}, "No Expression defined");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnlySelection() throws Exception
|
||||||
|
{
|
||||||
|
// Get one AD_PInstance_ID
|
||||||
|
int AD_PInstance_ID = DB.getSQLValueEx(null, "SELECT MAX(AD_PInstance_ID) FROM AD_PInstance");
|
||||||
|
assertTrue(AD_PInstance_ID > 0);
|
||||||
|
|
||||||
|
// Create selection list
|
||||||
|
List<KeyNamePair> elements = new ArrayList<KeyNamePair> ();
|
||||||
|
elements.add(new KeyNamePair(102, null)); // AD_Element_ID=102 => AD_Client_ID
|
||||||
|
elements.add(new KeyNamePair(104, null)); // AD_Element_ID=104 => AD_Column_ID
|
||||||
|
DB.executeUpdateEx("DELETE FROM T_Selection WHERE AD_PInstance_ID="+AD_PInstance_ID, getTrxName());
|
||||||
|
DB.createT_SelectionNew (AD_PInstance_ID, elements, getTrxName());
|
||||||
|
|
||||||
|
String whereClause = "1=1"; // some dummy where clause
|
||||||
|
int[] ids = new Query(Env.getCtx(), X_AD_Element.Table_Name, whereClause, getTrxName())
|
||||||
|
.setOnlySelection(AD_PInstance_ID)
|
||||||
|
.setOrderBy(X_AD_Element.COLUMNNAME_AD_Element_ID)
|
||||||
|
.getIDs();
|
||||||
|
assertEquals(elements.size(), ids.length, "Resulting number of elements differ");
|
||||||
|
|
||||||
|
for (int i = 0; i < elements.size(); i++)
|
||||||
|
{
|
||||||
|
int expected = elements.get(i).getKey();
|
||||||
|
assertEquals(expected, ids[i], "Element "+i+" not equals");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1
pom.xml
1
pom.xml
|
@ -53,6 +53,7 @@
|
||||||
<module>org.idempiere.webservices.client-feature</module>
|
<module>org.idempiere.webservices.client-feature</module>
|
||||||
<module>org.idempiere.p2</module>
|
<module>org.idempiere.p2</module>
|
||||||
<module>org.idempiere.javadoc</module>
|
<module>org.idempiere.javadoc</module>
|
||||||
|
<module>org.idempiere.test</module>
|
||||||
<module>${idempiere.target}</module>
|
<module>${idempiere.target}</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue