%%%%%%%%%%
%
% Tools
%
variable tmp_file = make_tmp_file("");
define exit_hook()
{
set_buffer_modified_flag(0);
() = remove(tmp_file);
return 1;
}
define buffer_as_string()
{
push_spot();
bob();
push_mark();
eob();
bufsubstr();
pop_spot();
return ();
}
define print_buffer()
{
message( buffer_as_string );
}
define expect_buffer_content(id, str)
{
variable b = buffer_as_string();
if (b == str)
message("Test $id succeeded"$);
else
{
message("Test $id failed"$);
message(__tmp(b));
}
}
%%%%%%%%%%
%
% Setup the file
%
() = find_file(tmp_file);
latex_mode();
() = evalfile("latex_pst", "latex");
variable test_id;
%%%%%%%%%%
%
% Test pst_point_min and pst_point_max
%
define test_mm(id, x1, y1, x2, y2, min_x, min_y, max_x, max_y)
{
variable stk_depth = _stkdepth();
variable pnt1 = @Pst_Point_Type, pnt2 = @Pst_Point_Type;
pnt1.x = x1;
pnt1.y = y1;
pnt2.x = x2;
pnt2.y = y2;
variable pnt = latex->pst_point_min(pnt1, pnt2);
if (pnt.x == min_x and pnt.y == min_y)
message("Test mm$id-min succeeded"$);
else
message("Test mm$id-min failed: "$ + string(pnt.x) + "," + string(pnt.y));
stk_depth -= _stkdepth();
if (stk_depth != 0)
message("Test mm$id-min left $stk_depth values on stack"$);
stk_depth = _stkdepth();
pnt = latex->pst_point_max(pnt1, pnt2);
if (pnt.x == max_x and pnt.y == max_y)
message("Test mm$id-max succeeded"$);
else
message("Test mm$id-max failed: "$ + string(pnt.x) + "," + string(pnt.y));
stk_depth -= _stkdepth();
if (stk_depth != 0)
message("Test mm$id-max left $stk_depth values on stack"$);
}
test_id = 0;
++test_id; test_mm(test_id, 1, 1, 1, 1, 1, 1, 1, 1);
++test_id; test_mm(test_id, 1, 0, 0, 1, 0, 0, 1, 1);
++test_id; test_mm(test_id, 0, 0, 0, 1, 0, 0, 0, 1);
++test_id; test_mm(test_id, -10, 0, -20, 1, -20, 0, -10, 1);
++test_id; test_mm(test_id, 10, 10, -20, -1, -20, -1, 10, 10);
++test_id; test_mm(test_id, -1, -1, 5, -2, -1, -2, 5, -1);
%%%%%%%%%%
%
% Test pst_enlarge_pic
%
define test_ep(id, pre, x, y, post)
{
variable stk_depth = _stkdepth();
erase_buffer();
insert("\\begin{pspicture}$pre\n\n\\end{pspicture}\n"$);
goto_line(2);
variable pnt = @Pst_Point_Type;
pnt.x = x;
pnt.y = y;
latex->pst_enlarge_pic(pnt);
expect_buffer_content("ep$id"$,
"\\begin{pspicture}$post\n\n\\end{pspicture}\n"$);
stk_depth -= _stkdepth();
if (stk_depth != 0)
message("Test ep$id left $stk_depth values on stack"$);
}
test_id = 0;
++test_id; test_ep(test_id, "", 5, 5, "(5,5)");
++test_id; test_ep(test_id, "", -5, 5, "(-5,0)(0,5)");
++test_id; test_ep(test_id, "", -8.8, -2, "(-8.8,-2)(0,0)");
++test_id; test_ep(test_id, "", 3, -7, "(0,-7)(3,0)");
++test_id; test_ep(test_id, "(10,10)", 3, 7, "(10,10)");
++test_id; test_ep(test_id, "(10,10)", -1, -2, "(-1,-2)(10,10)");
++test_id; test_ep(test_id, "(-1,-1)(10,10)", 5, -2, "(-1,-2)(10,10)");
++test_id; test_ep(test_id, "", 0, 0, "");
%%%%%%%%%%
%
% Test pst_update_pic_size
%
define test_ups(id, inner, exp)
{
variable stk_depth = _stkdepth();
erase_buffer();
insert("\\begin{pspicture}\n$inner\n\\end{pspicture}\n"$);
goto_line(2);
latex->pst_update_pic_size();
expect_buffer_content("ups$id"$,
"\\begin{pspicture}$exp\n$inner\n\\end{pspicture}\n"$);
stk_depth -= _stkdepth();
if (stk_depth != 0)
message("Test ups$id left $stk_depth values on stack"$);
}
test_id = 0;
++test_id; test_ups(test_id, "\\psframe(-0.3,-0.2)(5.1,2.2)", "(-0.3,-0.2)(5.1,2.2)");
++test_id; test_ups(test_id, "\\psframe(3.3,0.2)(5.1,2.2)", "(5.1,2.2)");
++test_id; test_ups(test_id, "\\psframe(3.3,0.2)(5.1,2.2)\n\\rput[t](6,1)", "(6,2.2)");
++test_id; test_ups(test_id, "", "");
%%%%%%%%%%
%
% Test pst_update_pic_size
%
define test_mp(id, inner, input, exp)
{
variable stk_depth = _stkdepth();
erase_buffer();
insert("\\begin{pspicture}$inner\n\\end{pspicture}\n"$);
bob(); () = right(17);
push_mark();
eob(); () = up(1); bol();
buffer_keystring(input + "\n");
latex->pst_move_points();
expect_buffer_content("mp$id"$,
"\\begin{pspicture}$exp\n\\end{pspicture}\n"$);
stk_depth -= _stkdepth();
if (stk_depth != 0)
message("Test mp$id left $stk_depth values on stack"$);
}
test_id = 0;
++test_id;
test_mp(test_id,
"(4,4)\n\\psframe(1,1)(2,2)\n\\psdots(0.5,3)\n\\psline(0,0)(3,2)",
"2",
"(5,5)\n\\psframe(3,3)(4,4)\n\\psdots(2.5,5)\n\\psline(2,2)(5,4)");
++test_id;
test_mp(test_id,
"(4,4)\n\\psframe(1,1)(2,2)\n\\psdots(0.5,3)\n\\psline(0,0)(3,2)",
"(-1,2)",
"(-1,0)(4,5)\n\\psframe(0,3)(1,4)\n\\psdots(-0.5,5)\n\\psline(-1,2)(2,4)");
++test_id;
test_mp(test_id,
"(4,4)\n\\psframe(1,1)(2,2)\n\\psdots(0.5,3)\n\\psline(0,0)(3,2)",
"0",
"(4,4)\n\\psframe(1,1)(2,2)\n\\psdots(0.5,3)\n\\psline(0,0)(3,2)");
++test_id;
test_mp(test_id,
"(4,4)\n\\psframe(1,1)(2,2)\n\\psdots(0.5,3)\n\\psline(0,0)(3,2)",
"(0,0)",
"(4,4)\n\\psframe(1,1)(2,2)\n\\psdots(0.5,3)\n\\psline(0,0)(3,2)");
++test_id;
test_mp(test_id,
"(4,4)\n\\psframe(1,1)(2,2)\n\\psdots(0.5,3)\n\\psline(.7,-.3)(3,2)",
"-3.14",
"(-2.64,-3.44)(4,4)\n\\psframe(-2.14,-2.14)(-1.14,-1.14)\n\\psdots(-2.64,-0.14)\n\\psline(-2.44,-3.44)(-0.14,-1.14)");