// Path: src/main/java/com/superzanti/serversync/config/SyncConfig.java
// public class SyncConfig {
//     public final EConfigType configType;
// 
//     // COMMON //////////////////////////////
//     public String SERVER_IP = "127.0.0.1";
//     public List<String> FILE_IGNORE_LIST = Arrays.asList("**/serversync-*.jar", "**/serversync-*.cfg");
//     public List<String> CONFIG_INCLUDE_LIST = new ArrayList<>();
//     public Locale LOCALE = Locale.getDefault();
//     public ETheme THEME = ETheme.BLUE_YELLOW;
//     public int BUFFER_SIZE = 1024 * 64;
//     ////////////////////////////////////////
// 
//     // SERVER //////////////////////////////
//     public int SERVER_PORT = 38067;
//     public Boolean PUSH_CLIENT_MODS = false;
//     public List<String> FILE_INCLUDE_LIST = Collections.singletonList("mods/**");
//     public List<DirectoryEntry> DIRECTORY_INCLUDE_LIST = Collections.singletonList(new DirectoryEntry(
//         "mods",
//         EDirectoryMode.mirror
//     ));
//     public List<FileRedirect> REDIRECT_FILES_LIST = new ArrayList<>();
//     public int SYNC_MODE = 2;
//     ////////////////////////////////////////
// 
//     // CLIENT //////////////////////////////
//     public Boolean REFUSE_CLIENT_MODS = false;
//     ////////////////////////////////////////
// 
//     private static SyncConfig singleton;
// 
//     public SyncConfig() {
//         this.configType = EConfigType.COMMON;
//     }
// 
//     public SyncConfig(EConfigType type) {
//         configType = type;
//     }
// 
//     public static SyncConfig getConfig() {
//         if (SyncConfig.singleton == null) {
//             if (ServerSync.MODE == EServerMode.SERVER) {
//                 SyncConfig.singleton = new SyncConfig(EConfigType.SERVER);
//             }
//             if (ServerSync.MODE == EServerMode.CLIENT) {
//                 SyncConfig.singleton = new SyncConfig(EConfigType.CLIENT);
//             }
//         }
//         return SyncConfig.singleton;
//     }
// 
//     public void save() throws IOException {
//         ConfigLoader.save(configType);
//     }
// }
// 
// Path: src/main/java/com/superzanti/serversync/util/Logger.java
// public class Logger {
//     public static LoggerInstance instance = null;
//     private static final Object mutex = new Object();
//     private static Handler uiHandler;
// 
//     // Probably a heinous implementation of debounce but whatever
//     private static final long dbTimeMS = 2000L;
//     private static final ScheduledExecutorService dbRunner = Executors.newSingleThreadScheduledExecutor();
//     private static ScheduledFuture<?> waitingFlush;
// 
//     public static String getContext() {
//         return ServerSync.MODE == null ? "undefined" : ServerSync.MODE.toString();
//     }
// 
//     public static LoggerInstance getInstance() {
//         LoggerInstance result = instance;
//         if (result == null) {
//             //synchronized block to remove overhead
//             synchronized (mutex) {
//                 result = instance;
//                 if (result == null) {
//                     // if instance is null, initialize
//                     instance = result = new LoggerInstance(getContext());
//                 }
//             }
//         }
//         return result;
//     }
// 
//     public static void instantiate(String context) {
//         instance = new LoggerInstance(context);
//     }
// 
//     public static synchronized void setSystemOutput(boolean output) {
//         // enable/disable System.out logging
//         getInstance().javaLogger.setUseParentHandlers(output);
//     }
// 
//     public static synchronized void log(String s) {
//         getInstance().log(s);
//     }
// 
//     public static synchronized void error(String s) {
//         getInstance().error(s);
//     }
// 
//     public static synchronized void debug(String s) {
//         getInstance().debug(s);
//     }
// 
//     public static synchronized void debug(Exception e) {
//         getInstance().debug(Arrays.toString(e.getStackTrace()));
//     }
// 
//     public static synchronized void outputError(Object object) {
//         getInstance().debug("Failed to write object (" + object + ") to output stream");
//     }
// 
//     public static synchronized void attachUIHandler(Handler handler) {
//         if (uiHandler != null) {
//             uiHandler.close();
//             getInstance().javaLogger.removeHandler(uiHandler);
//         }
//         uiHandler = handler;
//         getInstance().javaLogger.addHandler(uiHandler);
//     }
// 
//     public static synchronized void flush() {
//         if (uiHandler != null) {
//             if (waitingFlush == null || waitingFlush.isDone()) {
//                 waitingFlush = dbRunner.schedule(() -> {
//                     uiHandler.flush();
//                 }, dbTimeMS, TimeUnit.MILLISECONDS);
//             }
//         }
//     }
// }
// 
// Path: src/main/java/com/superzanti/serversync/util/enums/EConfigType.java
// public enum EConfigType {
// 	SERVER,
// 	CLIENT,
// 	COMMON
// }


import com.superzanti.serversync.config.SyncConfig;
import com.superzanti.serversync.util.Logger;
import com.superzanti.serversync.util.enums.EConfigType;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
package com.superzanti.serversync;




public class SyncConfigTests {
    private SyncConfig config;

