import lldb
import os
from lldbsuite.test.lldbtest import *
from lldbsuite.test.decorators import *


@skipIfRemote
class TestQemuAPI(TestBase):
    NO_DEBUG_INFO_TESTCASE = True

    def test_file_api(self):
        qemu = lldb.SBPlatform("qemu-user")
        host = lldb.SBPlatform.GetHostPlatform()

        target = self.getBuildArtifact("target.c")
        main_c = lldb.SBFileSpec(self.getSourcePath("main.c"))

        self.assertSuccess(qemu.Put(main_c, lldb.SBFileSpec(target)))
        self.assertTrue(os.path.exists(target))
        self.assertEqual(
            qemu.GetFilePermissions(target), host.GetFilePermissions(target)
        )

        self.assertSuccess(qemu.MakeDirectory(self.getBuildArtifact("target_dir")))
        self.assertTrue(os.path.isdir(self.getBuildArtifact("target_dir")))

    def test_process_api(self):
        self.dbg.SetCurrentPlatform("qemu-user")
        self.expect(
            "platform process list",
            substrs=['no processes were found on the "qemu-user" platform'],
            error=True,
        )
