Op di 21 apr. 2020 om 17:51 schreef Mark Prins <mc.pr...@gmail.com>:

> While working on this PR https://github.com/geotools/geotools/pull/2890
> to have Online testing of the Oracle JDBC module I'm running into some
> failing tests.
>

> OracleFeatureSourceOnlineTest>OnlineTestCase.run:112->JDBCFeatureSourceOnlineTest.testMixedEncodeIn:680
>
> expected:<[zero, two, 1, 2, 0.0]> but was:<[zero, two, 1, 2, 0.0]>
>
>
debugging shows that this test[1] is failing because:

literals = {ArrayList@4436}  size = 5
 0 = "zero"
 1 = "two"
 2 = {BigDecimal@4442} "1"
 3 = {BigDecimal@4443} "2"
 4 = {Double@4444} 0.0

expected = {Arrays$ArrayList@4451}  size = 5
 0 = "zero"
 1 = "two"
 2 = {Integer@4456} 1
 3 = {Integer@4457} 2
 4 = {Double@4458} 0.0

[1]
https://github.com/geotools/geotools/blob/master/modules/library/jdbc/src/test/java/org/geotools/jdbc/JDBCFeatureSourceOnlineTest.java#L677

This is because Oracle uses BigDecimal for any Number...

My initial thought was to copy and overide the test into the Oracle
subclass, but that is basically made impossible becasue the test uses the
package private method "splitFilter" (
https://github.com/geotools/geotools/blob/7925c3f05470aceeab2c2188ea90959466ce0bd2/modules/library/jdbc/src/main/java/org/geotools/jdbc/JDBCFeatureSource.java#L363
)
 so that won't fly..

My second best option is to extract getting the expected values into a
protected method so dialects can override that, so adding
to JDBCFeatureSourceOnlineTest the following method:

/**
* @return expected list for {@link #testMixedEncodeIn()}
*/
    protected List<Object> getTestMixedEncodeInExpected (){
        return Arrays.asList("zero", "two", 1, 2, 0d);
    }

and adding to OracleFeatureSourceOnlineTest

/**
 * Because Oracle uses "Bigdecimal" for any number we need to change
the type of the objects that are in the list of expected objects.
 *
 * @return expected list for {@link #testMixedEncodeIn()}
 */
@Override
protected List<Object> getTestMixedEncodeInExpected() {
    return Arrays.asList("zero", "two", BigDecimal.valueOf(1),
BigDecimal.valueOf(2), 0d);
}


Any other thoughts / ideas? I don't think it would be too useful to reduce
the test to compare two List<String> instead?

Mark

-- 
Disclaimer;
This message is just a reflection of what I thought at the time of sending.
The message may contain information that is not intended for you or that
you don't understand.
_______________________________________________
GeoTools-Devel mailing list
GeoTools-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to