static void assert_attached_objects_2( xorn_revision_t rev, xorn_object_t attached_to, xorn_object_t ob0, xorn_object_t ob1) { xorn_object_t *objects; size_t count; xorn_selection_t sel; assert(xorn_get_objects_attached_to( rev, attached_to, NULL, &count) == 0); assert(count == 2); count = -1; assert(xorn_get_objects_attached_to( rev, attached_to, &objects, &count) == 0); assert(objects != NULL); assert(count == 2); assert(objects[0] == ob0); assert(objects[1] == ob1); free(objects); assert(sel = xorn_select_attached_to(rev, attached_to)); assert(xorn_get_selected_objects(rev, sel, &objects, &count) == 0); assert(objects != NULL); assert(count == 2); assert((objects[0] == ob0 && objects[1] == ob1) || (objects[0] == ob1 && objects[1] == ob0)); free(objects); xorn_free_selection(sel); }
static void assert_four(xorn_revision_t rev, xorn_selection_t sel, int net0_color, int net1_color, int text0_color, int text1_color) { xorn_object_t *objects; size_t count; xorn_object_t net0, net1, text0, text1; const struct xornsch_net *net_data; const struct xornsch_text *text_data; assert(xorn_get_objects_attached_to(rev, NULL, &objects, &count) == 0); assert(objects != NULL); assert(count == 3); assert(net_data = xornsch_get_net_data(rev, objects[0])); assert(net_data->color == net0_color); net0 = objects[0]; assert(net_data = xornsch_get_net_data(rev, objects[1])); assert(net_data->color == net1_color); net1 = objects[1]; assert(text_data = xornsch_get_text_data(rev, objects[2])); assert(text_data->color == text0_color); text0 = objects[2]; free(objects); assert(xorn_get_objects_attached_to(rev, net0, &objects, &count) == 0); assert(count == 0); free(objects); assert(xorn_get_objects_attached_to(rev, net1, &objects, &count) == 0); assert(objects != NULL); assert(count == 1); assert(text_data = xornsch_get_text_data(rev, objects[0])); assert(text_data->color == text1_color); text1 = objects[0]; free(objects); assert(xorn_get_objects_attached_to( rev, text0, &objects, &count) == 0); assert(count == 0); free(objects); assert(xorn_get_objects_attached_to( rev, text1, &objects, &count) == 0); assert(count == 0); free(objects); assert(xorn_object_is_selected(rev, sel, net0) == true); assert(xorn_object_is_selected(rev, sel, net1) == true); assert(xorn_object_is_selected(rev, sel, text0) == true); assert(xorn_object_is_selected(rev, sel, text1) == false); }
static void assert_attached_objects_f( xorn_revision_t rev, xorn_object_t attached_to) { xorn_object_t *objects; size_t count; assert(xorn_get_objects_attached_to( rev, attached_to, &objects, &count) == -1); assert(xorn_select_attached_to(rev, attached_to) == NULL); }
static void assert_this_net_with_text( xorn_revision_t rev, xorn_object_t ob, int color, int text_color) { xorn_object_t *objects; size_t count; assert(xorn_get_objects_attached_to(rev, NULL, &objects, &count) == 0); assert(objects != NULL); assert(count == 1); assert(objects[0] == ob); assert(xorn_get_object_type(rev, ob) == xornsch_obtype_net); assert(xornsch_get_net_data(rev, ob)->color == color); free(objects); assert(xorn_get_objects_attached_to(rev, ob, &objects, &count) == 0); assert(objects != NULL); assert(count == 1); assert(xorn_get_object_type(rev, objects[0]) == xornsch_obtype_text); assert(xornsch_get_text_data(rev, objects[0])->color == text_color); free(objects); }
static void assert_attached_objects_0( xorn_revision_t rev, xorn_object_t attached_to) { xorn_object_t *objects; size_t count; xorn_selection_t sel; assert(xorn_get_objects_attached_to( rev, attached_to, NULL, &count) == 0); assert(count == 0); count = -1; assert(xorn_get_objects_attached_to( rev, attached_to, &objects, &count) == 0); assert(count == 0); free(objects); assert(sel = xorn_select_attached_to(rev, attached_to)); assert(xorn_get_selected_objects(rev, sel, &objects, &count) == 0); assert(count == 0); free(objects); xorn_free_selection(sel); }
static PyObject *get_objects_attached_to( PyObject *self, PyObject *args, PyObject *kwds) { PyObject *rev_arg = NULL, *ob_arg = NULL; static char *kwlist[] = { "rev", "ob", NULL }; if (!PyArg_ParseTupleAndKeywords( args, kwds, "O!O:get_objects_attached_to", kwlist, &RevisionType, &rev_arg, &ob_arg)) return NULL; if (ob_arg != Py_None && !PyObject_TypeCheck(ob_arg, &ObjectType)) { char buf[BUFSIZ]; snprintf(buf, BUFSIZ, "get_objects_attached_to() argument 2 " "must be %.50s or None, not %.50s", ObjectType.tp_name, ob_arg->ob_type->tp_name); PyErr_SetString(PyExc_TypeError, buf); return NULL; } if (ob_arg != Py_None && !xorn_object_exists_in_revision(((Revision *)rev_arg)->rev, ((Object *)ob_arg)->ob)) { PyErr_SetString(PyExc_KeyError, "Object does not exist"); return NULL; } xorn_object_t *objects; size_t count; if (xorn_get_objects_attached_to(((Revision *)rev_arg)->rev, ob_arg == Py_None ? NULL : ((Object *)ob_arg)->ob, &objects, &count) == -1) return PyErr_NoMemory(); return to_python_list(objects, count); }
static PyObject *Revision_set_object_data( Revision *self, PyObject *args, PyObject *kwds) { PyObject *ob_arg = NULL, *data_arg = NULL; static char *kwlist[] = { "ob", "data", NULL }; if (!PyArg_ParseTupleAndKeywords( args, kwds, "O!O:Revision.set_object_data", kwlist, &ObjectType, &ob_arg, &data_arg)) return NULL; if (!xorn_revision_is_transient(self->rev)) return not_transient(); xorn_obtype_t type = xorn_obtype_none; const void *data = NULL; if (prepare_data(data_arg, &type, &data) == -1) { char buf[BUFSIZ]; snprintf(buf, BUFSIZ, "Revision.set_object_data() argument 'data' (pos 2) " "must be of xorn.storage object type, not %.50s", data_arg->ob_type->tp_name); PyErr_SetString(PyExc_TypeError, buf); return NULL; } if (type != xornsch_obtype_text) { xorn_object_t attached_to; if (xorn_get_object_location(self->rev, ((Object *)ob_arg)->ob, &attached_to, NULL) != -1 && attached_to != NULL) { PyErr_SetString(PyExc_ValueError, "Cannot set attached object to " "something other than text"); return NULL; } } if (type != xornsch_obtype_net && type != xornsch_obtype_component) { size_t count; if (xorn_get_objects_attached_to( self->rev, ((Object *)ob_arg)->ob, NULL, &count) != -1 && count != 0) { PyErr_SetString( PyExc_ValueError, "Cannot set object with attached objects to " "something other than net or component"); return NULL; } } if (xorn_set_object_data(self->rev, ((Object *)ob_arg)->ob, type, data) == -1) return PyErr_NoMemory(); Py_INCREF(Py_None); return Py_None; }