    @BeforeEach
    void init() {
// Path: src/main/java/com/superzanti/serversync/config/SyncConfig.java
// public class SyncConfig {
//     public final EConfigType configType;
// 
//     // COMMON //////////////////////////////
//     public String SERVER_IP = "127.0.0.1";
//     public List<String> FILE_IGNORE_LIST = Arrays.asList("**/serversync-*.jar", "**/serversync-*.cfg");
//     public List<String> CONFIG_INCLUDE_LIST = new ArrayList<>();
//     public Locale LOCALE = Locale.getDefault();
//     public ETheme THEME = ETheme.BLUE_YELLOW;
//     public int BUFFER_SIZE = 1024 * 64;
//     ////////////////////////////////////////
// 
//     // SERVER //////////////////////////////
//     public int SERVER_PORT = 38067;
//     public Boolean PUSH_CLIENT_MODS = false;
//     public List<String> FILE_INCLUDE_LIST = Collections.singletonList("mods/**");
//     public List<DirectoryEntry> DIRECTORY_INCLUDE_LIST = Collections.singletonList(new DirectoryEntry(
//         "mods",
//         EDirectoryMode.mirror
//     ));
//     public List<FileRedirect> REDIRECT_FILES_LIST = new ArrayList<>();
//     public int SYNC_MODE = 2;
//     ////////////////////////////////////////
// 
//     // CLIENT //////////////////////////////
//     public Boolean REFUSE_CLIENT_MODS = false;
//     ////////////////////////////////////////
// 
//     private static SyncConfig singleton;
// 
//     public SyncConfig() {
//         this.configType = EConfigType.COMMON;
//     }
// 
//     public SyncConfig(EConfigType type) {
//         configType = type;
//     }
// 
//     public static SyncConfig getConfig() {
//         if (SyncConfig.singleton == null) {
//             if (ServerSync.MODE == EServerMode.SERVER) {
//                 SyncConfig.singleton = new SyncConfig(EConfigType.SERVER);
//             }
//             if (ServerSync.MODE == EServerMode.CLIENT) {
//                 SyncConfig.singleton = new SyncConfig(EConfigType.CLIENT);
//             }
//         }
//         return SyncConfig.singleton;
//     }
// 
//     public void save() throws IOException {
//         ConfigLoader.save(configType);
//     }
// }
// 
// Path: src/main/java/com/superzanti/serversync/util/Logger.java
// public class Logger {
//     public static LoggerInstance instance = null;
//     private static final Object mutex = new Object();
//     private static Handler uiHandler;
// 
//     // Probably a heinous implementation of debounce but whatever
//     private static final long dbTimeMS = 2000L;
//     private static final ScheduledExecutorService dbRunner = Executors.newSingleThreadScheduledExecutor();
//     private static ScheduledFuture<?> waitingFlush;
// 
//     public static String getContext() {
//         return ServerSync.MODE == null ? "undefined" : ServerSync.MODE.toString();
//     }
// 
//     public static LoggerInstance getInstance() {
//         LoggerInstance result = instance;
//         if (result == null) {
//             //synchronized block to remove overhead
//             synchronized (mutex) {
//                 result = instance;
//                 if (result == null) {
//                     // if instance is null, initialize
//                     instance = result = new LoggerInstance(getContext());
//                 }
//             }
//         }
//         return result;
//     }
// 
//     public static void instantiate(String context) {
//         instance = new LoggerInstance(context);
//     }
// 
//     public static synchronized void setSystemOutput(boolean output) {
//         // enable/disable System.out logging
//         getInstance().javaLogger.setUseParentHandlers(output);
//     }
// 
//     public static synchronized void log(String s) {
//         getInstance().log(s);
//     }
// 
//     public static synchronized void error(String s) {
//         getInstance().error(s);
//     }
// 
//     public static synchronized void debug(String s) {
//         getInstance().debug(s);
//     }
// 
//     public static synchronized void debug(Exception e) {
//         getInstance().debug(Arrays.toString(e.getStackTrace()));
//     }
// 
//     public static synchronized void outputError(Object object) {
//         getInstance().debug("Failed to write object (" + object + ") to output stream");
//     }
// 
//     public static synchronized void attachUIHandler(Handler handler) {
//         if (uiHandler != null) {
//             uiHandler.close();
//             getInstance().javaLogger.removeHandler(uiHandler);
//         }
//         uiHandler = handler;
//         getInstance().javaLogger.addHandler(uiHandler);
//     }
// 
//     public static synchronized void flush() {
//         if (uiHandler != null) {
//             if (waitingFlush == null || waitingFlush.isDone()) {
//                 waitingFlush = dbRunner.schedule(() -> {
//                     uiHandler.flush();
//                 }, dbTimeMS, TimeUnit.MILLISECONDS);
//             }
//         }
//     }
// }
// 
// Path: src/main/java/com/superzanti/serversync/util/enums/EConfigType.java
// public enum EConfigType {
// 	SERVER,
// 	CLIENT,
// 	COMMON
// }


// Path: src/test/java/com/superzanti/serversync/SyncConfigTests.java
import com.superzanti.serversync.config.SyncConfig;
import com.superzanti.serversync.util.Logger;
import com.superzanti.serversync.util.enums.EConfigType;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;

package com.superzanti.serversync;




public class SyncConfigTests {
    private SyncConfig config;

    @BeforeEach
    void init() {
        Logger.instantiate("testing");