size_test.go (8936B)
1 package render 2 3 import ( 4 "context" 5 "fmt" 6 "testing" 7 8 "git.defalsify.org/vise.git/state" 9 "git.defalsify.org/vise.git/resource" 10 "git.defalsify.org/vise.git/cache" 11 ) 12 13 type TestSizeResource struct { 14 *resource.MemResource 15 } 16 17 func NewTestSizeResource() TestSizeResource { 18 mem := resource.NewMemResource() 19 rs := TestSizeResource{&mem} 20 rs.AddTemplate("small", "one {{.foo}} two {{.bar}} three {{.baz}}") 21 rs.AddTemplate("toobug", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus in mattis lorem. Aliquam erat volutpat. Ut vitae metus.") 22 rs.AddTemplate("pages", "one {{.foo}} two {{.bar}} three {{.baz}}\n{{.xyzzy}}") 23 rs.AddEntryFunc("foo", get) 24 rs.AddEntryFunc("bar", get) 25 rs.AddEntryFunc("baz", get) 26 rs.AddEntryFunc("xyzzy", getXyzzy) 27 return rs 28 } 29 30 func get(ctx context.Context, sym string, input []byte) (resource.Result, error) { 31 switch sym { 32 case "foo": 33 return resource.Result{ 34 Content: "inky", 35 }, nil 36 case "bar": 37 return resource.Result{ 38 Content: "pinky", 39 }, nil 40 case "baz": 41 return resource.Result{ 42 Content: "blinky", 43 }, nil 44 } 45 return resource.Result{}, fmt.Errorf("unknown sym: %s", sym) 46 } 47 48 func getXyzzy(ctx context.Context, sym string, input []byte) (resource.Result, error) { 49 r := "inky pinky\nblinky clyde sue\ntinkywinky dipsy\nlala poo\none two three four five six seven\neight nine ten\neleven twelve" 50 return resource.Result{ 51 Content: r, 52 }, nil 53 } 54 // 55 //type TestSizeResource struct { 56 // *resource.MenuResource 57 //} 58 // 59 //func getTemplate(sym string, ctx context.Context) (string, error) { 60 // var tpl string 61 // switch sym { 62 // case "small": 63 // tpl = "one {{.foo}} two {{.bar}} three {{.baz}}" 64 // case "toobig": 65 // tpl = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus in mattis lorem. Aliquam erat volutpat. Ut vitae metus." 66 // case "pages": 67 // tpl = "one {{.foo}} two {{.bar}} three {{.baz}}\n{{.xyzzy}}" 68 // } 69 // return tpl, nil 70 //} 71 // 72 //func funcFor(sym string) (resource.EntryFunc, error) { 73 // switch sym { 74 // case "foo": 75 // return getFoo, nil 76 // case "bar": 77 // return getBar, nil 78 // case "baz": 79 // return getBaz, nil 80 // case "xyzzy": 81 // return getXyzzy, nil 82 // } 83 // return nil, fmt.Errorf("unknown func: %s", sym) 84 //} 85 // 86 //func getFoo(sym string, input []byte, ctx context.Context) (resource.Result, error) { 87 // return resource.Result{ 88 // Content: "inky", 89 // }, nil 90 //} 91 // 92 //func getBar(sym string, input []byte, ctx context.Context) (resource.Result, error) { 93 // return resource.Result{ 94 // Content: "pinky", 95 // }, nil 96 //} 97 // 98 //func getBaz(sym string, input []byte, ctx context.Context) (resource.Result, error) { 99 // return resource.Result{ 100 // Content: "blinky", 101 // }, nil 102 //} 103 // 104 //func getXyzzy(sym string, input []byte, ctx context.Context) (resource.Result, error) { 105 // return resource.Result{ 106 // Content: "inky pinky\nblinky clyde sue\ntinkywinky dipsy\nlala poo\none two three four five six seven\neight nine ten\neleven twelve", 107 // }, nil 108 //} 109 110 func TestSizeCheck(t *testing.T) { 111 szr := NewSizer(16) 112 l, ok := szr.Check("foobar") 113 if !ok { 114 t.Fatalf("expected ok") 115 } 116 if l != 10 { 117 t.Fatalf("expected 10, got %v", l) 118 } 119 120 l, ok = szr.Check("inkypinkyblinkyclyde") 121 if ok { 122 t.Fatalf("expected not ok") 123 } 124 if l != 0 { 125 t.Fatalf("expected 0, got %v", l) 126 } 127 } 128 129 func TestSizeLimit(t *testing.T) { 130 st := state.NewState(0) 131 ca := cache.NewCache() 132 mn := NewMenu() //.WithOutputSize(32) 133 //mrs := NewMenuResource() //.WithEntryFuncGetter(funcFor).WithTemplateGetter(getTemplate) 134 //rs := TestSizeResource{ 135 // mrs, 136 //} 137 rs := NewTestSizeResource() 138 szr := NewSizer(128) 139 pg := NewPage(ca, rs).WithMenu(mn).WithSizer(szr) 140 ca.Push() 141 st.Down("test") 142 err := ca.Add("foo", "inky", 4) 143 if err != nil { 144 t.Fatal(err) 145 } 146 err = ca.Add("bar", "pinky", 10) 147 if err != nil { 148 t.Fatal(err) 149 } 150 err = ca.Add("baz", "blinky", 0) 151 if err != nil { 152 t.Fatal(err) 153 } 154 err = pg.Map("foo") 155 if err != nil { 156 t.Fatal(err) 157 } 158 err = pg.Map("bar") 159 if err != nil { 160 t.Fatal(err) 161 } 162 err = pg.Map("baz") 163 if err != nil { 164 t.Fatal(err) 165 } 166 167 mn.Put("1", "foo the foo") 168 mn.Put("2", "go to bar") 169 170 ctx := context.TODO() 171 _, err = pg.Render(ctx, "small", 0) 172 if err != nil { 173 t.Fatal(err) 174 } 175 176 _, err = pg.Render(ctx, "toobig", 0) 177 if err == nil { 178 t.Fatalf("expected size exceeded") 179 } 180 } 181 182 func TestSizePages(t *testing.T) { 183 st := state.NewState(0) 184 ca := cache.NewCache() 185 mn := NewMenu() //.WithOutputSize(32) 186 //mrs := NewMenuResource() //.WithEntryFuncGetter(funcFor).WithTemplateGetter(getTemplate) 187 //rs := TestSizeResource{ 188 // mrs, 189 //} 190 rs := NewTestSizeResource() 191 szr := NewSizer(128) 192 pg := NewPage(ca, rs).WithSizer(szr).WithMenu(mn) 193 ca.Push() 194 st.Down("test") 195 ca.Add("foo", "inky", 4) 196 ca.Add("bar", "pinky", 10) 197 ca.Add("baz", "blinky", 20) 198 ca.Add("xyzzy", "inky pinky\nblinky clyde sue\ntinkywinky dipsy\nlala poo\none two three four five six seven\neight nine ten\neleven twelve", 0) 199 pg.Map("foo") 200 pg.Map("bar") 201 pg.Map("baz") 202 pg.Map("xyzzy") 203 204 mn.Put("1", "foo the foo") 205 mn.Put("2", "go to bar") 206 207 ctx := context.TODO() 208 r, err := pg.Render(ctx, "pages", 0) 209 if err != nil { 210 t.Fatal(err) 211 } 212 213 expect := `one inky two pinky three blinky 214 inky pinky 215 blinky clyde sue 216 tinkywinky dipsy 217 lala poo 218 1:foo the foo 219 2:go to bar` 220 221 222 if r != expect { 223 t.Fatalf("expected:\n\t%x\ngot:\n\t%x\n", expect, r) 224 } 225 r, err = pg.Render(ctx, "pages", 1) 226 if err != nil { 227 t.Fatal(err) 228 } 229 230 expect = `one inky two pinky three blinky 231 one two three four five six seven 232 eight nine ten 233 eleven twelve 234 1:foo the foo 235 2:go to bar` 236 if r != expect { 237 t.Fatalf("expected:\n\t%s\ngot:\n\t%s\n", expect, r) 238 } 239 240 } 241 242 func TestManySizes(t *testing.T) { 243 for i := 60; i < 160; i++ { 244 st := state.NewState(0) 245 ca := cache.NewCache() 246 mn := NewMenu() //.WithOutputSize(32) 247 rs := NewTestSizeResource() //.WithEntryFuncGetter(funcFor).WithTemplateGetter(getTemplate) 248 //rs := TestSizeResource{ 249 // mrs, 250 //} 251 szr := NewSizer(uint32(i)) 252 pg := NewPage(ca, rs).WithSizer(szr).WithMenu(mn) 253 ca.Push() 254 st.Down("pages") 255 ca.Add("foo", "inky", 10) 256 ca.Add("bar", "pinky", 10) 257 ca.Add("baz", "blinky", 10) 258 ca.Add("xyzzy", "inky pinky\nblinky clyde sue\ntinkywinky dipsy\nlala poo\none two three four five six seven\neight nine ten\neleven twelve", 0) 259 pg.Map("foo") 260 pg.Map("bar") 261 pg.Map("baz") 262 pg.Map("xyzzy") 263 264 ctx := context.TODO() 265 _, err := pg.Render(ctx, "pages", 0) 266 if err != nil { 267 t.Fatal(err) 268 } 269 } 270 } 271 272 func TestManySizesMenued(t *testing.T) { 273 for i := 60; i < 160; i++ { 274 st := state.NewState(0) 275 ca := cache.NewCache() 276 mn := NewMenu() //.WithOutputSize(32) 277 rs := NewTestSizeResource() 278 szr := NewSizer(uint32(i)) 279 pg := NewPage(ca, rs).WithSizer(szr).WithMenu(mn) 280 ca.Push() 281 st.Down("pages") 282 ca.Add("foo", "inky", 10) 283 ca.Add("bar", "pinky", 10) 284 ca.Add("baz", "blinky", 10) 285 ca.Add("xyzzy", "inky pinky\nblinky clyde sue\ntinkywinky dipsy\nlala poo\none two three four five six seven\neight nine ten\neleven twelve", 0) 286 pg.Map("foo") 287 pg.Map("bar") 288 pg.Map("baz") 289 pg.Map("xyzzy") 290 mn.Put("0", "yay") 291 mn.Put("12", "nay") 292 293 ctx := context.TODO() 294 _, err := pg.Render(ctx, "pages", 0) 295 if err != nil { 296 t.Fatal(err) 297 } 298 } 299 } 300 301 func TestMenuCollideSink(t *testing.T) { 302 ca := cache.NewCache() 303 rs := resource.NewMemResource() 304 rs.AddTemplate("foo", "bar") 305 szr := NewSizer(30) 306 pg := NewPage(ca, rs).WithSizer(szr) 307 ca.Push() 308 309 ca.Add("inky", "pinky", 5) 310 ca.Add("blinky", "clyde", 0) 311 pg.Map("inky") 312 313 mn := NewMenu().WithSink() 314 pg = pg.WithMenu(mn) 315 316 var err error 317 ctx := context.TODO() 318 _, err = pg.Render(ctx, "foo", 0) 319 if err != nil { 320 t.Fatal(err) 321 } 322 323 mn = NewMenu().WithSink() 324 pg = pg.WithMenu(mn) 325 pg.Map("blinky") 326 _, err = pg.Render(ctx, "foo", 0) 327 if err == nil { 328 t.Fatalf("expected error") 329 } 330 } 331 332 func TestMenuSink(t *testing.T) { 333 ca := cache.NewCache() 334 rs := resource.NewMemResource() 335 rs.AddTemplate("foo", "bar {{.baz}}") 336 szr := NewSizer(45) 337 338 mn := NewMenu().WithSink().WithBrowseConfig(DefaultBrowseConfig()) 339 mn.Put("0", "inky") 340 mn.Put("1", "pinky") 341 mn.Put("22", "blinky") 342 mn.Put("3", "clyde") 343 mn.Put("44", "tinkywinky") 344 345 pg := NewPage(ca, rs).WithSizer(szr).WithMenu(mn) 346 ca.Push() 347 348 ca.Add("baz", "xyzzy", 5) 349 pg.Map("baz") 350 351 var err error 352 ctx := context.TODO() 353 r, err := pg.Render(ctx, "foo", 0) 354 if err != nil { 355 t.Fatal(err) 356 } 357 expect := `bar xyzzy 358 0:inky 359 1:pinky 360 22:blinky 361 11:next` 362 if r != expect { 363 t.Fatalf("expected:\n\t%s\ngot:\n\t%s\n", expect, r) 364 } 365 366 mn = NewMenu().WithSink().WithBrowseConfig(DefaultBrowseConfig()) 367 mn.Put("0", "inky") 368 mn.Put("1", "pinky") 369 mn.Put("22", "blinky") 370 mn.Put("3", "clyde") 371 mn.Put("44", "tinkywinky") 372 373 pg = NewPage(ca, rs).WithSizer(szr).WithMenu(mn) 374 ca.Push() 375 376 ca.Add("baz", "xyzzy", 5) 377 pg.Map("baz") 378 379 r, err = pg.Render(ctx, "foo", 1) 380 if err != nil { 381 t.Fatal(err) 382 } 383 expect = `bar xyzzy 384 3:clyde 385 44:tinkywinky 386 22:previous` 387 if r != expect { 388 t.Fatalf("expected:\n\t%s\ngot:\n\t%s\n", expect, r) 389 } 390 } 391 392