This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-extension-apiregions.git


The following commit(s) were added to refs/heads/master by this push:
     new cc4d95a  SLING-11068 split up analyser task for unversioned packages - 
move analyser to analyser module
cc4d95a is described below

commit cc4d95a02d12a6892f0527f360df4781880e58f4
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Tue Jan 18 09:13:15 2022 +0100

    SLING-11068 split up analyser task for unversioned packages - move analyser 
to analyser module
---
 .../analyser/AbstractApiRegionsAnalyserTask.java   |  44 ++-------
 .../CheckApiRegionsBundleUnversionedPackages.java  | 107 ---------------------
 .../apiregions/analyser/CheckApiRegionsOrder.java  |  67 ++++---------
 .../extension/apiregions/api/ApiRegions.java       |   3 +
 ...apache.sling.feature.analyser.task.AnalyserTask |   1 -
 .../AbstractApiRegionsAnalyserTaskTest.java        |  13 +--
 ...eckApiRegionsBundleUnversionedPackagesTest.java |  84 ----------------
 .../analyser/CheckApiRegionsOrderTest.java         |  27 +++---
 8 files changed, 48 insertions(+), 298 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/AbstractApiRegionsAnalyserTask.java
 
b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/AbstractApiRegionsAnalyserTask.java
index adb244f..1b5ebce 100644
--- 
a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/AbstractApiRegionsAnalyserTask.java
+++ 
b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/AbstractApiRegionsAnalyserTask.java
@@ -16,12 +16,6 @@
  */
 package org.apache.sling.feature.extension.apiregions.analyser;
 
-import java.io.IOException;
-import javax.json.JsonArray;
-
-import org.apache.sling.feature.Extension;
-import org.apache.sling.feature.Extensions;
-import org.apache.sling.feature.Feature;
 import org.apache.sling.feature.analyser.task.AnalyserTask;
 import org.apache.sling.feature.analyser.task.AnalyserTaskContext;
 import org.apache.sling.feature.extension.apiregions.api.ApiRegions;
