Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
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);
}
Exemplo n.º 5
0
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);
}
Exemplo n.º 6
0
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);
}
Exemplo n.º 7
0
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;
}