#/usr/bin/env python
import mozdevice
import mozlog
import re
import unittest
from sut import MockAgent


class TestGetInfo(unittest.TestCase):

    commands = {'os': ('info os', 'JDQ39'),
                'id': ('info id', '11:22:33:44:55:66'),
                'uptime': ('info uptime', '0 days 0 hours 7 minutes 0 seconds 0 ms'),
                'uptimemillis': ('info uptimemillis', '666'),
                'systime': ('info systime', '2013/04/2 12:42:00:007'),
                'screen': ('info screen', 'X:768 Y:1184'),
                'rotation': ('info rotation', 'ROTATION:0'),
                'memory': ('info memory', 'PA:1351032832, FREE: 878645248'),
                'process': ('info process', '1000    527     system\n'
                            '10091   3443    org.mozilla.firefox\n'
                            '10112   3137    com.mozilla.SUTAgentAndroid\n'
                            '10035   807     com.android.launcher'),
                'disk': ('info disk', '/data: 6084923392 total, 980922368 available\n'
                         '/system: 867999744 total, 332333056 available\n'
                         '/mnt/sdcard: 6084923392 total, 980922368 available'),
                'power': ('info power', 'Power status:\n'
                          '  AC power OFFLINE\n'
                          '  Battery charge LOW DISCHARGING\n'
                          '  Remaining charge:      20%\n'
                          '  Battery Temperature:   25.2 (c)'),
                'sutuserinfo': ('info sutuserinfo', 'User Serial:0'),
                'temperature': ('info temperature', 'Temperature: unknown')
                }

    def test_getInfo(self):

        for directive in self.commands.keys():
            m = MockAgent(self, commands=[self.commands[directive]])
            d = mozdevice.DroidSUT('127.0.0.1', port=m.port, logLevel=mozlog.DEBUG)

            expected = re.sub(r'\ +', ' ', self.commands[directive][1]).split('\n')
            # Account for slightly different return format for 'process'
            if directive is 'process':
                expected = [[x] for x in expected]

            self.assertEqual(d.getInfo(directive=directive)[directive], expected)

if __name__ == '__main__':
    unittest.main()
