summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuncan McGreggor <duncan@canonical.com>2011-04-06 12:06:52 -0600
committerDuncan McGreggor <duncan@canonical.com>2011-04-06 12:06:52 -0600
commit09c08b90f576beb6faab5fa7986f68e0a3dabab7 (patch)
tree3db0719d745db9909427320ea57589ca45653de8
parent38981182a04202f6a258080a2499396c09fd4fec (diff)
Started working on extract wrapper.
-rw-r--r--python/evemu/device.py27
-rw-r--r--python/evemu/tests/test_device.py28
-rw-r--r--python/evemu/util.py2
3 files changed, 51 insertions, 6 deletions
diff --git a/python/evemu/device.py b/python/evemu/device.py
index ce550c7..d06a4d8 100644
--- a/python/evemu/device.py
+++ b/python/evemu/device.py
@@ -60,8 +60,11 @@ class EvEmuDevice(base.EvEmuBase):
pass
self.destroy()
self.close()
- if self.get_node_name() and os.path.exists(self.get_node_name()):
- os.unlink(self.get_node_name())
+ #if self.get_node_name():
+ # print self.get_node_name()
+ # if os.path.exists(self.get_node_name()):
+ # print "unlinking %s ..." % self.get_node_name()
+ # os.unlink(self.get_node_name())
def _new(self):
device_new = self.get_lib().evemu_new
@@ -107,9 +110,10 @@ class EvEmuDevice(base.EvEmuBase):
self.delete()
raise error
+ def set_node_name(self, node_name):
+ self._node = node_name
+
def get_node_name(self):
- if not self._node:
- self._node = util.get_next_device()
return self._node
def delete(self):
@@ -195,6 +199,7 @@ class EvEmuDevice(base.EvEmuBase):
# populate the new node with data from the device pointer
try:
self._create()
+ self.set_node_name(util.get_last_device())
except exception.EvEmuError, error:
self.close()
raise error
@@ -220,11 +225,25 @@ class EvEmuDevice(base.EvEmuBase):
self.delete()
raise error
+ def _extract(self, device_node):
+ file_descriptor = os.open(device_node, os.O_RDONLY)
+ import pdb;pdb.set_trace()
+ self._call(
+ self.get_lib().evemu_extract,
+ self.get_device_pointer(),
+ file_descriptor)
+ os.close(file_descriptor)
+
def extract(self, device_node):
"""
A linux input device node is opened and read, storing all the retrieved
data in the device data structure.
"""
+ try:
+ self._extract(device_node)
+ except exception.EvEmuError, error:
+ #self.delete()
+ raise error
# Property methods
@property
diff --git a/python/evemu/tests/test_device.py b/python/evemu/tests/test_device.py
index 4cc5ba2..ef6c4d5 100644
--- a/python/evemu/tests/test_device.py
+++ b/python/evemu/tests/test_device.py
@@ -132,7 +132,33 @@ class EvEmuDeviceTestCase(testcase.BaseTestCase):
self.assertEqual(data, expected_data)
def test_extract(self):
- pass
+ # first, we need a device set up that we can extract info from
+ # prep a temp file to hold the written data
+ (output_fd, filename) = tempfile.mkstemp()
+ # get the device node for the virtual device created as part of the
+ # test
+ self.create_testing_device()
+ node = self.device.get_node_name()
+ # extract the device info from the node, saving it to the device data
+ # structure
+ #import pdb;pdb.set_trace()
+ self.device.extract(node)
+ # write the device data structure contents to a file and compare with
+ # the device .prop file that was used to create the virtual device to
+ # begin with; they should be identical
+ device = device_class(self.library)
+ device.write(filename)
+ os.close(output_fd)
+ # then, now test the data to make sure the write happened correctly
+ file_object = open(filename)
+ data = file_object.read()
+ file_object.close()
+ # do the checks
+ file_object = open(self.get_device_file())
+ expected_data = file_object.read()
+ file_object.close()
+ self.assertEqual(data, expected_data)
+
class EvEmuDevicePropertyTestCase(testcase.BaseTestCase):
diff --git a/python/evemu/util.py b/python/evemu/util.py
index eaabee0..e86fcb1 100644
--- a/python/evemu/util.py
+++ b/python/evemu/util.py
@@ -79,7 +79,7 @@ def get_last_device_number():
"""
Get the last used device node number.
"""
- return get_all_device_numbers()[0]
+ return get_all_device_numbers()[-1]
def get_last_device():