Browse Source

add wrapper and tests for the new Name::split(int) function

git-svn-id: svn://bind10.isc.org/svn/bind10/experiments/python-binding@2099 e5f2f494-b856-4b98-b285-d166d9295462
Jelte Jansen 15 years ago
parent
commit
02907445e2
2 changed files with 35 additions and 16 deletions
  1. 29 14
      src/lib/dns/python/name_python.cc
  2. 6 2
      src/lib/dns/python/tests/name_python_test.py

+ 29 - 14
src/lib/dns/python/name_python.cc

@@ -473,22 +473,37 @@ static PyObject*
 Name_split(s_Name* self, PyObject* args)
 {
     unsigned int first, n;
-
-    if (!PyArg_ParseTuple(args, "II", &first, &n))
-        return NULL;
-
-    s_Name* ret = PyObject_New(s_Name, &name_type);
-    if (ret != NULL) {
-        ret->name = NULL;
-        try {
-            ret->name = new Name(self->name->split(first, n));
-        } catch(isc::OutOfRange oor) {
-            PyErr_SetString(PyExc_IndexError, oor.what());
+    s_Name* ret = NULL;
+    
+    if (PyArg_ParseTuple(args, "II", &first, &n)) {
+        ret = PyObject_New(s_Name, &name_type);
+        if (ret != NULL) {
             ret->name = NULL;
+            try {
+                ret->name = new Name(self->name->split(first, n));
+            } catch(isc::OutOfRange oor) {
+                PyErr_SetString(PyExc_IndexError, oor.what());
+                ret->name = NULL;
+            }
+            if (ret->name == NULL) {
+                Py_DECREF(ret);
+                return NULL;
+            }
         }
-        if (ret->name == NULL) {
-            Py_DECREF(ret);
-            return NULL;
+    } else if (PyArg_ParseTuple(args, "I", &n)) {
+        ret = PyObject_New(s_Name, &name_type);
+        if (ret != NULL) {
+            ret->name = NULL;
+            try {
+                ret->name = new Name(self->name->split(n));
+            } catch(isc::OutOfRange oor) {
+                PyErr_SetString(PyExc_IndexError, oor.what());
+                ret->name = NULL;
+            }
+            if (ret->name == NULL) {
+                Py_DECREF(ret);
+                return NULL;
+            }
         }
     }
     return (PyObject*) ret;

+ 6 - 2
src/lib/dns/python/tests/name_python_test.py

@@ -141,11 +141,15 @@ class NameTest(unittest.TestCase):
         self.assertEqual("completely.different.", s.to_text())
         self.assertRaises(TypeError, self.name1.split, "wrong", 1)
         self.assertRaises(TypeError, self.name1.split, 1, "wrong")
-        # TODO: this test will fail when new split(int) is added
-        self.assertRaises(TypeError, self.name1.split, 1)
         self.assertRaises(IndexError, self.name1.split, 123, 1)
         self.assertRaises(IndexError, self.name1.split, 1, 123)
 
+        s = self.name1.split(1)
+        self.assertEqual("com.", s.to_text())
+        s = self.name1.split(0)
+        self.assertEqual("example.com.", s.to_text())
+        self.assertRaises(IndexError, self.name1.split, 123)
+
     def test_reverse(self):
         self.assertEqual("com.example.", self.name1.reverse().to_text())
         self.assertEqual(".", self.name2.reverse().to_text())