/*
 * Copyright 2026 Sergey S. Chernov real.sergeych@gmail.com
 *
 * Licensed 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 net.sergeych.lyngio.process

import kotlinx.coroutines.flow.toList
import kotlinx.coroutines.runBlocking
import net.sergeych.lyngio.process.security.PermitAllProcessAccessPolicy
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue

class JvmProcessTest {

    @Test
    fun testExecute() = runBlocking {
        val runner = getSystemProcessRunner()
        val secured = SecuredLyngProcessRunner(runner, PermitAllProcessAccessPolicy)
        
        val process = secured.execute("echo", listOf("hello", "world"))
        val output = process.stdout.toList()
        assertEquals(listOf("hello world"), output)
        assertEquals(0, process.waitFor())
    }

    @Test
    fun testShell() = runBlocking {
        val runner = getSystemProcessRunner()
        val secured = SecuredLyngProcessRunner(runner, PermitAllProcessAccessPolicy)
        
        val process = secured.shell("echo 'hello shell'")
        val output = process.stdout.toList()
        assertEquals(listOf("hello shell"), output)
        assertEquals(0, process.waitFor())
    }

    @Test
    fun testPlatformDetails() {
        val details = getPlatformDetails()
        assertTrue(details.name.isNotEmpty())
        assertTrue(isProcessSupported())
    }
}
