diff --git a/build.gradle.kts b/build.gradle.kts index 50cb87d..2c888b4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ repositories { dependencies { implementation(kotlin("stdlib")) implementation("io.github.microutils:kotlin-logging-jvm:3.0.5") - implementation("ch.qos.logback:logback-classic:1.5.7") + implementation("ch.qos.logback:logback-classic:1.5.13") implementation("org.jline:jline:3.27.1") testImplementation(kotlin("test")) @@ -28,7 +28,8 @@ dependencies { application { mainClass.set("MainKt") applicationDefaultJvmArgs = listOf( - "--enable-native-access=ALL-UNNAMED" + "--enable-native-access=ALL-UNNAMED", + "-Dslf4j.internal.verbosity=WARN" ) } @@ -53,7 +54,6 @@ tasks.named("build") { dependsOn("shadowJar") } -// да, я ленивый tasks.withType { jvmArgs("--enable-native-access=ALL-UNNAMED") } \ No newline at end of file diff --git a/logs/all.log b/logs/all.log index 60714ec..dce5fec 100644 --- a/logs/all.log +++ b/logs/all.log @@ -1,3 +1 @@ -2026-04-02 14:56:32.354 [main] INFO collection.CollectionManager - [COMMANDS] {GET_INFO} Получение информации о коллекции -2026-04-02 14:56:35.956 [main] INFO collection.CollectionManager - [COMMANDS] {IS_EMPTY} Проверка наличия элементов в коллекции -2026-04-02 14:56:35.958 [main] INFO collection.CollectionManager - [COMMANDS] {GET_ALL} Возвращена коллекция +2026-04-03 21:46:09.332 [main] INFO collection.CollectionManager - [COMMANDS] {LOAD_FROM_FILE} Загрузка коллекции из файла diff --git a/logs/archived/all-2026-04-02_14-56.0.log b/logs/archived/all-2026-04-02_14-56.0.log new file mode 100644 index 0000000..60714ec --- /dev/null +++ b/logs/archived/all-2026-04-02_14-56.0.log @@ -0,0 +1,3 @@ +2026-04-02 14:56:32.354 [main] INFO collection.CollectionManager - [COMMANDS] {GET_INFO} Получение информации о коллекции +2026-04-02 14:56:35.956 [main] INFO collection.CollectionManager - [COMMANDS] {IS_EMPTY} Проверка наличия элементов в коллекции +2026-04-02 14:56:35.958 [main] INFO collection.CollectionManager - [COMMANDS] {GET_ALL} Возвращена коллекция diff --git a/logs/archived/all-2026-04-03_21-16.0.log b/logs/archived/all-2026-04-03_21-16.0.log new file mode 100644 index 0000000..1df2b6b --- /dev/null +++ b/logs/archived/all-2026-04-03_21-16.0.log @@ -0,0 +1 @@ +2026-04-03 21:16:19.329 [main] INFO collection.CollectionManager - [COMMANDS] {LOAD_FROM_FILE} Загрузка коллекции из файла diff --git a/logs/archived/all-2026-04-03_21-41.0.log b/logs/archived/all-2026-04-03_21-41.0.log new file mode 100644 index 0000000..f227f62 --- /dev/null +++ b/logs/archived/all-2026-04-03_21-41.0.log @@ -0,0 +1 @@ +2026-04-03 21:41:41.050 [main] INFO collection.CollectionManager - [COMMANDS] {LOAD_FROM_FILE} Загрузка коллекции из файла diff --git a/logs/archived/all-2026-04-03_21-45.0.log b/logs/archived/all-2026-04-03_21-45.0.log new file mode 100644 index 0000000..683c2d0 --- /dev/null +++ b/logs/archived/all-2026-04-03_21-45.0.log @@ -0,0 +1,2 @@ +2026-04-03 21:45:16.884 [main] INFO collection.CollectionManager - [COMMANDS] {LOAD_FROM_FILE} Загрузка коллекции из файла +2026-04-03 21:45:32.665 [main] INFO collection.CollectionManager - [COMMANDS] {LOAD_FROM_FILE} Загрузка коллекции из файла diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index cf690e2..b8c5307 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -12,6 +12,8 @@ import runner.CommandInvoker * */ fun main(args: Array) { + System.setProperty("slf4j.internal.verbosity", "WARN") + // Проверяем аргументы var filePath = "data.csv" diff --git a/src/main/kotlin/commands/ExitCommand.kt b/src/main/kotlin/commands/ExitCommand.kt index 3047b82..fb53679 100644 --- a/src/main/kotlin/commands/ExitCommand.kt +++ b/src/main/kotlin/commands/ExitCommand.kt @@ -12,6 +12,6 @@ class ExitCommand( override val description = "завершить программу" override fun execute(args: List) { - inputManager.print("До свидания!") + null } } diff --git a/src/main/kotlin/input/IOManager.kt b/src/main/kotlin/input/IOManager.kt index a554bc7..a629fe7 100644 --- a/src/main/kotlin/input/IOManager.kt +++ b/src/main/kotlin/input/IOManager.kt @@ -40,12 +40,10 @@ class IOManager() { /** * Читает строку с промптом ☭. - * Возвращает null при Ctrl+D (EOF) или Ctrl+C. */ fun readLine(prompt: String): String? { while (inputQueue.isNotEmpty()) { if (inputQueue.size == 1) kotlin.io.print(prompt) - // при выполнении скрипта три раза выводится val topInDeque = inputQueue.peek() if (topInDeque.hasNextLine()) { diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index bab5b32..b606541 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -1,4 +1,4 @@ - + logs/all.log diff --git a/src/test/kotlin/AddIfCommandsTest.kt b/src/test/kotlin/AddIfCommandsTest.kt index 0090649..1888616 100644 --- a/src/test/kotlin/AddIfCommandsTest.kt +++ b/src/test/kotlin/AddIfCommandsTest.kt @@ -5,52 +5,55 @@ import input.HumanBeingBuilder import input.IOManager import io.mockk.* import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Test import kotlin.test.assertEquals class AddIfCommandsTest { private lateinit var manager: CollectionManager - private lateinit var inputManager: IOManager + private val inputManager = mockk(relaxed = true) @BeforeEach fun setUp() { manager = CollectionManager() - inputManager = mockk() + } + + @AfterEach + fun tearDown() { + unmockkConstructor(HumanBeingBuilder::class) } /** * Тест 5: add_if_max добавляет элемент, если он больше максимального. */ -// @Test -// fun `add_if_max should add element greater than current max`() { -// manager.add(TestData.human("Alice")) // min элемент -// val bigHuman = TestData.human("Zorro") // 'Z' > 'A' по compareTo -// -// // Мокируем HumanBeingBuilder через InputManager -// mockkConstructor(HumanBeingBuilder::class) -// every { anyConstructed().build() } returns bigHuman -// -// AddIfMaxCommand(manager, inputManager).execute(emptyList()) -// -// assertEquals(2, manager.size()) -// unmockkConstructor(HumanBeingBuilder::class) -// } + @Test + fun `add_if_max should add element greater than current max`() { + manager.add(TestData.human("Alice")) // min элемент + val bigHuman = TestData.human("Zorro") // 'Z' > 'A' по compareTo + + // Мокируем HumanBeingBuilder через InputManager + mockkConstructor(HumanBeingBuilder::class) + every { anyConstructed().build() } returns bigHuman + + AddIfMaxCommand(manager, inputManager).execute(emptyList()) + + assertEquals(2, manager.size()) + } /** * Тест 6: add_if_min НЕ добавляет элемент, если он больше минимального. */ -// @Test -// fun `add_if_min should NOT add element greater than current min`() { -// manager.add(TestData.human("Alice")) -// val bigHuman = TestData.human("Zorro") -// -// mockkConstructor(HumanBeingBuilder::class) -// every { anyConstructed().build() } returns bigHuman -// -// AddIfMinCommand(manager, inputManager).execute(emptyList()) -// -// assertEquals(1, manager.size()) // не добавлен -// unmockkConstructor(HumanBeingBuilder::class) -// } + @Test + fun `add_if_min should NOT add element greater than current min`() { + manager.add(TestData.human("Alice")) + val bigHuman = TestData.human("Zorro") + + mockkConstructor(HumanBeingBuilder::class) + every { anyConstructed().build() } returns bigHuman + + AddIfMinCommand(manager, inputManager).execute(emptyList()) + + assertEquals(1, manager.size()) // не добавлен + } }