import unittest
import target
import pykd

class DbgClientTest( unittest.TestCase ):

    def testGetDebuggeeType( self ):
        c, q = pykd.getDebuggeeType()
        self.assertEqual( c, pykd.DEBUG_CLASS_USER_WINDOWS )
        self.assertEqual( q, pykd.DEBUG_USER_WINDOWS_PROCESS )

    def testIsKernelDebugging( self ):
        self.assertFalse( pykd.isKernelDebugging() )

    def testNumberProcessors( self ):
        """Number of processors can not be 0"""
        self.assertNotEqual( 0, pykd.getNumberProcessors() )

    def testPageSize( self ):
        """Size of memory page must be >= 4kb"""
        self.assertTrue( pykd.getPageSize() >= 4*1024 )

    def testIsDumpAnalyzing( self ):
        self.assertFalse( pykd.isDumpAnalyzing() )

    def testExecutionStatus( self ):
        self.assertEqual( pykd.DEBUG_STATUS_BREAK, pykd.getExecutionStatus() )
        pykd.setExecutionStatus( pykd.DEBUG_STATUS_GO )
        pykd.waitForEvent()
        self.assertEqual( pykd.DEBUG_STATUS_BREAK, pykd.getExecutionStatus() )

    def testPdbFile( self ):
        self.assertNotEqual( '', pykd.getPdbFile( target.module.begin() ) )

    def testProcessorMode( self ):
        self.assertNotEqual( '', pykd.getProcessorMode() )
        self.assertNotEqual( '', pykd.getProcessorType() )

    def testThreadList( self ):
        self.assertNotEqual( 0, len(pykd.getThreadList()) )

    def testSymbolsPath( self ):
        self.assertNotEqual( '', pykd.symbolsPath() )