1
2
3
4
5 package draw_test
6
7 import (
8 "fmt"
9 "image/color"
10 "reflect"
11 "testing"
12
13 "gonum.org/v1/plot/vg"
14 "gonum.org/v1/plot/vg/draw"
15 "gonum.org/v1/plot/vg/recorder"
16
17 _ "gonum.org/v1/plot/vg/vgeps"
18 _ "gonum.org/v1/plot/vg/vgimg"
19 _ "gonum.org/v1/plot/vg/vgpdf"
20 _ "gonum.org/v1/plot/vg/vgsvg"
21 _ "gonum.org/v1/plot/vg/vgtex"
22 )
23
24 func TestCrop(t *testing.T) {
25 ls := draw.LineStyle{
26 Color: color.NRGBA{0, 20, 0, 123},
27 Width: 0.1 * vg.Inch,
28 }
29 var r1 recorder.Canvas
30 c1 := draw.NewCanvas(&r1, 6, 3)
31 c11 := draw.Crop(c1, 0, -3, 0, 0)
32 c12 := draw.Crop(c1, 3, 0, 0, 0)
33
34 var r2 recorder.Canvas
35 c2 := draw.NewCanvas(&r2, 6, 3)
36 c21 := draw.Canvas{
37 Canvas: c2.Canvas,
38 Rectangle: vg.Rectangle{
39 Min: vg.Point{X: 0, Y: 0},
40 Max: vg.Point{X: 3, Y: 3},
41 },
42 }
43 c22 := draw.Canvas{
44 Canvas: c2.Canvas,
45 Rectangle: vg.Rectangle{
46 Min: vg.Point{X: 3, Y: 0},
47 Max: vg.Point{X: 6, Y: 3},
48 },
49 }
50 str := "unexpected result: %+v != %+v"
51 if c11.Rectangle != c21.Rectangle {
52 t.Errorf(str, c11.Rectangle, c21.Rectangle)
53 }
54 if c12.Rectangle != c22.Rectangle {
55 t.Errorf(str, c11.Rectangle, c21.Rectangle)
56 }
57
58 c11.StrokeLine2(ls, c11.Min.X, c11.Min.Y,
59 c11.Min.X+3*vg.Inch, c11.Min.Y+3*vg.Inch)
60 c12.StrokeLine2(ls, c12.Min.X, c12.Min.Y,
61 c12.Min.X+3*vg.Inch, c12.Min.Y+3*vg.Inch)
62 c21.StrokeLine2(ls, c21.Min.X, c21.Min.Y,
63 c21.Min.X+3*vg.Inch, c21.Min.Y+3*vg.Inch)
64 c22.StrokeLine2(ls, c22.Min.X, c22.Min.Y,
65 c22.Min.X+3*vg.Inch, c22.Min.Y+3*vg.Inch)
66
67 if !reflect.DeepEqual(r1.Actions, r2.Actions) {
68 t.Errorf(str, r1.Actions, r2.Actions)
69 }
70 }
71
72 func TestTile(t *testing.T) {
73 var r recorder.Canvas
74 c := draw.NewCanvas(&r, 13, 7)
75 const (
76 rows = 2
77 cols = 3
78 pad = 1
79 )
80 tiles := draw.Tiles{
81 Rows: rows, Cols: cols,
82 PadTop: pad, PadBottom: pad,
83 PadRight: pad, PadLeft: pad,
84 PadX: pad, PadY: pad,
85 }
86 rectangles := [][]vg.Rectangle{
87 {
88 vg.Rectangle{
89 Min: vg.Point{X: 1, Y: 4},
90 Max: vg.Point{X: 4, Y: 6},
91 },
92 vg.Rectangle{
93 Min: vg.Point{X: 5, Y: 4},
94 Max: vg.Point{X: 8, Y: 6},
95 },
96 vg.Rectangle{
97 Min: vg.Point{X: 9, Y: 4},
98 Max: vg.Point{X: 12, Y: 6},
99 },
100 },
101 {
102 vg.Rectangle{
103 Min: vg.Point{X: 1, Y: 1},
104 Max: vg.Point{X: 4, Y: 3},
105 },
106 vg.Rectangle{
107 Min: vg.Point{X: 5, Y: 1},
108 Max: vg.Point{X: 8, Y: 3},
109 },
110 vg.Rectangle{
111 Min: vg.Point{X: 9, Y: 1},
112 Max: vg.Point{X: 12, Y: 3},
113 },
114 },
115 }
116 for j := 0; j < rows; j++ {
117 for i := 0; i < cols; i++ {
118 str := "row %d col %d unexpected result: %+v != %+v"
119 tile := tiles.At(c, i, j)
120 if tile.Rectangle != rectangles[j][i] {
121 t.Errorf(str, j, i, tile.Rectangle, rectangles[j][i])
122 }
123 }
124 }
125 }
126
127 func TestFormattedCanvas(t *testing.T) {
128 for _, test := range []struct {
129 format string
130 err error
131 }{
132 {format: "eps"},
133 {format: "jpg"},
134 {format: "jpeg"},
135 {format: "pdf"},
136 {format: "png"},
137 {format: "svg"},
138 {format: "tex"},
139 {format: "tiff"},
140 {format: "tif"},
141 {
142 format: "",
143 err: fmt.Errorf("unsupported format: \"\""),
144 },
145 {
146 format: "abc",
147 err: fmt.Errorf("unsupported format: \"abc\""),
148 },
149 } {
150 t.Run(test.format, func(t *testing.T) {
151 _, err := draw.NewFormattedCanvas(10, 10, test.format)
152 switch {
153 case err != nil && test.err != nil:
154 if got, want := err.Error(), test.err.Error(); got != want {
155 t.Fatalf("invalid error.\ngot= %v\nwant=%v", got, want)
156 }
157 case err != nil && test.err == nil:
158 t.Fatalf("unexpected error: %+v", err)
159 case err == nil && test.err != nil:
160 t.Fatalf("expected an error (got=%v)", err)
161 }
162 })
163 }
164 }
165
View as plain text