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

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-plugin-testing.git

commit 407a8831ea3e21f31bfd24c2f5c6d3ce871a6487
Author: Guillaume Nodet <[email protected]>
AuthorDate: Tue Jun 18 09:08:24 2024 +0200

    Rename SessionStub to SessionMock and add a real SessionStub
---
 .../maven/api/plugin/testing/MojoExtension.java    |   2 +-
 .../api/plugin/testing/stubs/ProjectStub.java      | 101 ++-
 .../stubs/{SessionStub.java => SessionMock.java}   |   2 +-
 .../api/plugin/testing/stubs/SessionStub.java      | 707 +++++++++++----------
 .../apache/maven/api/di/testing/SimpleDITest.java  |   4 +-
 .../plugin/testing/ExpressionEvaluatorTest.java    |   4 +-
 6 files changed, 407 insertions(+), 413 deletions(-)

diff --git 
a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/MojoExtension.java
 
b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/MojoExtension.java
index 0147261..b855dde 100644
--- 
a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/MojoExtension.java
+++ 
b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/MojoExtension.java
@@ -333,7 +333,7 @@ public class MojoExtension extends MavenDIExtension 
implements ParameterResolver
             @Singleton
             @Priority(-10)
             private InternalSession createSession() {
-                return SessionStub.getMockSession(getBasedir());
+                return SessionMock.getMockSession(getBasedir());
             }
 
             @Provides
diff --git 
a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/ProjectStub.java
 
b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/ProjectStub.java
index 450cd1a..fd37fa5 100644
--- 
a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/ProjectStub.java
+++ 
b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/ProjectStub.java
@@ -25,9 +25,6 @@ import org.apache.maven.api.*;
 import org.apache.maven.api.annotations.Nonnull;
 import org.apache.maven.api.model.Model;
 import org.apache.maven.api.model.PluginContainer;
-import org.apache.maven.internal.impl.DefaultVersionParser;
-import org.apache.maven.repository.internal.DefaultModelVersionParser;
-import org.eclipse.aether.util.version.GenericVersionScheme;
 
 /**
  * @author Olivier Lamy
@@ -156,10 +153,6 @@ public class ProjectStub implements Project {
         return basedir;
     }
 
-    public void setBasedir(Path basedir) {
-        this.basedir = basedir;
-    }
-
     @Override
     public Optional<Project> getParent() {
         return Optional.empty();
@@ -180,90 +173,74 @@ public class ProjectStub implements Project {
         return rootDirectory;
     }
 
-    public void setGroupId(String groupId) {
+    //
+    // Setters
+    //
+
+    public ProjectStub setBasedir(Path basedir) {
+        this.basedir = basedir;
+        return this;
+    }
+
+    public ProjectStub setGroupId(String groupId) {
         model = model.withGroupId(groupId);
+        return this;
     }
 
-    public void setArtifactId(String artifactId) {
+    public ProjectStub setArtifactId(String artifactId) {
         model = model.withArtifactId(artifactId);
+        return this;
     }
 
-    public void setVersion(String version) {
+    public ProjectStub setVersion(String version) {
         model = model.withVersion(version);
+        return this;
     }
 
-    public void setName(String name) {
+    public ProjectStub setName(String name) {
         model = model.withName(name);
+        return this;
+    }
+
+    public ProjectStub setDescription(String desc) {
+        model = model.withDescription(desc);
+        return this;
     }
 
-    public void setPackaging(String packaging) {
+    public ProjectStub setPackaging(String packaging) {
         model = model.withPackaging(packaging);
+        return this;
     }
 
-    public void setMainArtifact(Artifact mainArtifact) {
+    public ProjectStub setMainArtifact(Artifact mainArtifact) {
         this.mainArtifact = mainArtifact;
+        return this;
     }
 
-    public void setPomPath(Path pomPath) {
+    public ProjectStub setPomPath(Path pomPath) {
         this.pomPath = pomPath;
+        return this;
     }
 
-    public void setTopProject(boolean topProject) {
+    public ProjectStub setTopProject(boolean topProject) {
         this.topProject = topProject;
+        return this;
     }
 
-    public void setMavenModel(org.apache.maven.model.Model model) {
+    public ProjectStub setMavenModel(org.apache.maven.model.Model model) {
         this.model = model.getDelegate();
+        return this;
     }
 
-    public void setRootDirectory(Path rootDirectory) {
+    public ProjectStub setRootDirectory(Path rootDirectory) {
         this.rootDirectory = rootDirectory;
+        return this;
     }
 
-    public void addProperty(String key, String value) {
-        properties.put(key, value);
-    }
-
-    class ProjectArtifact implements Artifact {
-        @Override
-        public String getGroupId() {
-            return ProjectStub.this.getGroupId();
-        }
-
-        @Override
-        public String getArtifactId() {
-            return ProjectStub.this.getArtifactId();
-        }
-
-        @Override
-        public Version getVersion() {
-            return new DefaultVersionParser(new DefaultModelVersionParser(new 
GenericVersionScheme()))
-                    .parseVersion(ProjectStub.this.getVersion());
-        }
-
-        @Override
-        public Version getBaseVersion() {
-            return null;
-        }
-
-        @Override
-        public String getClassifier() {
-            return "";
-        }
-
-        @Override
-        public String getExtension() {
-            return "pom";
-        }
-
-        @Override
-        public boolean isSnapshot() {
-            return false;
-        }
-
-        @Override
-        public ArtifactCoordinate toCoordinate() {
-            return null;
-        }
+    public ProjectStub addProperty(String key, String value) {
+        Map<String, String> props = new HashMap<>(model.getProperties());
+        props.put(key, value);
+        model = model.withProperties(props);
+        return this;
     }
 }
diff --git 
a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionStub.java
 
b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionMock.java
similarity index 99%
copy from 
maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionStub.java
copy to 
maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionMock.java
index 799587a..c620b13 100644
--- 
a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionStub.java
+++ 
b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionMock.java
@@ -75,7 +75,7 @@ import static org.mockito.Mockito.withSettings;
 /**
  *
  */
