// Path: stecker-plugin-loader/src/main/java/org/meridor/stecker/PluginException.java
// public class PluginException extends Exception {
// 
//     private Optional<DependencyProblem> dependencyProblem = Optional.empty();
// 
//     private Optional<PluginMetadata> pluginMetadata = Optional.empty();
// 
//     public PluginException(Exception e) {
//         super(e);
//     }
// 
//     public PluginException(String message) {
//         super(message);
//     }
// 
//     public PluginException(String message, Exception e) {
//         super(message, e);
//     }
// 
//     public PluginException withDependencyProblem(DependencyProblem dependencyProblem) {
//         this.dependencyProblem = Optional.ofNullable(dependencyProblem);
//         return this;
//     }
// 
//     public PluginException withPlugin(PluginMetadata pluginMetadata) {
//         this.pluginMetadata = Optional.ofNullable(pluginMetadata);
//         return this;
//     }
// 
//     /**
//      * Returns dependency problem if any
//      *
//      * @return dependency problem
//      */
//     public Optional<DependencyProblem> getDependencyProblem() {
//         return dependencyProblem;
//     }
// 
//     /**
//      * Returns plugin affected
//      *
//      * @return plugin metadata
//      */
//     public Optional<PluginMetadata> getPluginMetadata() {
//         return pluginMetadata;
//     }
// 
// }
// 
// Path: stecker-plugin-loader/src/test/java/org/meridor/stecker/TemporaryDirectory.java
// public class TemporaryDirectory extends ExternalResource {
// 
//     private Path directory;
// 
//     @Override
//     protected void before() throws Throwable {
//         super.before();
//         create();
//     }
// 
//     private void create() throws IOException {
//         directory = FileSystemHelper.createTempDirectory();
//     }
// 
//     @Override
//     protected void after() {
//         super.after();
//         remove();
//     }
// 
//     private void remove() {
//         try {
//             FileSystemHelper.removeDirectory(directory);
//         } catch (IOException e) {
//             System.out.println("Can't remove temporary directory");
//             e.printStackTrace();
//         }
//     }
// 
//     public Path getDirectory() {
//         return directory;
//     }
// 
//     public Path createFile(String fileName, byte[] contents) throws IOException {
//         Path filePath = directory.resolve(fileName);
//         Files.write(filePath, contents);
//         return filePath;
//     }
// }


import org.junit.Rule;
import org.junit.Test;
import org.meridor.stecker.PluginException;
import org.meridor.stecker.TemporaryDirectory;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.Assert.assertThat;
package org.meridor.stecker.dev;




public class DevResourcesScannerTest {

    @Rule
    public TemporaryDirectory temporaryDirectory = new TemporaryDirectory();

    private static final String[] GLOBS = new String[]{"glob:**/*.txt"};

    private Path matchingFile;

// Path: stecker-plugin-loader/src/main/java/org/meridor/stecker/PluginException.java
// public class PluginException extends Exception {
// 
//     private Optional<DependencyProblem> dependencyProblem = Optional.empty();
// 
//     private Optional<PluginMetadata> pluginMetadata = Optional.empty();
// 
//     public PluginException(Exception e) {
//         super(e);
//     }
// 
//     public PluginException(String message) {
//         super(message);
//     }
// 
//     public PluginException(String message, Exception e) {
//         super(message, e);
//     }
// 
//     public PluginException withDependencyProblem(DependencyProblem dependencyProblem) {
//         this.dependencyProblem = Optional.ofNullable(dependencyProblem);
//         return this;
//     }
// 
//     public PluginException withPlugin(PluginMetadata pluginMetadata) {
//         this.pluginMetadata = Optional.ofNullable(pluginMetadata);
//         return this;
//     }
// 
//     /**
//      * Returns dependency problem if any
//      *
//      * @return dependency problem
//      */
//     public Optional<DependencyProblem> getDependencyProblem() {
//         return dependencyProblem;
//     }
// 
//     /**
//      * Returns plugin affected
//      *
//      * @return plugin metadata
//      */
//     public Optional<PluginMetadata> getPluginMetadata() {
//         return pluginMetadata;
//     }
// 
// }
// 
// Path: stecker-plugin-loader/src/test/java/org/meridor/stecker/TemporaryDirectory.java
// public class TemporaryDirectory extends ExternalResource {
// 
//     private Path directory;
// 
//     @Override
//     protected void before() throws Throwable {
//         super.before();
//         create();
//     }
// 
//     private void create() throws IOException {
//         directory = FileSystemHelper.createTempDirectory();
//     }
// 
//     @Override
//     protected void after() {
//         super.after();
//         remove();
//     }
// 
//     private void remove() {
//         try {
//             FileSystemHelper.removeDirectory(directory);
//         } catch (IOException e) {
//             System.out.println("Can't remove temporary directory");
//             e.printStackTrace();
//         }
//     }
// 
//     public Path getDirectory() {
//         return directory;
//     }
// 
//     public Path createFile(String fileName, byte[] contents) throws IOException {
//         Path filePath = directory.resolve(fileName);
//         Files.write(filePath, contents);
//         return filePath;
//     }
// }


// Path: stecker-plugin-loader/src/test/java/org/meridor/stecker/dev/DevResourcesScannerTest.java
import org.junit.Rule;
import org.junit.Test;
import org.meridor.stecker.PluginException;
import org.meridor.stecker.TemporaryDirectory;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.Assert.assertThat;

package org.meridor.stecker.dev;




public class DevResourcesScannerTest {

    @Rule
    public TemporaryDirectory temporaryDirectory = new TemporaryDirectory();

    private static final String[] GLOBS = new String[]{"glob:**/*.txt"};

    private Path matchingFile;

    @Test