@@ -30,41 +24,19 @@ public abstract class AbstractApiRegionsAnalyserTask 
implements AnalyserTask {
 
     @Override
     public final void execute(AnalyserTaskContext ctx) throws Exception {
-        Feature feature = ctx.getFeature();
-
-        // extract and check the api-regions
-
-        Extensions extensions = feature.getExtensions();
-        Extension apiRegionsExtension = 
extensions.getByName(ApiRegions.EXTENSION_NAME);
-        if (apiRegionsExtension == null) {
-            // no need to be analyzed
-            return;
-        }
-
-        if (apiRegionsExtension.getJSON() == null || 
apiRegionsExtension.getJSON().isEmpty()) {
-            // no need to be analyzed
-            return;
-        }
-
-        if (apiRegionsExtension.getJSONStructure() == null) {
-            ctx.reportError("API Regions '" + apiRegionsExtension.getJSON()
-                    + "' does not represent a valid JSON 'api-regions'");
-            return;
-        }
-
-        // read the api-regions and create a Sieve data structure for checks
-
+        // read the api-regions
         ApiRegions apiRegions;
         try {
-            apiRegions = ApiRegions.parse((JsonArray) 
apiRegionsExtension.getJSONStructure());
-        } catch (IOException e) {
-            ctx.reportError("API Regions '"
-                    + apiRegionsExtension.getJSON()
-                    + "' does not represent a valid JSON 'api-regions': "
+            apiRegions = ApiRegions.getApiRegions(ctx.getFeature());
+        } catch (final IllegalArgumentException e) {
+            ctx.reportError("API Regions does not represent a valid JSON 
'api-regions': "
                     + e.getMessage());
             return;
         }
-
+        if ( apiRegions == null ) {
+            // no need to be analysed
+            return;
+        }
         execute(apiRegions, ctx);
     }
 
diff --git 
a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleUnversionedPackages.java
 
b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleUnversionedPackages.java
deleted file mode 100644
index cda708d..0000000
--- 
a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleUnversionedPackages.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sling.feature.extension.apiregions.analyser;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.sling.feature.analyser.task.AnalyserTask;
-import org.apache.sling.feature.analyser.task.AnalyserTaskContext;
-import org.apache.sling.feature.extension.apiregions.api.ApiRegions;
-import org.apache.sling.feature.scanner.BundleDescriptor;
-import org.apache.sling.feature.scanner.PackageInfo;
-import org.osgi.framework.Version;
-
-
-public class CheckApiRegionsBundleUnversionedPackages implements AnalyserTask {
-
-    /** Ignore JDK packages */
-    private static final List<String> IGNORED_IMPORT_PREFIXES = 
Arrays.asList("java.", "javax.", "org.w3c.", "org.xml.");
-
-    @Override
-    public String getName() {
-        return "Bundle Unversioned Packages Check";
-    }
-
-    @Override
-    public String getId() {
-        return ApiRegions.EXTENSION_NAME + "-unversioned-packages";
-    }
-
-    private boolean ignoreImportPackage(final String name) {
-        for(final String prefix : IGNORED_IMPORT_PREFIXES) {
-            if ( name.startsWith(prefix) ) {
-                return true;
-            }
-        }
-        return false;
-    }
-    
-    @Override
-    public void execute(final AnalyserTaskContext ctx) throws Exception {
-        for(final BundleDescriptor info : 
ctx.getFeatureDescriptor().getBundleDescriptors()) {
-
-                
-            final List<PackageInfo> exportWithoutVersion = new ArrayList<>();
-            for(final PackageInfo i : info.getExportedPackages()) {
-                if ( i.getPackageVersion().compareTo(Version.emptyVersion) == 
0 ) {
-                    exportWithoutVersion.add(i);
-                }
-            }
-            final List<PackageInfo> importWithoutVersion = new ArrayList<>();
-            for(final PackageInfo i : info.getImportedPackages()) {
-                if ( i.getVersion() == null && 
!ignoreImportPackage(i.getName()) ) {
-                    importWithoutVersion.add(i);
-                }
-            }
-
-            final String key = "Bundle 
".concat(info.getArtifact().getId().getArtifactId())
-                .concat(":").concat(info.getArtifact().getId().getVersion());
-
-            if ( !importWithoutVersion.isEmpty() ) {
-                ctx.reportArtifactWarning(info.getArtifact().getId(),
-                        key.concat(" is importing 
").concat(getPackageInfo(importWithoutVersion)).concat(" without specifying a 
version range."));
-            }
-            if ( !exportWithoutVersion.isEmpty() ) {
-                ctx.reportArtifactWarning(info.getArtifact().getId(),
-                        key.concat(" is exporting 
").concat(getPackageInfo(exportWithoutVersion)).concat(" without a version."));
-            }
-        }
-    }
-
-    private String getPackageInfo(final List<PackageInfo> pcks) {
-        if ( pcks.size() == 1 ) {
-            return "package ".concat(pcks.get(0).getName());
-        }
-        final StringBuilder sb = new StringBuilder("packages ");
-        boolean first = true;
-        sb.append('[');
-        for(final PackageInfo info : pcks) {
-            if ( first ) {
-                first = false;
-            } else {
-                sb.append(", ");
-            }
-            sb.append(info.getName());
-        }
-        sb.append(']');
-        return sb.toString();
-    }
-}
diff --git 
a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsOrder.java
 
b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsOrder.java
index bbfff43..feb89bf 100644
--- 
a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsOrder.java
+++ 
b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsOrder.java
@@ -16,20 +16,14 @@
  */
 package org.apache.sling.feature.extension.apiregions.analyser;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-import javax.json.JsonArray;
 
-import org.apache.sling.feature.Extension;
-import org.apache.sling.feature.Extensions;
-import org.apache.sling.feature.Feature;
-import org.apache.sling.feature.analyser.task.AnalyserTask;
 import org.apache.sling.feature.analyser.task.AnalyserTaskContext;
 import org.apache.sling.feature.extension.apiregions.api.ApiRegion;
 import org.apache.sling.feature.extension.apiregions.api.ApiRegions;
 
-public class CheckApiRegionsOrder implements AnalyserTask {
+public class CheckApiRegionsOrder extends AbstractApiRegionsAnalyserTask {
 
     @Override
     public String getId() {
@@ -42,21 +36,15 @@ public class CheckApiRegionsOrder implements AnalyserTask {
     }
 
     @Override
-    public final void execute(AnalyserTaskContext ctx) throws Exception {
-        String order = ctx.getConfiguration().get("order");
-        Feature feature = ctx.getFeature();
-        if (feature == null) {
-            reportError(ctx, "No feature found. Illegal Analyser State.");
-            return;
-        }
-
+    public final void execute(final ApiRegions apiRegions, final 
AnalyserTaskContext ctx) throws Exception {
+        final String order = ctx.getConfiguration().get("order");
         if (order == null) {
-            reportError(ctx, "This analyser task must be configured: " + 
getId() + " for feature " + feature.getId());
+            reportError(ctx, "This analyser task must be configured: " + 
getId() + " for feature " + ctx.getFeature().getId());
             reportError(ctx, "Must specify configuration key 'order'.");
             return;
         }
 
-        String[] sl = order.split("[,]");
+        final String[] sl = order.split("[,]");
         List<String> prescribedOrder = new ArrayList<>();
         for (String s : sl) {
             s = s.trim();
@@ -68,39 +56,20 @@ public class CheckApiRegionsOrder implements AnalyserTask {
             return;
         }
 
-        // extract and check the api-regions
-        Extensions extensions = feature.getExtensions();
-        Extension apiRegionsExtension = 
extensions.getByName(ApiRegions.EXTENSION_NAME);
-        if (apiRegionsExtension == null) {
-            // no need to be analyzed
-            return;
-        }
-
-        String jsonRepresentation = apiRegionsExtension.getJSON();
-        if (jsonRepresentation == null || jsonRepresentation.isEmpty()) {
-            // no need to be analyzed
-            return;
-        }
-
-        try {
-            int regionIdx = 0;
-            ApiRegions apiRegions = ApiRegions.parse((JsonArray) 
apiRegionsExtension.getJSONStructure());
-            for (final ApiRegion region : apiRegions.listRegions()) {
-                String name = region.getName();
-                if (!prescribedOrder.contains(name)) {
-                    reportError(ctx, "Region found with undeclared name: " + 
name);
-                    return;
-                }
-                int prevIdx = regionIdx;
-                regionIdx = validateRegion(regionIdx, prescribedOrder, name);
-                if (regionIdx < 0) {
-                    reportError(ctx, "Region '" + name + "' appears in the 
wrong order. It appears after '"
-                            + prescribedOrder.get(prevIdx) + "'. Order of 
regions should be " + prescribedOrder);
-                    return;
-                }
+        int regionIdx = 0;
+        for (final ApiRegion region : apiRegions.listRegions()) {
+            String name = region.getName();
+            if (!prescribedOrder.contains(name)) {
+                reportError(ctx, "Region found with undeclared name: " + name);
+                return;
+            }
+            int prevIdx = regionIdx;
+            regionIdx = validateRegion(regionIdx, prescribedOrder, name);
+            if (regionIdx < 0) {
+                reportError(ctx, "Region '" + name + "' appears in the wrong 
order. It appears after '"
+                        + prescribedOrder.get(prevIdx) + "'. Order of regions 
should be " + prescribedOrder);
+                return;
             }
-        } catch (final IOException e) {
-            ctx.reportError("Invalid api regions");
         }
     }
 
diff --git 
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiRegions.java
 
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiRegions.java
index c40b98c..618a4bb 100644
--- 
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiRegions.java
+++ 
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiRegions.java
@@ -314,6 +314,9 @@ public class ApiRegions {
         if ( ext.getType() != ExtensionType.JSON ) {
             throw new IllegalArgumentException("Extension " + ext.getName() + 
" must have JSON type");
         }
+        if ( ext.getJSONStructure() == null ) {
+            return new ApiRegions();
+        }
         try {
             return parse(ext.getJSONStructure().asJsonArray());
         } catch ( final IOException ioe) {
diff --git 
a/src/main/resources/META-INF/services/org.apache.sling.feature.analyser.task.AnalyserTask
 
b/src/main/resources/META-INF/services/org.apache.sling.feature.analyser.task.AnalyserTask
index 4f80111..1ed0442 100644
--- 
a/src/main/resources/META-INF/services/org.apache.sling.feature.analyser.task.AnalyserTask
+++ 
b/src/main/resources/META-INF/services/org.apache.sling.feature.analyser.task.AnalyserTask
@@ -3,7 +3,6 @@ 
org.apache.sling.feature.extension.apiregions.analyser.CheckApiRegionsDependenci
 
org.apache.sling.feature.extension.apiregions.analyser.CheckApiRegionsDuplicates
 org.apache.sling.feature.extension.apiregions.analyser.CheckApiRegionsOrder
 
org.apache.sling.feature.extension.apiregions.analyser.CheckApiRegionsBundleExportsImports
-org.apache.sling.feature.extension.apiregions.analyser.CheckApiRegionsBundleUnversionedPackages
 
org.apache.sling.feature.extension.apiregions.analyser.CheckApiRegionsCrossFeatureDups
 org.apache.sling.feature.extension.apiregions.analyser.CheckArtifactRules
 org.apache.sling.feature.extension.apiregions.analyser.CheckConfigurationApi
diff --git 
a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/AbstractApiRegionsAnalyserTaskTest.java
 
b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/AbstractApiRegionsAnalyserTaskTest.java
index ba362d0..c6c1484 100644
--- 
a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/AbstractApiRegionsAnalyserTaskTest.java
+++ 
b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/AbstractApiRegionsAnalyserTaskTest.java
@@ -32,10 +32,12 @@ import org.apache.johnzon.core.JsonReaderImpl.NothingToRead;
 import org.apache.sling.feature.Artifact;
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Extension;
+import org.apache.sling.feature.ExtensionType;
 import org.apache.sling.feature.Extensions;
 import org.apache.sling.feature.Feature;
 import org.apache.sling.feature.analyser.task.AnalyserTask;
 import org.apache.sling.feature.analyser.task.AnalyserTaskContext;
+import org.apache.sling.feature.extension.apiregions.api.ApiRegions;
 import org.apache.sling.feature.scanner.BundleDescriptor;
 import org.apache.sling.feature.scanner.FeatureDescriptor;
 import org.apache.sling.feature.scanner.PackageInfo;
@@ -89,22 +91,17 @@ public abstract class AbstractApiRegionsAnalyserTaskTest<T 
extends AbstractApiRe
         assertTrue(errors.isEmpty());
     }
 
-    @Test
-    public void testApiRegionsIsNotJSON() throws Exception {
-        List<String> errors = execute("this is not a JSON string");
-
-        assertFalse(errors.isEmpty());
-        assertTrue(errors.iterator().next().contains("does not represent a 
valid JSON 'api-regions'"));
-    }
-
     protected final List<String> execute(String apiRegionJSON) throws 
Exception {
         Extension extension = mock(Extension.class);
+        when(extension.getName()).thenReturn(ApiRegions.EXTENSION_NAME);
         when(extension.getJSON()).thenReturn(apiRegionJSON);
+        when(extension.getType()).thenReturn(ExtensionType.JSON);
         if (apiRegionJSON != null) {
             JsonReader reader = Json.createReader(new 
StringReader(apiRegionJSON));
             JsonArray array = null;
             try {
                 array = reader.readArray();
+                when(extension.getType()).thenReturn(ExtensionType.JSON);
             } catch (final JsonParsingException | NothingToRead ignore) {
                 // ignored
             }
diff --git 
a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleUnversionedPackagesTest.java
 
b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleUnversionedPackagesTest.java
deleted file mode 100644
index ff4695c..0000000
--- 
a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleUnversionedPackagesTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sling.feature.extension.apiregions.analyser;
-
-import org.apache.sling.feature.*;
-import org.apache.sling.feature.analyser.task.AnalyserTaskContext;
-import org.apache.sling.feature.extension.apiregions.api.ApiRegions;
-import org.apache.sling.feature.scanner.BundleDescriptor;
-import org.apache.sling.feature.scanner.FeatureDescriptor;
-import org.apache.sling.feature.scanner.impl.BundleDescriptorImpl;
-import org.apache.sling.feature.scanner.impl.FeatureDescriptorImpl;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-import java.io.File;
-import java.io.IOException;
-import static org.junit.Assert.assertEquals;
-
-public class CheckApiRegionsBundleUnversionedPackagesTest {
-    private static File resourceRoot;
-
-    @BeforeClass
-    public static void setupClass() {
-        resourceRoot =
-                new File(CheckApiRegionsBundleUnversionedPackagesTest.class.
-                        
getResource("/test-framework.jar").getFile()).getParentFile();
-    }
-
-    @Test
-    public void testId() {
-        assertEquals(ApiRegions.EXTENSION_NAME + "-unversioned-packages", new 
CheckApiRegionsBundleUnversionedPackages().getId());
-    }
-
-    @Test
-    public void testBundleUnversionedPackage() throws Exception {
-        CheckApiRegionsBundleUnversionedPackages t = new 
CheckApiRegionsBundleUnversionedPackages();
-
-        Feature f = new Feature(ArtifactId.fromMvnId("f:f:1"));
-        f.setComplete(true);
-        FeatureDescriptor fd = new FeatureDescriptorImpl(f);
-
-        fdAddBundle(fd, "g:b1:1", "test-bundle5.jar");
-
-        AnalyserTaskContext ctx = Mockito.mock(AnalyserTaskContext.class);
-        Mockito.when(ctx.getFeature()).thenReturn(f);
-        Mockito.when(ctx.getFeatureDescriptor()).thenReturn(fd);
-        t.execute(ctx);
-
-        Mockito.verify(ctx, 
Mockito.times(2)).reportArtifactWarning(Mockito.any(), Mockito.anyString());
-
-        Mockito.verify(ctx).reportArtifactWarning(
-                Mockito.eq(ArtifactId.fromMvnId("g:b1:1")),
-                Mockito.contains("org.foo.i"));
-        Mockito.verify(ctx).reportArtifactWarning(
-                Mockito.eq(ArtifactId.fromMvnId("g:b1:1")),
-                Mockito.contains("org.foo.e"));
-    }
-
-
-    private void fdAddBundle(FeatureDescriptor fd, String id, String file, 
ArtifactId... origins) throws IOException {
-        Artifact artifact = new Artifact(ArtifactId.fromMvnId(id));
-        artifact.setFeatureOrigins(origins);
-        BundleDescriptor bd1 = new BundleDescriptorImpl(
-                artifact, new File(resourceRoot, file).toURI().toURL(), 0);
-        fd.getBundleDescriptors().add(bd1);
-    }
-}
diff --git 
a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsOrderTest.java
 
b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsOrderTest.java
index 3948129..ca59764 100644
--- 
a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsOrderTest.java
+++ 
b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsOrderTest.java
@@ -77,7 +77,7 @@ public class CheckApiRegionsOrderTest  {
         Mockito.when(ctx.getFeature()).thenReturn(f);
 
         caro.execute(ctx);
-        Mockito.verify(ctx).reportError(Mockito.contains("Invalid api 
regions"));
+        Mockito.verify(ctx).reportError(Mockito.contains("API Regions does not 
represent a valid JSON"));
     }
 
     @Test
@@ -118,6 +118,12 @@ public class CheckApiRegionsOrderTest  {
 
     @Test
     public void testEmptyOrder() throws Exception {
+        Extension e = new Extension(ExtensionType.JSON, "api-regions", 
ExtensionState.OPTIONAL);
+        e.setJSON("[{\"name\":\"foo\"}]");
+
+        Feature f = new Feature(ArtifactId.fromMvnId("a:b:1"));
+        f.getExtensions().add(e);
+
         CheckApiRegionsOrder caro = new CheckApiRegionsOrder();
 
         Map<String, String> cfgMap = new HashMap<>();
@@ -125,30 +131,25 @@ public class CheckApiRegionsOrderTest  {
 
         AnalyserTaskContext ctx = Mockito.mock(AnalyserTaskContext.class);
         Mockito.when(ctx.getConfiguration()).thenReturn(cfgMap);
-        Mockito.when(ctx.getFeature()).thenReturn(new 
Feature(ArtifactId.fromMvnId("a:b:1")));
+        Mockito.when(ctx.getFeature()).thenReturn(f);
 
         caro.execute(ctx);
         Mockito.verify(ctx).reportError(Mockito.contains("No regions"));
     }
 
     @Test
-    public void testNoFeature() throws Exception {
-        CheckApiRegionsOrder caro = new CheckApiRegionsOrder();
-
-        AnalyserTaskContext ctx = Mockito.mock(AnalyserTaskContext.class);
-        Mockito.when(ctx.getConfiguration()).thenReturn(new HashMap<>());
+    public void testNoOrderConfig() throws Exception {
+        Extension e = new Extension(ExtensionType.JSON, "api-regions", 
ExtensionState.OPTIONAL);
+        e.setJSON("[{\"name\":\"foo\"}]");
 
-        caro.execute(ctx);
-        Mockito.verify(ctx).reportError(Mockito.contains("No feature"));
-    }
+        Feature f = new Feature(ArtifactId.fromMvnId("a:b:1"));
+        f.getExtensions().add(e);
 
-    @Test
-    public void testNoOrderConfig() throws Exception {
         CheckApiRegionsOrder caro = new CheckApiRegionsOrder();
 
         AnalyserTaskContext ctx = Mockito.mock(AnalyserTaskContext.class);
         Mockito.when(ctx.getConfiguration()).thenReturn(new HashMap<>());
-        Mockito.when(ctx.getFeature()).thenReturn(new 
Feature(ArtifactId.fromMvnId("a:b:1")));
+        Mockito.when(ctx.getFeature()).thenReturn(f);
 
         caro.execute(ctx);
         Mockito.verify(ctx).reportError(Mockito.contains("'order'"));

Reply via email to