github.com/anakojm/hugo-katex@v0.0.0-20231023141351-42d6f5de9c0b/output/layouts/layout_test.go (about) 1 // Copyright 2017-present The Hugo Authors. All rights reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // http://www.apache.org/licenses/LICENSE-2.0 7 // 8 // Unless required by applicable law or agreed to in writing, software 9 // distributed under the License is distributed on an "AS IS" BASIS, 10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package layouts 15 16 import ( 17 "fmt" 18 "reflect" 19 "strings" 20 "testing" 21 22 qt "github.com/frankban/quicktest" 23 "github.com/kylelemons/godebug/diff" 24 ) 25 26 func TestLayout(t *testing.T) { 27 c := qt.New(t) 28 29 for _, this := range []struct { 30 name string 31 layoutDescriptor LayoutDescriptor 32 layoutOverride string 33 expect []string 34 }{ 35 { 36 "Home", 37 LayoutDescriptor{Kind: "home", OutputFormatName: "amp", Suffix: "html"}, 38 "", 39 []string{ 40 "index.amp.html", 41 "home.amp.html", 42 "list.amp.html", 43 "index.html", 44 "home.html", 45 "list.html", 46 "_default/index.amp.html", 47 "_default/home.amp.html", 48 "_default/list.amp.html", 49 "_default/index.html", 50 "_default/home.html", 51 "_default/list.html", 52 }, 53 }, 54 { 55 "Home baseof", 56 LayoutDescriptor{Kind: "home", Baseof: true, OutputFormatName: "amp", Suffix: "html"}, 57 "", 58 []string{ 59 "index-baseof.amp.html", 60 "home-baseof.amp.html", 61 "list-baseof.amp.html", 62 "baseof.amp.html", 63 "index-baseof.html", 64 "home-baseof.html", 65 "list-baseof.html", 66 "baseof.html", 67 "_default/index-baseof.amp.html", 68 "_default/home-baseof.amp.html", 69 "_default/list-baseof.amp.html", 70 "_default/baseof.amp.html", 71 "_default/index-baseof.html", 72 "_default/home-baseof.html", 73 "_default/list-baseof.html", 74 "_default/baseof.html", 75 }, 76 }, 77 { 78 "Home, HTML", 79 LayoutDescriptor{Kind: "home", OutputFormatName: "html", Suffix: "html"}, 80 "", 81 // We will eventually get to index.html. This looks stuttery, but makes the lookup logic easy to understand. 82 []string{ 83 "index.html.html", 84 "home.html.html", 85 "list.html.html", 86 "index.html", 87 "home.html", 88 "list.html", 89 "_default/index.html.html", 90 "_default/home.html.html", 91 "_default/list.html.html", 92 "_default/index.html", 93 "_default/home.html", 94 "_default/list.html", 95 }, 96 }, 97 { 98 "Home, HTML, baseof", 99 LayoutDescriptor{Kind: "home", Baseof: true, OutputFormatName: "html", Suffix: "html"}, 100 "", 101 []string{ 102 "index-baseof.html.html", 103 "home-baseof.html.html", 104 "list-baseof.html.html", 105 "baseof.html.html", 106 "index-baseof.html", 107 "home-baseof.html", 108 "list-baseof.html", 109 "baseof.html", 110 "_default/index-baseof.html.html", 111 "_default/home-baseof.html.html", 112 "_default/list-baseof.html.html", 113 "_default/baseof.html.html", 114 "_default/index-baseof.html", 115 "_default/home-baseof.html", 116 "_default/list-baseof.html", 117 "_default/baseof.html", 118 }, 119 }, 120 { 121 "Home, french language", 122 LayoutDescriptor{Kind: "home", Lang: "fr", OutputFormatName: "amp", Suffix: "html"}, 123 "", 124 []string{ 125 "index.fr.amp.html", 126 "home.fr.amp.html", 127 "list.fr.amp.html", 128 "index.amp.html", 129 "home.amp.html", 130 "list.amp.html", 131 "index.fr.html", 132 "home.fr.html", 133 "list.fr.html", 134 "index.html", 135 "home.html", 136 "list.html", 137 "_default/index.fr.amp.html", 138 "_default/home.fr.amp.html", 139 "_default/list.fr.amp.html", 140 "_default/index.amp.html", 141 "_default/home.amp.html", 142 "_default/list.amp.html", 143 "_default/index.fr.html", 144 "_default/home.fr.html", 145 "_default/list.fr.html", 146 "_default/index.html", 147 "_default/home.html", 148 "_default/list.html", 149 }, 150 }, 151 { 152 "Home, no ext or delim", 153 LayoutDescriptor{Kind: "home", OutputFormatName: "nem", Suffix: ""}, 154 "", 155 []string{ 156 "index.nem", 157 "home.nem", 158 "list.nem", 159 "_default/index.nem", 160 "_default/home.nem", 161 "_default/list.nem", 162 }, 163 }, 164 { 165 "Home, no ext", 166 LayoutDescriptor{Kind: "home", OutputFormatName: "nex", Suffix: ""}, 167 "", 168 []string{ 169 "index.nex", 170 "home.nex", 171 "list.nex", 172 "_default/index.nex", 173 "_default/home.nex", 174 "_default/list.nex", 175 }, 176 }, 177 { 178 "Page, no ext or delim", 179 LayoutDescriptor{Kind: "page", OutputFormatName: "nem", Suffix: ""}, 180 "", 181 []string{"_default/single.nem"}, 182 }, 183 { 184 "Section", 185 LayoutDescriptor{Kind: "section", Section: "sect1", OutputFormatName: "amp", Suffix: "html"}, 186 "", 187 []string{ 188 "sect1/sect1.amp.html", 189 "sect1/section.amp.html", 190 "sect1/list.amp.html", 191 "sect1/sect1.html", 192 "sect1/section.html", 193 "sect1/list.html", 194 "section/sect1.amp.html", 195 "section/section.amp.html", 196 "section/list.amp.html", 197 "section/sect1.html", 198 "section/section.html", 199 "section/list.html", 200 "_default/sect1.amp.html", 201 "_default/section.amp.html", 202 "_default/list.amp.html", 203 "_default/sect1.html", 204 "_default/section.html", 205 "_default/list.html", 206 }, 207 }, 208 { 209 "Section, baseof", 210 LayoutDescriptor{Kind: "section", Section: "sect1", Baseof: true, OutputFormatName: "amp", Suffix: "html"}, 211 "", 212 []string{ 213 "sect1/sect1-baseof.amp.html", 214 "sect1/section-baseof.amp.html", 215 "sect1/list-baseof.amp.html", 216 "sect1/baseof.amp.html", 217 "sect1/sect1-baseof.html", 218 "sect1/section-baseof.html", 219 "sect1/list-baseof.html", 220 "sect1/baseof.html", 221 "section/sect1-baseof.amp.html", 222 "section/section-baseof.amp.html", 223 "section/list-baseof.amp.html", 224 "section/baseof.amp.html", 225 "section/sect1-baseof.html", 226 "section/section-baseof.html", 227 "section/list-baseof.html", 228 "section/baseof.html", 229 "_default/sect1-baseof.amp.html", 230 "_default/section-baseof.amp.html", 231 "_default/list-baseof.amp.html", 232 "_default/baseof.amp.html", 233 "_default/sect1-baseof.html", 234 "_default/section-baseof.html", 235 "_default/list-baseof.html", 236 "_default/baseof.html", 237 }, 238 }, 239 { 240 "Section, baseof, French, AMP", 241 LayoutDescriptor{Kind: "section", Section: "sect1", Lang: "fr", Baseof: true, OutputFormatName: "amp", Suffix: "html"}, 242 "", 243 []string{ 244 "sect1/sect1-baseof.fr.amp.html", 245 "sect1/section-baseof.fr.amp.html", 246 "sect1/list-baseof.fr.amp.html", 247 "sect1/baseof.fr.amp.html", 248 "sect1/sect1-baseof.amp.html", 249 "sect1/section-baseof.amp.html", 250 "sect1/list-baseof.amp.html", 251 "sect1/baseof.amp.html", 252 "sect1/sect1-baseof.fr.html", 253 "sect1/section-baseof.fr.html", 254 "sect1/list-baseof.fr.html", 255 "sect1/baseof.fr.html", 256 "sect1/sect1-baseof.html", 257 "sect1/section-baseof.html", 258 "sect1/list-baseof.html", 259 "sect1/baseof.html", 260 "section/sect1-baseof.fr.amp.html", 261 "section/section-baseof.fr.amp.html", 262 "section/list-baseof.fr.amp.html", 263 "section/baseof.fr.amp.html", 264 "section/sect1-baseof.amp.html", 265 "section/section-baseof.amp.html", 266 "section/list-baseof.amp.html", 267 "section/baseof.amp.html", 268 "section/sect1-baseof.fr.html", 269 "section/section-baseof.fr.html", 270 "section/list-baseof.fr.html", 271 "section/baseof.fr.html", 272 "section/sect1-baseof.html", 273 "section/section-baseof.html", 274 "section/list-baseof.html", 275 "section/baseof.html", 276 "_default/sect1-baseof.fr.amp.html", 277 "_default/section-baseof.fr.amp.html", 278 "_default/list-baseof.fr.amp.html", 279 "_default/baseof.fr.amp.html", 280 "_default/sect1-baseof.amp.html", 281 "_default/section-baseof.amp.html", 282 "_default/list-baseof.amp.html", 283 "_default/baseof.amp.html", 284 "_default/sect1-baseof.fr.html", 285 "_default/section-baseof.fr.html", 286 "_default/list-baseof.fr.html", 287 "_default/baseof.fr.html", 288 "_default/sect1-baseof.html", 289 "_default/section-baseof.html", 290 "_default/list-baseof.html", 291 "_default/baseof.html", 292 }, 293 }, 294 { 295 "Section with layout", 296 LayoutDescriptor{Kind: "section", Section: "sect1", Layout: "mylayout", OutputFormatName: "amp", Suffix: "html"}, 297 "", 298 []string{ 299 "sect1/mylayout.amp.html", 300 "sect1/sect1.amp.html", 301 "sect1/section.amp.html", 302 "sect1/list.amp.html", 303 "sect1/mylayout.html", 304 "sect1/sect1.html", 305 "sect1/section.html", 306 "sect1/list.html", 307 "section/mylayout.amp.html", 308 "section/sect1.amp.html", 309 "section/section.amp.html", 310 "section/list.amp.html", 311 "section/mylayout.html", 312 "section/sect1.html", 313 "section/section.html", 314 "section/list.html", 315 "_default/mylayout.amp.html", 316 "_default/sect1.amp.html", 317 "_default/section.amp.html", 318 "_default/list.amp.html", 319 "_default/mylayout.html", 320 "_default/sect1.html", 321 "_default/section.html", 322 "_default/list.html", 323 }, 324 }, 325 { 326 "Term, French, AMP", 327 LayoutDescriptor{Kind: "term", Section: "tags", Lang: "fr", OutputFormatName: "amp", Suffix: "html"}, 328 "", 329 []string{ 330 "term/term.fr.amp.html", 331 "term/tags.fr.amp.html", 332 "term/taxonomy.fr.amp.html", 333 "term/list.fr.amp.html", 334 "term/term.amp.html", 335 "term/tags.amp.html", 336 "term/taxonomy.amp.html", 337 "term/list.amp.html", 338 "term/term.fr.html", 339 "term/tags.fr.html", 340 "term/taxonomy.fr.html", 341 "term/list.fr.html", 342 "term/term.html", 343 "term/tags.html", 344 "term/taxonomy.html", 345 "term/list.html", 346 "taxonomy/term.fr.amp.html", 347 "taxonomy/tags.fr.amp.html", 348 "taxonomy/taxonomy.fr.amp.html", 349 "taxonomy/list.fr.amp.html", 350 "taxonomy/term.amp.html", 351 "taxonomy/tags.amp.html", 352 "taxonomy/taxonomy.amp.html", 353 "taxonomy/list.amp.html", 354 "taxonomy/term.fr.html", 355 "taxonomy/tags.fr.html", 356 "taxonomy/taxonomy.fr.html", 357 "taxonomy/list.fr.html", 358 "taxonomy/term.html", 359 "taxonomy/tags.html", 360 "taxonomy/taxonomy.html", 361 "taxonomy/list.html", 362 "tags/term.fr.amp.html", 363 "tags/tags.fr.amp.html", 364 "tags/taxonomy.fr.amp.html", 365 "tags/list.fr.amp.html", 366 "tags/term.amp.html", 367 "tags/tags.amp.html", 368 "tags/taxonomy.amp.html", 369 "tags/list.amp.html", 370 "tags/term.fr.html", 371 "tags/tags.fr.html", 372 "tags/taxonomy.fr.html", 373 "tags/list.fr.html", 374 "tags/term.html", 375 "tags/tags.html", 376 "tags/taxonomy.html", 377 "tags/list.html", 378 "_default/term.fr.amp.html", 379 "_default/tags.fr.amp.html", 380 "_default/taxonomy.fr.amp.html", 381 "_default/list.fr.amp.html", 382 "_default/term.amp.html", 383 "_default/tags.amp.html", 384 "_default/taxonomy.amp.html", 385 "_default/list.amp.html", 386 "_default/term.fr.html", 387 "_default/tags.fr.html", 388 "_default/taxonomy.fr.html", 389 "_default/list.fr.html", 390 "_default/term.html", 391 "_default/tags.html", 392 "_default/taxonomy.html", 393 "_default/list.html", 394 }, 395 }, 396 { 397 "Term, baseof, French, AMP", 398 LayoutDescriptor{Kind: "term", Section: "tags", Lang: "fr", Baseof: true, OutputFormatName: "amp", Suffix: "html"}, 399 "", 400 []string{ 401 "term/term-baseof.fr.amp.html", 402 "term/tags-baseof.fr.amp.html", 403 "term/taxonomy-baseof.fr.amp.html", 404 "term/list-baseof.fr.amp.html", 405 "term/baseof.fr.amp.html", 406 "term/term-baseof.amp.html", 407 "term/tags-baseof.amp.html", 408 "term/taxonomy-baseof.amp.html", 409 "term/list-baseof.amp.html", 410 "term/baseof.amp.html", 411 "term/term-baseof.fr.html", 412 "term/tags-baseof.fr.html", 413 "term/taxonomy-baseof.fr.html", 414 "term/list-baseof.fr.html", 415 "term/baseof.fr.html", 416 "term/term-baseof.html", 417 "term/tags-baseof.html", 418 "term/taxonomy-baseof.html", 419 "term/list-baseof.html", 420 "term/baseof.html", 421 "taxonomy/term-baseof.fr.amp.html", 422 "taxonomy/tags-baseof.fr.amp.html", 423 "taxonomy/taxonomy-baseof.fr.amp.html", 424 "taxonomy/list-baseof.fr.amp.html", 425 "taxonomy/baseof.fr.amp.html", 426 "taxonomy/term-baseof.amp.html", 427 "taxonomy/tags-baseof.amp.html", 428 "taxonomy/taxonomy-baseof.amp.html", 429 "taxonomy/list-baseof.amp.html", 430 "taxonomy/baseof.amp.html", 431 "taxonomy/term-baseof.fr.html", 432 "taxonomy/tags-baseof.fr.html", 433 "taxonomy/taxonomy-baseof.fr.html", 434 "taxonomy/list-baseof.fr.html", 435 "taxonomy/baseof.fr.html", 436 "taxonomy/term-baseof.html", 437 "taxonomy/tags-baseof.html", 438 "taxonomy/taxonomy-baseof.html", 439 "taxonomy/list-baseof.html", 440 "taxonomy/baseof.html", 441 "tags/term-baseof.fr.amp.html", 442 "tags/tags-baseof.fr.amp.html", 443 "tags/taxonomy-baseof.fr.amp.html", 444 "tags/list-baseof.fr.amp.html", 445 "tags/baseof.fr.amp.html", 446 "tags/term-baseof.amp.html", 447 "tags/tags-baseof.amp.html", 448 "tags/taxonomy-baseof.amp.html", 449 "tags/list-baseof.amp.html", 450 "tags/baseof.amp.html", 451 "tags/term-baseof.fr.html", 452 "tags/tags-baseof.fr.html", 453 "tags/taxonomy-baseof.fr.html", 454 "tags/list-baseof.fr.html", 455 "tags/baseof.fr.html", 456 "tags/term-baseof.html", 457 "tags/tags-baseof.html", 458 "tags/taxonomy-baseof.html", 459 "tags/list-baseof.html", 460 "tags/baseof.html", 461 "_default/term-baseof.fr.amp.html", 462 "_default/tags-baseof.fr.amp.html", 463 "_default/taxonomy-baseof.fr.amp.html", 464 "_default/list-baseof.fr.amp.html", 465 "_default/baseof.fr.amp.html", 466 "_default/term-baseof.amp.html", 467 "_default/tags-baseof.amp.html", 468 "_default/taxonomy-baseof.amp.html", 469 "_default/list-baseof.amp.html", 470 "_default/baseof.amp.html", 471 "_default/term-baseof.fr.html", 472 "_default/tags-baseof.fr.html", 473 "_default/taxonomy-baseof.fr.html", 474 "_default/list-baseof.fr.html", 475 "_default/baseof.fr.html", 476 "_default/term-baseof.html", 477 "_default/tags-baseof.html", 478 "_default/taxonomy-baseof.html", 479 "_default/list-baseof.html", 480 "_default/baseof.html", 481 }, 482 }, 483 { 484 "Term", 485 LayoutDescriptor{Kind: "term", Section: "tags", OutputFormatName: "amp", Suffix: "html"}, 486 "", 487 []string{ 488 "term/term.amp.html", 489 "term/tags.amp.html", 490 "term/taxonomy.amp.html", 491 "term/list.amp.html", 492 "term/term.html", 493 "term/tags.html", 494 "term/taxonomy.html", 495 "term/list.html", 496 "taxonomy/term.amp.html", 497 "taxonomy/tags.amp.html", 498 "taxonomy/taxonomy.amp.html", 499 "taxonomy/list.amp.html", 500 "taxonomy/term.html", 501 "taxonomy/tags.html", 502 "taxonomy/taxonomy.html", 503 "taxonomy/list.html", 504 "tags/term.amp.html", 505 "tags/tags.amp.html", 506 "tags/taxonomy.amp.html", 507 "tags/list.amp.html", 508 "tags/term.html", 509 "tags/tags.html", 510 "tags/taxonomy.html", 511 "tags/list.html", 512 "_default/term.amp.html", 513 "_default/tags.amp.html", 514 "_default/taxonomy.amp.html", 515 "_default/list.amp.html", 516 "_default/term.html", 517 "_default/tags.html", 518 "_default/taxonomy.html", 519 "_default/list.html", 520 }, 521 }, 522 { 523 "Taxonomy", 524 LayoutDescriptor{Kind: "taxonomy", Section: "categories", OutputFormatName: "amp", Suffix: "html"}, 525 "", 526 []string{ 527 "categories/categories.terms.amp.html", 528 "categories/terms.amp.html", 529 "categories/taxonomy.amp.html", 530 "categories/list.amp.html", 531 "categories/categories.terms.html", 532 "categories/terms.html", 533 "categories/taxonomy.html", 534 "categories/list.html", 535 "taxonomy/categories.terms.amp.html", 536 "taxonomy/terms.amp.html", 537 "taxonomy/taxonomy.amp.html", 538 "taxonomy/list.amp.html", 539 "taxonomy/categories.terms.html", 540 "taxonomy/terms.html", 541 "taxonomy/taxonomy.html", 542 "taxonomy/list.html", 543 "_default/categories.terms.amp.html", 544 "_default/terms.amp.html", 545 "_default/taxonomy.amp.html", 546 "_default/list.amp.html", 547 "_default/categories.terms.html", 548 "_default/terms.html", 549 "_default/taxonomy.html", 550 "_default/list.html", 551 }, 552 }, 553 { 554 "Page", 555 LayoutDescriptor{Kind: "page", OutputFormatName: "amp", Suffix: "html"}, 556 "", 557 []string{ 558 "_default/single.amp.html", 559 "_default/single.html", 560 }, 561 }, 562 { 563 "Page, baseof", 564 LayoutDescriptor{Kind: "page", Baseof: true, OutputFormatName: "amp", Suffix: "html"}, 565 "", 566 []string{ 567 "_default/single-baseof.amp.html", 568 "_default/baseof.amp.html", 569 "_default/single-baseof.html", 570 "_default/baseof.html", 571 }, 572 }, 573 { 574 "Page with layout", 575 LayoutDescriptor{Kind: "page", Layout: "mylayout", OutputFormatName: "amp", Suffix: "html"}, 576 "", 577 []string{ 578 "_default/mylayout.amp.html", 579 "_default/single.amp.html", 580 "_default/mylayout.html", 581 "_default/single.html", 582 }, 583 }, 584 { 585 "Page with layout, baseof", 586 LayoutDescriptor{Kind: "page", Layout: "mylayout", Baseof: true, OutputFormatName: "amp", Suffix: "html"}, 587 "", 588 []string{ 589 "_default/mylayout-baseof.amp.html", 590 "_default/single-baseof.amp.html", 591 "_default/baseof.amp.html", 592 "_default/mylayout-baseof.html", 593 "_default/single-baseof.html", 594 "_default/baseof.html", 595 }, 596 }, 597 { 598 "Page with layout and type", 599 LayoutDescriptor{Kind: "page", Layout: "mylayout", Type: "myttype", OutputFormatName: "amp", Suffix: "html"}, 600 "", 601 []string{ 602 "myttype/mylayout.amp.html", 603 "myttype/single.amp.html", 604 "myttype/mylayout.html", 605 "myttype/single.html", 606 "_default/mylayout.amp.html", 607 "_default/single.amp.html", 608 "_default/mylayout.html", 609 "_default/single.html", 610 }, 611 }, 612 { 613 "Page baseof with layout and type", 614 LayoutDescriptor{Kind: "page", Layout: "mylayout", Type: "myttype", Baseof: true, OutputFormatName: "amp", Suffix: "html"}, 615 "", 616 []string{ 617 "myttype/mylayout-baseof.amp.html", 618 "myttype/single-baseof.amp.html", 619 "myttype/baseof.amp.html", 620 "myttype/mylayout-baseof.html", 621 "myttype/single-baseof.html", 622 "myttype/baseof.html", 623 "_default/mylayout-baseof.amp.html", 624 "_default/single-baseof.amp.html", 625 "_default/baseof.amp.html", 626 "_default/mylayout-baseof.html", 627 "_default/single-baseof.html", 628 "_default/baseof.html", 629 }, 630 }, 631 { 632 "Page baseof with layout and type in French", 633 LayoutDescriptor{Kind: "page", Layout: "mylayout", Type: "myttype", Lang: "fr", Baseof: true, OutputFormatName: "amp", Suffix: "html"}, 634 "", 635 []string{ 636 "myttype/mylayout-baseof.fr.amp.html", 637 "myttype/single-baseof.fr.amp.html", 638 "myttype/baseof.fr.amp.html", 639 "myttype/mylayout-baseof.amp.html", 640 "myttype/single-baseof.amp.html", 641 "myttype/baseof.amp.html", 642 "myttype/mylayout-baseof.fr.html", 643 "myttype/single-baseof.fr.html", 644 "myttype/baseof.fr.html", 645 "myttype/mylayout-baseof.html", 646 "myttype/single-baseof.html", 647 "myttype/baseof.html", 648 "_default/mylayout-baseof.fr.amp.html", 649 "_default/single-baseof.fr.amp.html", 650 "_default/baseof.fr.amp.html", 651 "_default/mylayout-baseof.amp.html", 652 "_default/single-baseof.amp.html", 653 "_default/baseof.amp.html", 654 "_default/mylayout-baseof.fr.html", 655 "_default/single-baseof.fr.html", 656 "_default/baseof.fr.html", 657 "_default/mylayout-baseof.html", 658 "_default/single-baseof.html", 659 "_default/baseof.html", 660 }, 661 }, 662 { 663 "Page with layout and type with subtype", 664 LayoutDescriptor{Kind: "page", Layout: "mylayout", Type: "myttype/mysubtype", OutputFormatName: "amp", Suffix: "html"}, 665 "", 666 []string{ 667 "myttype/mysubtype/mylayout.amp.html", 668 "myttype/mysubtype/single.amp.html", 669 "myttype/mysubtype/mylayout.html", 670 "myttype/mysubtype/single.html", 671 "_default/mylayout.amp.html", 672 "_default/single.amp.html", 673 "_default/mylayout.html", 674 "_default/single.html", 675 }, 676 }, 677 // RSS 678 { 679 "RSS Home", 680 LayoutDescriptor{Kind: "home", OutputFormatName: "rss", Suffix: "xml"}, 681 "", 682 []string{ 683 "index.rss.xml", 684 "home.rss.xml", 685 "rss.xml", 686 "list.rss.xml", 687 "index.xml", 688 "home.xml", 689 "list.xml", 690 "_default/index.rss.xml", 691 "_default/home.rss.xml", 692 "_default/rss.xml", 693 "_default/list.rss.xml", 694 "_default/index.xml", 695 "_default/home.xml", 696 "_default/list.xml", 697 "_internal/_default/rss.xml", 698 }, 699 }, 700 { 701 "RSS Home, baseof", 702 LayoutDescriptor{Kind: "home", Baseof: true, OutputFormatName: "rss", Suffix: "xml"}, 703 "", 704 []string{ 705 "index-baseof.rss.xml", 706 "home-baseof.rss.xml", 707 "list-baseof.rss.xml", 708 "baseof.rss.xml", 709 "index-baseof.xml", 710 "home-baseof.xml", 711 "list-baseof.xml", 712 "baseof.xml", 713 "_default/index-baseof.rss.xml", 714 "_default/home-baseof.rss.xml", 715 "_default/list-baseof.rss.xml", 716 "_default/baseof.rss.xml", 717 "_default/index-baseof.xml", 718 "_default/home-baseof.xml", 719 "_default/list-baseof.xml", 720 "_default/baseof.xml", 721 }, 722 }, 723 { 724 "RSS Section", 725 LayoutDescriptor{Kind: "section", Section: "sect1", OutputFormatName: "rss", Suffix: "xml"}, 726 "", 727 []string{ 728 "sect1/sect1.rss.xml", 729 "sect1/section.rss.xml", 730 "sect1/rss.xml", 731 "sect1/list.rss.xml", 732 "sect1/sect1.xml", 733 "sect1/section.xml", 734 "sect1/list.xml", 735 "section/sect1.rss.xml", 736 "section/section.rss.xml", 737 "section/rss.xml", 738 "section/list.rss.xml", 739 "section/sect1.xml", 740 "section/section.xml", 741 "section/list.xml", 742 "_default/sect1.rss.xml", 743 "_default/section.rss.xml", 744 "_default/rss.xml", 745 "_default/list.rss.xml", 746 "_default/sect1.xml", 747 "_default/section.xml", 748 "_default/list.xml", 749 "_internal/_default/rss.xml", 750 }, 751 }, 752 { 753 "RSS Term", 754 LayoutDescriptor{Kind: "term", Section: "tag", OutputFormatName: "rss", Suffix: "xml"}, 755 "", 756 []string{ 757 "term/term.rss.xml", 758 "term/tag.rss.xml", 759 "term/taxonomy.rss.xml", 760 "term/rss.xml", 761 "term/list.rss.xml", 762 "term/term.xml", 763 "term/tag.xml", 764 "term/taxonomy.xml", 765 "term/list.xml", 766 "taxonomy/term.rss.xml", 767 "taxonomy/tag.rss.xml", 768 "taxonomy/taxonomy.rss.xml", 769 "taxonomy/rss.xml", 770 "taxonomy/list.rss.xml", 771 "taxonomy/term.xml", 772 "taxonomy/tag.xml", 773 "taxonomy/taxonomy.xml", 774 "taxonomy/list.xml", 775 "tag/term.rss.xml", 776 "tag/tag.rss.xml", 777 "tag/taxonomy.rss.xml", 778 "tag/rss.xml", 779 "tag/list.rss.xml", 780 "tag/term.xml", 781 "tag/tag.xml", 782 "tag/taxonomy.xml", 783 "tag/list.xml", 784 "_default/term.rss.xml", 785 "_default/tag.rss.xml", 786 "_default/taxonomy.rss.xml", 787 "_default/rss.xml", 788 "_default/list.rss.xml", 789 "_default/term.xml", 790 "_default/tag.xml", 791 "_default/taxonomy.xml", 792 "_default/list.xml", 793 "_internal/_default/rss.xml", 794 }, 795 }, 796 { 797 "RSS Taxonomy", 798 LayoutDescriptor{Kind: "taxonomy", Section: "tag", OutputFormatName: "rss", Suffix: "xml"}, 799 "", 800 []string{ 801 "tag/tag.terms.rss.xml", 802 "tag/terms.rss.xml", 803 "tag/taxonomy.rss.xml", 804 "tag/rss.xml", 805 "tag/list.rss.xml", 806 "tag/tag.terms.xml", 807 "tag/terms.xml", 808 "tag/taxonomy.xml", 809 "tag/list.xml", 810 "taxonomy/tag.terms.rss.xml", 811 "taxonomy/terms.rss.xml", 812 "taxonomy/taxonomy.rss.xml", 813 "taxonomy/rss.xml", 814 "taxonomy/list.rss.xml", 815 "taxonomy/tag.terms.xml", 816 "taxonomy/terms.xml", 817 "taxonomy/taxonomy.xml", 818 "taxonomy/list.xml", 819 "_default/tag.terms.rss.xml", 820 "_default/terms.rss.xml", 821 "_default/taxonomy.rss.xml", 822 "_default/rss.xml", 823 "_default/list.rss.xml", 824 "_default/tag.terms.xml", 825 "_default/terms.xml", 826 "_default/taxonomy.xml", 827 "_default/list.xml", 828 "_internal/_default/rss.xml", 829 }, 830 }, 831 { 832 "Home plain text", 833 LayoutDescriptor{Kind: "home", OutputFormatName: "json", Suffix: "json"}, 834 "", 835 []string{ 836 "index.json.json", 837 "home.json.json", 838 "list.json.json", 839 "index.json", 840 "home.json", 841 "list.json", 842 "_default/index.json.json", 843 "_default/home.json.json", 844 "_default/list.json.json", 845 "_default/index.json", 846 "_default/home.json", 847 "_default/list.json", 848 }, 849 }, 850 { 851 "Page plain text", 852 LayoutDescriptor{Kind: "page", OutputFormatName: "json", Suffix: "json"}, 853 "", 854 []string{ 855 "_default/single.json.json", 856 "_default/single.json", 857 }, 858 }, 859 { 860 "Reserved section, shortcodes", 861 LayoutDescriptor{Kind: "section", Section: "shortcodes", Type: "shortcodes", OutputFormatName: "amp", Suffix: "html"}, 862 "", 863 []string{ 864 "section/shortcodes.amp.html", 865 "section/section.amp.html", 866 "section/list.amp.html", 867 "section/shortcodes.html", 868 "section/section.html", 869 "section/list.html", 870 "_default/shortcodes.amp.html", 871 "_default/section.amp.html", 872 "_default/list.amp.html", 873 "_default/shortcodes.html", 874 "_default/section.html", 875 "_default/list.html", 876 }, 877 }, 878 { 879 "Reserved section, partials", 880 LayoutDescriptor{Kind: "section", Section: "partials", Type: "partials", OutputFormatName: "amp", Suffix: "html"}, 881 "", 882 []string{ 883 "section/partials.amp.html", 884 "section/section.amp.html", 885 "section/list.amp.html", 886 "section/partials.html", 887 "section/section.html", 888 "section/list.html", 889 "_default/partials.amp.html", 890 "_default/section.amp.html", 891 "_default/list.amp.html", 892 "_default/partials.html", 893 "_default/section.html", 894 "_default/list.html", 895 }, 896 }, 897 // This is currently always HTML only 898 { 899 "404, HTML", 900 LayoutDescriptor{Kind: "404", OutputFormatName: "html", Suffix: "html"}, 901 "", 902 []string{ 903 "404.html.html", 904 "404.html", 905 }, 906 }, 907 { 908 "404, HTML baseof", 909 LayoutDescriptor{Kind: "404", Baseof: true, OutputFormatName: "html", Suffix: "html"}, 910 "", 911 []string{ 912 "404-baseof.html.html", 913 "baseof.html.html", 914 "404-baseof.html", 915 "baseof.html", 916 "_default/404-baseof.html.html", 917 "_default/baseof.html.html", 918 "_default/404-baseof.html", 919 "_default/baseof.html", 920 }, 921 }, 922 { 923 "Content hook", 924 LayoutDescriptor{Kind: "render-link", RenderingHook: true, Layout: "mylayout", Section: "blog", OutputFormatName: "amp", Suffix: "html"}, 925 "", 926 []string{ 927 "blog/_markup/render-link.amp.html", 928 "blog/_markup/render-link.html", 929 "_default/_markup/render-link.amp.html", 930 "_default/_markup/render-link.html", 931 }, 932 }, 933 } { 934 c.Run(this.name, func(c *qt.C) { 935 l := NewLayoutHandler() 936 937 layouts, err := l.For(this.layoutDescriptor) 938 939 c.Assert(err, qt.IsNil) 940 c.Assert(layouts, qt.Not(qt.IsNil), qt.Commentf(this.layoutDescriptor.Kind)) 941 942 if !reflect.DeepEqual(layouts, this.expect) { 943 r := strings.NewReplacer( 944 "[", "\t\"", 945 "]", "\",", 946 " ", "\",\n\t\"", 947 ) 948 fmtGot := r.Replace(fmt.Sprintf("%v", layouts)) 949 fmtExp := r.Replace(fmt.Sprintf("%v", this.expect)) 950 951 c.Fatalf("got %d items, expected %d:\nGot:\n\t%v\nExpected:\n\t%v\nDiff:\n%s", len(layouts), len(this.expect), layouts, this.expect, diff.Diff(fmtExp, fmtGot)) 952 953 } 954 }) 955 } 956 957 } 958 959 /* 960 func BenchmarkLayout(b *testing.B) { 961 descriptor := LayoutDescriptor{Kind: "taxonomy", Section: "categories"} 962 l := NewLayoutHandler() 963 964 for i := 0; i < b.N; i++ { 965 _, err := l.For(descriptor, HTMLFormat) 966 if err != nil { 967 panic(err) 968 } 969 } 970 } 971 972 func BenchmarkLayoutUncached(b *testing.B) { 973 for i := 0; i < b.N; i++ { 974 descriptor := LayoutDescriptor{Kind: "taxonomy", Section: "categories"} 975 l := NewLayoutHandler() 976 977 _, err := l.For(descriptor, HTMLFormat) 978 if err != nil { 979 panic(err) 980 } 981 } 982 } 983 */