import unittest
import pykd
import target
import time

class ProcessTest(unittest.TestCase):

    def setUp(self):
        pykd.startProcess( target.appPath )
        pykd.startProcess( target.appPath )
        pykd.startProcess( target.appPath )

    def tearDown(self):
        pykd.killAllProcesses()

    def testGetCurrentProcess(self):
        proc = pykd.targetProcess.getCurrent()
        self.assertNotEqual(0, proc.systemID )
        self.assertNotEqual(0, proc.peb )

    def testEnumThreads(self):
        proc = pykd.targetProcess.getCurrent()
        threadNumber = proc.getNumberThreads()
        self.assertLess(0, threadNumber)
        for i in range(threadNumber):
            thread = proc.getThread(i)
            self.assertNotEqual(0, thread.systemID )
            self.assertNotEqual(0, thread.teb )

    def testEnumProcesses(self):
        processNumber = pykd.targetProcess.getNumber()
        for i in range(processNumber):
            proc = pykd.targetProcess(i)
            self.assertNotEqual(0, proc.systemID)
            self.assertNotEqual(0, proc.peb)

    def testSetCurrentThread(self):
        proc = pykd.targetProcess.getCurrent()
        threadNumber = proc.getNumberThreads()
        self.assertLess(0, threadNumber)
        for i in range(threadNumber):
            thread = proc.getThread(i)
            thread.setCurrent()

    def testGetBreakpoint(self):
        proc = pykd.targetProcess.getCurrent()
        self.assertEqual(0, proc.getNumberBreakpoints())