-public class SessionStub {
+public class SessionMock {
 
     public static InternalSession getMockSession(String localRepo) {
         LocalRepository localRepository = mock(LocalRepository.class);
diff --git 
a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionStub.java
 
b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionStub.java
index 799587a..34b1820 100644
--- 
a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionStub.java
+++ 
b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/stubs/SessionStub.java
@@ -18,376 +18,393 @@
  */
 package org.apache.maven.api.plugin.testing.stubs;
 
-import java.net.URI;
 import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
+import java.time.Instant;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
-import java.util.Properties;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.function.Supplier;
 
 import org.apache.maven.api.Artifact;
+import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.Dependency;
+import org.apache.maven.api.DependencyCoordinate;
+import org.apache.maven.api.DependencyScope;
+import org.apache.maven.api.Language;
+import org.apache.maven.api.Listener;
 import org.apache.maven.api.LocalRepository;
+import org.apache.maven.api.Node;
+import org.apache.maven.api.Packaging;
+import org.apache.maven.api.PathScope;
+import org.apache.maven.api.PathType;
 import org.apache.maven.api.Project;
+import org.apache.maven.api.ProjectScope;
 import org.apache.maven.api.RemoteRepository;
+import org.apache.maven.api.Service;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.SessionData;
-import org.apache.maven.api.model.Model;
+import org.apache.maven.api.Type;
+import org.apache.maven.api.Version;
+import org.apache.maven.api.VersionConstraint;
+import org.apache.maven.api.VersionRange;
+import org.apache.maven.api.annotations.Nonnull;
+import org.apache.maven.api.annotations.Nullable;
 import org.apache.maven.api.model.Repository;
-import org.apache.maven.api.services.ArtifactDeployer;
-import org.apache.maven.api.services.ArtifactDeployerRequest;
-import org.apache.maven.api.services.ArtifactFactory;
-import org.apache.maven.api.services.ArtifactFactoryRequest;
-import org.apache.maven.api.services.ArtifactInstaller;
-import org.apache.maven.api.services.ArtifactInstallerRequest;
-import org.apache.maven.api.services.ArtifactManager;
-import org.apache.maven.api.services.LocalRepositoryManager;
-import org.apache.maven.api.services.ProjectBuilder;
-import org.apache.maven.api.services.ProjectBuilderRequest;
-import org.apache.maven.api.services.ProjectBuilderResult;
-import org.apache.maven.api.services.ProjectManager;
-import org.apache.maven.api.services.RepositoryFactory;
-import org.apache.maven.api.services.VersionParser;
-import org.apache.maven.api.services.xml.ModelXmlFactory;
-import org.apache.maven.internal.impl.DefaultModelXmlFactory;
-import org.apache.maven.internal.impl.DefaultVersionParser;
-import org.apache.maven.internal.impl.InternalSession;
-import org.apache.maven.model.v4.MavenStaxReader;
-import org.apache.maven.repository.internal.DefaultModelVersionParser;
-import org.eclipse.aether.util.version.GenericVersionScheme;
-import org.mockito.ArgumentMatchers;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.same;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import static org.mockito.Mockito.withSettings;
+import org.apache.maven.api.settings.Settings;
 
 /**
- *
  */
-public class SessionStub {
-
-    public static InternalSession getMockSession(String localRepo) {
-        LocalRepository localRepository = mock(LocalRepository.class);
-        when(localRepository.getId()).thenReturn("local");
-        when(localRepository.getPath()).thenReturn(Paths.get(localRepo));
-        return getMockSession(localRepository);
-    }
-
-    public static InternalSession getMockSession(LocalRepository 
localRepository) {
-        InternalSession session = mock(InternalSession.class);
-
-        //
-        // RepositoryFactory
-        //
-        RepositoryFactory repositoryFactory = mock(RepositoryFactory.class);
-        when(session.createRemoteRepository(anyString(), 
anyString())).thenAnswer(iom -> {
-            String id = iom.getArgument(0, String.class);
-            String url = iom.getArgument(1, String.class);
-            return 
session.getService(RepositoryFactory.class).createRemote(id, url);
-        });
-        when(session.createRemoteRepository(any()))
-                .thenAnswer(iom -> 
repositoryFactory.createRemote(iom.getArgument(0, Repository.class)));
-        
when(repositoryFactory.createRemote(any(Repository.class))).thenAnswer(iom -> {
-            Repository repository = iom.getArgument(0, Repository.class);
-            return repositoryFactory.createRemote(repository.getId(), 
repository.getUrl());
-        });
-        when(repositoryFactory.createRemote(anyString(), 
anyString())).thenAnswer(iom -> {
-            String id = iom.getArgument(0, String.class);
-            String url = iom.getArgument(1, String.class);
-            RemoteRepository remoteRepository =
-                    mock(RemoteRepository.class, withSettings().lenient());
-            when(remoteRepository.getId()).thenReturn(id);
-            when(remoteRepository.getUrl()).thenReturn(url);
-            
when(remoteRepository.getProtocol()).thenReturn(URI.create(url).getScheme());
-            return remoteRepository;
-        });
-        
when(session.getService(RepositoryFactory.class)).thenReturn(repositoryFactory);
-
-        //
-        // VersionParser
-        //
-        VersionParser versionParser =
-                new DefaultVersionParser(new DefaultModelVersionParser(new 
GenericVersionScheme()));
-        when(session.parseVersion(any()))
-                .thenAnswer(iom -> 
versionParser.parseVersion(iom.getArgument(0, String.class)));
-        
when(session.getService(VersionParser.class)).thenReturn(versionParser);
-
-        //
-        // LocalRepositoryManager
-        //
-        LocalRepositoryManager localRepositoryManager = 
mock(LocalRepositoryManager.class);
-        when(session.getPathForLocalArtifact(any(Artifact.class)))
-                .then(iom -> localRepositoryManager.getPathForLocalArtifact(
-                        session, session.getLocalRepository(), 
iom.getArgument(0, Artifact.class)));
-        when(session.getPathForRemoteArtifact(any(), any()))
-                .thenAnswer(iom -> 
localRepositoryManager.getPathForRemoteArtifact(
-                        session,
-                        session.getLocalRepository(),
-                        iom.getArgument(0, RemoteRepository.class),
-                        iom.getArgument(1, Artifact.class)));
-        when(localRepositoryManager.getPathForLocalArtifact(any(), any(), 
any()))
-                .thenAnswer(iom -> {
-                    LocalRepository localRepo = iom.getArgument(1, 
LocalRepository.class);
-                    Artifact artifact = iom.getArgument(2, Artifact.class);
-                    return 
localRepo.getPath().resolve(getPathForArtifact(artifact, true));
-                });
-        
when(session.getService(LocalRepositoryManager.class)).thenReturn(localRepositoryManager);
-
-        //
-        // ArtifactInstaller
-        //
-        ArtifactInstaller artifactInstaller = mock(ArtifactInstaller.class);
-        doAnswer(iom -> {
-                    artifactInstaller.install(
-                            ArtifactInstallerRequest.build(session, 
iom.getArgument(0, Collection.class)));
-                    return null;
-                })
-                .when(session)
-                .installArtifacts(any(Collection.class));
-        doAnswer(iom -> {
-                    artifactInstaller.install(ArtifactInstallerRequest.build(
-                            session, Arrays.asList(iom.getArgument(0, 
Artifact[].class))));
-                    return null;
-                })
-                .when(session)
-                .installArtifacts(any(Artifact[].class));
-        doAnswer(iom -> {
-                    artifactInstaller.install(ArtifactInstallerRequest.build(
-                            iom.getArgument(0, Session.class), 
iom.getArgument(1, Collection.class)));
-                    return null;
-                })
-                .when(artifactInstaller)
-                .install(any(Session.class), 
ArgumentMatchers.<Collection<Artifact>>any());
-        
when(session.getService(ArtifactInstaller.class)).thenReturn(artifactInstaller);
-
-        //
-        // ArtifactDeployer
-        //
-        ArtifactDeployer artifactDeployer = mock(ArtifactDeployer.class);
-        doAnswer(iom -> {
-                    artifactDeployer.deploy(ArtifactDeployerRequest.build(
-                            iom.getArgument(0, Session.class),
-                            iom.getArgument(1, RemoteRepository.class),
-                            Arrays.asList(iom.getArgument(2, 
Artifact[].class))));
-                    return null;
-                })
-                .when(session)
-                .deployArtifact(any(), any());
-        doAnswer(iom -> {
-                    artifactDeployer.deploy(ArtifactDeployerRequest.build(
-                            iom.getArgument(0, Session.class),
-                            iom.getArgument(1, RemoteRepository.class),
-                            iom.getArgument(2, Collection.class)));
-                    return null;
-                })
-                .when(artifactDeployer)
-                .deploy(any(), any(), any());
-        
when(session.getService(ArtifactDeployer.class)).thenReturn(artifactDeployer);
-
-        //
-        // ArtifactManager
-        //
-        ArtifactManager artifactManager = mock(ArtifactManager.class);
-        Map<Artifact, Path> paths = new HashMap<>();
-        doAnswer(iom -> {
-                    paths.put(iom.getArgument(0), iom.getArgument(1));
-                    return null;
-                })
-                .when(artifactManager)
-                .setPath(any(), any());
-        doAnswer(iom -> Optional.ofNullable(paths.get(iom.getArgument(0, 
Artifact.class))))
-                .when(artifactManager)
-                .getPath(any());
-        doAnswer(iom -> artifactManager.getPath(iom.getArgument(0, 
Artifact.class)))
-                .when(session)
-                .getArtifactPath(any());
-        
when(session.getService(ArtifactManager.class)).thenReturn(artifactManager);
-
-        //
-        // ProjectManager
-        //
-        ProjectManager projectManager = mock(ProjectManager.class);
-        Map<Project, Collection<Artifact>> attachedArtifacts = new HashMap<>();
-        doAnswer(iom -> {
-                    Project project = iom.getArgument(1, Project.class);
-                    String type = iom.getArgument(2, String.class);
-                    Path path = iom.getArgument(3, Path.class);
-                    Artifact artifact = session.createArtifact(
-                            project.getGroupId(), project.getArtifactId(), 
project.getVersion(), null, null, type);
-                    artifactManager.setPath(artifact, path);
-                    attachedArtifacts
-                            .computeIfAbsent(project, p -> new ArrayList<>())
-                            .add(artifact);
-                    return null;
-                })
-                .when(projectManager)
-                .attachArtifact(same(session), any(Project.class), any(), 
any());
-        doAnswer(iom -> {
-                    Project project = iom.getArgument(0, Project.class);
-                    Artifact artifact = iom.getArgument(1, Artifact.class);
-                    Path path = iom.getArgument(2, Path.class);
-                    artifactManager.setPath(artifact, path);
-                    attachedArtifacts
-                            .computeIfAbsent(project, p -> new ArrayList<>())
-                            .add(artifact);
-                    return null;
-                })
-                .when(projectManager)
-                .attachArtifact(any(Project.class), any(Artifact.class), 
any(Path.class));
-        when(projectManager.getAttachedArtifacts(any()))
-                .then(iom ->
-                        attachedArtifacts.computeIfAbsent(iom.getArgument(0, 
Project.class), p -> new ArrayList<>()));
-        when(projectManager.getAllArtifacts(any())).then(iom -> {
-            Project project = iom.getArgument(0, Project.class);
-            List<Artifact> result = new ArrayList<>();
-            result.addAll(project.getArtifacts());
-            result.addAll(attachedArtifacts.computeIfAbsent(project, p -> new 
ArrayList<>()));
-            return result;
-        });
-        
when(session.getService(ProjectManager.class)).thenReturn(projectManager);
-
-        //
-        // ArtifactFactory
-        //
-        ArtifactFactory artifactFactory = mock(ArtifactFactory.class);
-        when(artifactFactory.create(any())).then(iom -> {
-            ArtifactFactoryRequest request = iom.getArgument(0, 
ArtifactFactoryRequest.class);
-            String classifier = request.getClassifier();
-            String extension = request.getExtension();
-            String type = request.getType();
-            if (classifier == null) {
-                classifier = "";
-            }
-            if (extension == null) {
-                extension = type != null ? type : "";
-            }
-            return new ArtifactStub(
-                    request.getGroupId(), request.getArtifactId(), classifier, 
request.getVersion(), extension);
-        });
-        when(session.createArtifact(any(), any(), any(), any(), any(), 
any())).thenAnswer(iom -> {
-            String groupId = iom.getArgument(0, String.class);
-            String artifactId = iom.getArgument(1, String.class);
-            String version = iom.getArgument(2, String.class);
-            String classifier = iom.getArgument(3, String.class);
-            String extension = iom.getArgument(4, String.class);
-            String type = iom.getArgument(5, String.class);
-            return session.getService(ArtifactFactory.class)
-                    .create(ArtifactFactoryRequest.builder()
-                            .session(session)
-                            .groupId(groupId)
-                            .artifactId(artifactId)
-                            .version(version)
-                            .classifier(classifier)
-                            .extension(extension)
-                            .type(type)
-                            .build());
-        });
-        when(session.createArtifact(any(), any(), any(), 
any())).thenAnswer(iom -> {
-            String groupId = iom.getArgument(0, String.class);
-            String artifactId = iom.getArgument(1, String.class);
-            String version = iom.getArgument(2, String.class);
-            String extension = iom.getArgument(3, String.class);
-            return session.getService(ArtifactFactory.class)
-                    .create(ArtifactFactoryRequest.builder()
-                            .session(session)
-                            .groupId(groupId)
-                            .artifactId(artifactId)
-                            .version(version)
-                            .extension(extension)
-                            .build());
-        });
-        
when(session.getService(ArtifactFactory.class)).thenReturn(artifactFactory);
-
-        //
-        // ProjectBuilder
-        //
-        ProjectBuilder projectBuilder = mock(ProjectBuilder.class);
-        when(projectBuilder.build(any(ProjectBuilderRequest.class))).then(iom 
-> {
-            ProjectBuilderRequest request = iom.getArgument(0, 
ProjectBuilderRequest.class);
-            ProjectBuilderResult result = mock(ProjectBuilderResult.class);
-            Model model = new 
MavenStaxReader().read(request.getSource().get().openStream());
-            ProjectStub projectStub = new ProjectStub();
-            projectStub.setModel(model);
-            ArtifactStub artifactStub = new ArtifactStub(
-                    model.getGroupId(), model.getArtifactId(), "", 
model.getVersion(), model.getPackaging());
-            if (!"pom".equals(model.getPackaging())) {
-                projectStub.setMainArtifact(artifactStub);
-            }
-            when(result.getProject()).thenReturn(Optional.of(projectStub));
-            return result;
-        });
-        
when(session.getService(ProjectBuilder.class)).thenReturn(projectBuilder);
-
-        //
-        // ModelXmlFactory
-        //
-        when(session.getService(ModelXmlFactory.class)).thenReturn(new 
DefaultModelXmlFactory());
-
-        //
-        // Other
-        //
-        Properties sysProps = new Properties();
-        Properties usrProps = new Properties();
-        doReturn(sysProps).when(session).getSystemProperties();
-        doReturn(usrProps).when(session).getUserProperties();
-        when(session.getLocalRepository()).thenReturn(localRepository);
-        when(session.getData()).thenReturn(new TestSessionData());
-        when(session.withLocalRepository(any()))
-                .thenAnswer(iom -> getMockSession(iom.getArgument(0, 
LocalRepository.class)));
-
-        return session;
-    }
-
-    static String getPathForArtifact(Artifact artifact, boolean local) {
-        StringBuilder path = new StringBuilder(128);
-        path.append(artifact.getGroupId().replace('.', '/')).append('/');
-        path.append(artifact.getArtifactId()).append('/');
-        path.append(artifact.getVersion()).append('/');
-        path.append(artifact.getArtifactId()).append('-');
-        path.append(artifact.getVersion());
-        if (artifact.getClassifier().length() > 0) {
-            path.append('-').append(artifact.getClassifier());
-        }
-        if (artifact.getExtension().length() > 0) {
-            path.append('.').append(artifact.getExtension());
-        }
-        return path.toString();
+public class SessionStub implements Session {
+
+    private Map<String, String> userProperties;
+
+    private Map<String, String> systemProperties;
+
+    private final Settings settings;
+
+    public SessionStub(Settings settings) {
+        this(null, null, settings);
     }
 
-    static class TestSessionData implements SessionData {
-        private final Map<Key<?>, Object> map = new ConcurrentHashMap<>();
+    public SessionStub() {
+        this(null, null, null);
+    }
 
-        @Override
-        public <T> void set(Key<T> key, T value) {
-            map.put(key, value);
-        }
+    public SessionStub(Map<String, String> userProperties) {
+        this(null, userProperties, null);
+    }
+
+    public SessionStub(Map<String, String> systemProperties, Map<String, 
String> userProperties, Settings settings) {
 
-        @Override
-        public <T> boolean replace(Key<T> key, T oldValue, T newValue) {
-            return map.replace(key, oldValue, newValue);
+        this.settings = settings;
+
+        this.systemProperties = new HashMap<>();
+        if (systemProperties != null) {
+            this.systemProperties.putAll(systemProperties);
         }
+        System.getProperties().forEach((k, v) -> 
this.systemProperties.put(k.toString(), v.toString()));
 
-        @Override
-        @SuppressWarnings("unchecked")
-        public <T> T get(Key<T> key) {
-            return (T) map.get(key);
+        this.userProperties = new HashMap<>();
+        if (userProperties != null) {
+            this.userProperties.putAll(userProperties);
         }
+    }
+
+    @Override
+    public Settings getSettings() {
+        return settings;
+    }
+
+    @Override
+    public Map<String, String> getSystemProperties() {
+        return this.systemProperties;
+    }
 
-        @Override
-        @SuppressWarnings("unchecked")
-        public <T> T computeIfAbsent(Key<T> key, Supplier<T> supplier) {
-            return (T) map.computeIfAbsent(key, k -> supplier.get());
+    @Override
+    public Map<String, String> getUserProperties() {
+        return this.userProperties;
+    }
+
+    @Nonnull
+    public Map<String, String> getEffectiveProperties(@Nullable Project 
project) {
+        HashMap<String, String> result = new HashMap<>(getSystemProperties());
+        if (project != null) {
+            result.putAll(project.getModel().getProperties());
         }
+        result.putAll(getUserProperties());
+        return result;
+    }
+
+    @Override
+    public LocalRepository getLocalRepository() {
+        return null;
+    }
+
+    @Override
+    public Path getTopDirectory() {
+        return null;
+    }
+
+    @Override
+    public Path getRootDirectory() {
+        return null;
+    }
+
+    @Override
+    public List<RemoteRepository> getRemoteRepositories() {
+        return null;
+    }
+
+    @Override
+    public SessionData getData() {
+        return null;
+    }
+
+    @Override
+    public Version getMavenVersion() {
+        return null;
+    }
+
+    @Override
+    public int getDegreeOfConcurrency() {
+        return 0;
+    }
+
+    @Override
+    public Instant getStartTime() {
+        return null;
+    }
+
+    @Override
+    public List<Project> getProjects() {
+        return null;
+    }
+
+    @Override
+    public Map<String, Object> getPluginContext(Project project) {
+        return null;
+    }
+
+    @Override
+    public <T extends Service> T getService(Class<T> clazz) {
+        return null;
+    }
+
+    @Override
+    public Session withLocalRepository(LocalRepository localRepository) {
+        return null;
+    }
+
+    @Override
+    public Session withRemoteRepositories(List<RemoteRepository> repositories) 
{
+        return null;
+    }
+
+    @Override
+    public void registerListener(Listener listener) {}
+
+    @Override
+    public void unregisterListener(Listener listener) {}
+
+    @Override
+    public Collection<Listener> getListeners() {
+        return null;
+    }
+
+    @Override
+    public LocalRepository createLocalRepository(Path path) {
+        return null;
+    }
+
+    @Override
+    public RemoteRepository createRemoteRepository(String id, String url) {
+        return null;
+    }
+
+    @Override
+    public RemoteRepository createRemoteRepository(Repository repository) {
+        return null;
+    }
+
+    @Override
+    public Artifact createArtifact(String groupId, String artifactId, String 
version, String extension) {
+        return null;
+    }
+
+    @Override
+    public Artifact createArtifact(
+            String groupId, String artifactId, String version, String 
classifier, String extension, String type) {
+        return null;
+    }
+
+    @Override
+    public ArtifactCoordinate createArtifactCoordinate(String s, String s1, 
String s2, String s3) {
+        return null;
+    }
+
+    @Override
+    public ArtifactCoordinate createArtifactCoordinate(String coordString) {
+        return null;
+    }
+
+    @Override
+    public ArtifactCoordinate createArtifactCoordinate(
+            String s, String s1, String s2, String s3, String s4, String s5) {
+        return null;
+    }
+
+    @Override
+    public ArtifactCoordinate createArtifactCoordinate(Artifact artifact) {
+        return null;
+    }
+
+    @Override
+    public DependencyCoordinate createDependencyCoordinate(ArtifactCoordinate 
artifactCoordinate) {
+        return null;
+    }
+
+    @Override
+    public DependencyCoordinate createDependencyCoordinate(Dependency 
dependency) {
+        return null;
+    }
+
+    @Override
+    public Map.Entry<Artifact, Path> resolveArtifact(Artifact artifact) {
+        return null;
+    }
+
+    @Override
+    public Map.Entry<Artifact, Path> resolveArtifact(ArtifactCoordinate 
coordinate) {
+        return null;
+    }
+
+    @Override
+    public Map<Artifact, Path> resolveArtifacts(ArtifactCoordinate... 
artifactCoordinates) {
+        return null;
+    }
+
+    @Override
+    public Map<Artifact, Path> resolveArtifacts(Collection<? extends 
ArtifactCoordinate> collection) {
+        return null;
+    }
+
+    @Override
+    public Map<Artifact, Path> resolveArtifacts(Artifact... artifacts) {
+        return null;
+    }
+
+    @Override
+    public List<Node> flattenDependencies(Node node, PathScope scope) {
+        return null;
+    }
+
+    @Override
+    public List<Path> resolveDependencies(DependencyCoordinate 
dependencyCoordinate) {
+        return null;
+    }
+
+    @Override
+    public List<Path> resolveDependencies(List<DependencyCoordinate> 
dependencyCoordinates) {
+        return null;
+    }
+
+    @Override
+    public List<Path> resolveDependencies(Project project, PathScope scope) {
+        return null;
+    }
+
+    @Override
+    public Version resolveVersion(ArtifactCoordinate artifact) {
+        return null;
+    }
+
+    @Override
+    public List<Version> resolveVersionRange(ArtifactCoordinate artifact) {
+        return null;
+    }
+
+    @Override
+    public void installArtifacts(Artifact... artifacts) {}
+
+    @Override
+    public void installArtifacts(Collection<Artifact> artifacts) {}
+
+    @Override
+    public void deployArtifact(RemoteRepository repository, Artifact... 
artifacts) {}
+
+    @Override
+    public void setArtifactPath(Artifact artifact, Path path) {}
+
+    @Override
+    public Optional<Path> getArtifactPath(Artifact artifact) {
+        return Optional.empty();
+    }
+
+    @Override
+    public boolean isVersionSnapshot(String version) {
+        return false;
+    }
+
+    @Override
+    public Node collectDependencies(Artifact artifact) {
+        return null;
+    }
+
+    @Override
+    public Node collectDependencies(Project project) {
+        return null;
+    }
+
+    @Override
+    public Node collectDependencies(DependencyCoordinate dependencyCoordinate) 
{
+        return null;
+    }
+
+    @Override
+    public Path getPathForLocalArtifact(Artifact artifact) {
+        return null;
+    }
+
+    @Override
+    public Path getPathForRemoteArtifact(RemoteRepository remote, Artifact 
artifact) {
+        return null;
+    }
+
+    @Override
+    public Version parseVersion(String version) {
+        return null;
+    }
+
+    @Override
+    public VersionRange parseVersionRange(String versionRange) {
+        return null;
+    }
+
+    @Override
+    public VersionConstraint parseVersionConstraint(String s) {
+        return null;
+    }
+
+    @Override
+    public Map<PathType, List<Path>> resolveDependencies(
+            DependencyCoordinate dependencyCoordinate, PathScope scope, 
Collection<PathType> desiredTypes) {
+        return Map.of();
+    }
+
+    @Override
+    public Map<PathType, List<Path>> resolveDependencies(
+            Project project, PathScope scope, Collection<PathType> 
desiredTypes) {
+        return Map.of();
+    }
+
+    @Override
+    public Type requireType(String id) {
+        return null;
+    }
+
+    @Override
+    public Language requireLanguage(String id) {
+        return null;
+    }
+
+    @Override
+    public Packaging requirePackaging(String id) {
+        return null;
+    }
+
+    @Override
+    public ProjectScope requireProjectScope(String id) {
+        return null;
+    }
+
+    @Override
+    public DependencyScope requireDependencyScope(String id) {
+        return null;
+    }
+
+    @Override
+    public PathScope requirePathScope(String id) {
+        return null;
     }
 }
diff --git 
a/maven-plugin-testing-harness/src/test/java/org/apache/maven/api/di/testing/SimpleDITest.java
 
b/maven-plugin-testing-harness/src/test/java/org/apache/maven/api/di/testing/SimpleDITest.java
index 429a3f5..49fc6fa 100644
--- 
a/maven-plugin-testing-harness/src/test/java/org/apache/maven/api/di/testing/SimpleDITest.java
+++ 
b/maven-plugin-testing-harness/src/test/java/org/apache/maven/api/di/testing/SimpleDITest.java
@@ -23,7 +23,7 @@ import java.io.File;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.di.Inject;
 import org.apache.maven.api.di.Provides;
-import org.apache.maven.api.plugin.testing.stubs.SessionStub;
+import org.apache.maven.api.plugin.testing.stubs.SessionMock;
 import org.junit.jupiter.api.Test;
 
 import static org.apache.maven.api.di.testing.MavenDIExtension.getBasedir;
@@ -45,6 +45,6 @@ public class SimpleDITest {
 
     @Provides
     Session createSession() {
-        return SessionStub.getMockSession(LOCAL_REPO);
+        return SessionMock.getMockSession(LOCAL_REPO);
     }
 }
diff --git 
a/maven-plugin-testing-harness/src/test/java/org/apache/maven/api/plugin/testing/ExpressionEvaluatorTest.java
 
b/maven-plugin-testing-harness/src/test/java/org/apache/maven/api/plugin/testing/ExpressionEvaluatorTest.java
index 51b1ed9..30834c5 100644
--- 
a/maven-plugin-testing-harness/src/test/java/org/apache/maven/api/plugin/testing/ExpressionEvaluatorTest.java
+++ 
b/maven-plugin-testing-harness/src/test/java/org/apache/maven/api/plugin/testing/ExpressionEvaluatorTest.java
@@ -29,7 +29,7 @@ import org.apache.maven.api.di.Provides;
 import org.apache.maven.api.plugin.MojoException;
 import org.apache.maven.api.plugin.annotations.Mojo;
 import org.apache.maven.api.plugin.testing.stubs.ProjectStub;
-import org.apache.maven.api.plugin.testing.stubs.SessionStub;
+import org.apache.maven.api.plugin.testing.stubs.SessionMock;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
@@ -123,7 +123,7 @@ public class ExpressionEvaluatorTest {
     @Provides
     @SuppressWarnings("unused")
     Session session() {
-        Session session = SessionStub.getMockSession(LOCAL_REPO);
+        Session session = SessionMock.getMockSession(LOCAL_REPO);
         doReturn(new Properties()).when(session).getSystemProperties();
         doReturn(new Properties()).when(session).getUserProperties();
         doAnswer(iom -> 
Paths.get(MojoExtension.getBasedir())).when(session).getRootDirectory();


Reply via email to