addons/isl/src/dag/__tests__/renderText.test.tsblame
View source
b69ab311/**
b69ab312 * Copyright (c) Meta Platforms, Inc. and affiliates.
b69ab313 *
b69ab314 * This source code is licensed under the MIT license found in the
b69ab315 * LICENSE file in the root directory of this source tree.
b69ab316 */
b69ab317
b69ab318import type {Hash} from '../../types';
b69ab319
b69ab3110import {Ancestor, AncestorType} from '../render';
b69ab3111import {TextRenderer} from '../renderText';
b69ab3112
b69ab3113/* Ported from fbcode/eden/scm/lib/renderdag/src/box_drawing.rs */
b69ab3114
b69ab3115type TestFixture = {
b69ab3116 rows: Array<[Hash, string[], string]>;
b69ab3117 reserve?: Hash[];
b69ab3118};
b69ab3119
b69ab3120/*
b69ab3121 A----B-D-----E----------F-\
b69ab3122 \-C--/ \-W \-X \-Y-Z
b69ab3123*/
b69ab3124export const TEST_ANCESTORS: TestFixture = {
b69ab3125 reserve: ['F'],
b69ab3126 rows: [
b69ab3127 ['Z', ['P:Y'], 'Z'],
b69ab3128 ['Y', ['P:F'], 'Y'],
b69ab3129 ['F', ['A:E'], 'F'],
b69ab3130 ['X', ['P:E'], 'X'],
b69ab3131 ['W', ['P:E'], 'W'],
b69ab3132 ['E', ['A:D'], 'E'],
b69ab3133 ['D', ['P:B', 'A:C'], 'D'],
b69ab3134 ['C', ['A:A'], 'C'],
b69ab3135 ['B', ['P:A'], 'B'],
b69ab3136 ['A', [], 'A'],
b69ab3137 ],
b69ab3138};
b69ab3139
b69ab3140/* A-B-C */
b69ab3141export const TEST_BASIC: TestFixture = {
b69ab3142 rows: [
b69ab3143 ['C', ['P:B'], 'C'],
b69ab3144 ['B', ['P:A'], 'B'],
b69ab3145 ['A', [], 'A'],
b69ab3146 ],
b69ab3147};
b69ab3148
b69ab3149/*
b69ab3150
b69ab3151 T /---------------N--O---\ T
b69ab3152 / / \ \
b69ab3153 /----E-F-\ /-------L--M--------P--\ S--U---\
b69ab3154 A-B-C-D------G--H--I--J--K---------------Q--R---------V--W
b69ab3155 \--N
b69ab3156
b69ab3157*/
b69ab3158export const TEST_BRANCHES_AND_MERGES: TestFixture = {
b69ab3159 rows: [
b69ab3160 ['W', ['P:V'], 'W'],
b69ab3161 ['V', ['P:R', 'P:U'], 'V'],
b69ab3162 ['U', ['P:S', 'P:T'], 'U'],
b69ab3163 ['T', ['P:E'], 'T'],
b69ab3164 ['S', [], 'S'],
b69ab3165 ['R', ['P:Q'], 'R'],
b69ab3166 ['Q', ['P:K', 'P:P'], 'Q'],
b69ab3167 ['P', ['P:M', 'P:O'], 'P'],
b69ab3168 ['O', ['P:N'], 'O'],
b69ab3169 ['N', ['P:F', 'P:J'], 'N'],
b69ab3170 ['M', ['P:L'], 'M'],
b69ab3171 ['L', ['P:H'], 'L'],
b69ab3172 ['K', ['P:J'], 'K'],
b69ab3173 ['J', ['P:I'], 'J'],
b69ab3174 ['I', ['P:H'], 'I'],
b69ab3175 ['H', ['P:G'], 'H'],
b69ab3176 ['G', ['P:D', 'P:F'], 'G'],
b69ab3177 ['F', ['P:E'], 'F'],
b69ab3178 ['E', ['P:B'], 'E'],
b69ab3179 ['D', ['P:C'], 'D'],
b69ab3180 ['C', ['P:B'], 'C'],
b69ab3181 ['B', ['P:A'], 'B'],
b69ab3182 ['A', [], 'A'],
b69ab3183 ],
b69ab3184};
b69ab3185
b69ab3186/*
b69ab3187
b69ab3188 K
b69ab3189 /|
b69ab3190 F J
b69ab3191 / /|
b69ab3192 | E I
b69ab3193 |/ /|
b69ab3194 | D H
b69ab3195 |/ /|
b69ab3196 | C G
b69ab3197 |/ /|
b69ab3198 | B Z
b69ab3199 |/
b69ab31100 A
b69ab31101
b69ab31102*/
b69ab31103export const TEST_DIFFERENT_ORDERS1: TestFixture = {
b69ab31104 rows: [
b69ab31105 ['K', ['P:F', 'P:J'], 'K'],
b69ab31106 ['J', ['P:E', 'P:I'], 'J'],
b69ab31107 ['I', ['P:D', 'P:H'], 'I'],
b69ab31108 ['H', ['P:C', 'P:G'], 'H'],
b69ab31109 ['G', ['P:B', 'P:Z'], 'G'],
b69ab31110 ['F', ['P:A'], 'F'],
b69ab31111 ['E', ['P:A'], 'E'],
b69ab31112 ['D', ['P:A'], 'D'],
b69ab31113 ['C', ['P:A'], 'C'],
b69ab31114 ['B', ['P:A'], 'B'],
b69ab31115 ['Z', [], 'Z'],
b69ab31116 ['A', [], 'A'],
b69ab31117 ],
b69ab31118};
b69ab31119
b69ab31120export const TEST_DIFFERENT_ORDERS2: TestFixture = {
b69ab31121 rows: [
b69ab31122 ['K', ['P:F', 'P:J'], 'K'],
b69ab31123 ['J', ['P:E', 'P:I'], 'J'],
b69ab31124 ['I', ['P:D', 'P:H'], 'I'],
b69ab31125 ['H', ['P:C', 'P:G'], 'H'],
b69ab31126 ['G', ['P:B', 'P:Z'], 'G'],
b69ab31127 ['Z', [], 'Z'],
b69ab31128 ['B', ['P:A'], 'B'],
b69ab31129 ['C', ['P:A'], 'C'],
b69ab31130 ['D', ['P:A'], 'D'],
b69ab31131 ['E', ['P:A'], 'E'],
b69ab31132 ['F', ['P:A'], 'F'],
b69ab31133 ['A', [], 'A'],
b69ab31134 ],
b69ab31135};
b69ab31136
b69ab31137export const TEST_DIFFERENT_ORDERS3: TestFixture = {
b69ab31138 rows: [
b69ab31139 ['K', ['P:F', 'P:J'], 'K'],
b69ab31140 ['J', ['P:A'], 'J'],
b69ab31141 ['F', ['P:E', 'P:I'], 'F'],
b69ab31142 ['I', ['P:A'], 'I'],
b69ab31143 ['E', ['P:D', 'P:H'], 'E'],
b69ab31144 ['H', ['P:A'], 'H'],
b69ab31145 ['D', ['P:C', 'P:G'], 'D'],
b69ab31146 ['G', ['P:A'], 'G'],
b69ab31147 ['C', ['P:B', 'P:Z'], 'C'],
b69ab31148 ['Z', [], 'Z'],
b69ab31149 ['B', ['P:A'], 'B'],
b69ab31150 ['A', [], 'A'],
b69ab31151 ],
b69ab31152};
b69ab31153
b69ab31154export const TEST_DIFFERENT_ORDERS4: TestFixture = {
b69ab31155 rows: [
b69ab31156 ['K', ['P:F', 'P:J'], 'K'],
b69ab31157 ['F', ['P:A'], 'F'],
b69ab31158 ['J', ['P:E', 'P:I'], 'J'],
b69ab31159 ['E', ['P:A'], 'E'],
b69ab31160 ['I', ['P:D', 'P:H'], 'I'],
b69ab31161 ['D', ['P:A'], 'D'],
b69ab31162 ['H', ['P:C', 'P:G'], 'H'],
b69ab31163 ['C', ['P:A'], 'C'],
b69ab31164 ['G', ['P:B', 'P:Z'], 'G'],
b69ab31165 ['Z', [], 'Z'],
b69ab31166 ['B', ['P:A'], 'B'],
b69ab31167 ['A', [], 'A'],
b69ab31168 ],
b69ab31169};
b69ab31170
b69ab31171/*
b69ab31172
b69ab31173 Y-\
b69ab31174 Z-A-B-D-E-F
b69ab31175 \-C-/
b69ab31176
b69ab31177*/
b69ab31178export const TEST_LONG_MESSAGES: TestFixture = {
b69ab31179 rows: [
b69ab31180 [
b69ab31181 'F',
b69ab31182 ['P:C', 'P:E', '~'],
b69ab31183 'F\nvery long message 1\nvery long message 2\nvery long message 3\n\nvery long message 4\nvery long message 5\nvery long message 6\n\n',
b69ab31184 ],
b69ab31185 ['E', ['P:D'], 'E'],
b69ab31186 ['D', ['P:B'], 'D'],
b69ab31187 ['C', ['P:B'], 'C\nlong message 1\nlong message 2\nlong message 3\n\n'],
b69ab31188 ['B', ['P:A'], 'B'],
b69ab31189 ['A', ['~'], 'A\nlong message 1\nlong message 2\nlong message 3\n\n'],
b69ab31190 ],
b69ab31191};
b69ab31192
b69ab31193/*
b69ab31194
b69ab31195 /-----\
b69ab31196 / \
b69ab31197 D /--C--\ I
b69ab31198 / /---D---\ \
b69ab31199 A-B----E----H-J
b69ab31200 \---F---/ /
b69ab31201 \--G--/ F
b69ab31202
b69ab31203*/
b69ab31204export const TEST_OCTOPUS_BRANCH_AND_MERGE: TestFixture = {
b69ab31205 rows: [
b69ab31206 ['J', ['P:F', 'P:H', 'P:I'], 'J'],
b69ab31207 ['I', ['P:D'], 'I'],
b69ab31208 ['H', ['P:C', 'P:D', 'P:E', 'P:F', 'P:G'], 'H'],
b69ab31209 ['G', ['P:B'], 'G'],
b69ab31210 ['E', ['P:B'], 'E'],
b69ab31211 ['D', ['P:A', 'P:B'], 'D'],
b69ab31212 ['C', ['P:B'], 'C'],
b69ab31213 ['F', ['P:B'], 'F'],
b69ab31214 ['B', ['P:A'], 'B'],
b69ab31215 ['A', [], 'A'],
b69ab31216 ],
b69ab31217};
b69ab31218
b69ab31219/*
b69ab31220
b69ab31221 A-B-C-F-G----\
b69ab31222 D-E-/ \-W \-X-Y-Z
b69ab31223
b69ab31224*/
b69ab31225export const TEST_RESERVED_COLUMN: TestFixture = {
b69ab31226 reserve: ['G'],
b69ab31227 rows: [
b69ab31228 ['Z', ['P:Y'], 'Z'],
b69ab31229 ['Y', ['P:X'], 'Y'],
b69ab31230 ['X', ['P:G'], 'X'],
b69ab31231 ['W', ['P:G'], 'W'],
b69ab31232 ['G', ['P:F'], 'G'],
b69ab31233 ['F', ['P:C', 'P:E'], 'F'],
b69ab31234 ['E', ['P:D'], 'E'],
b69ab31235 ['D', [], 'D'],
b69ab31236 ['C', ['P:B'], 'C'],
b69ab31237 ['B', ['P:A'], 'B'],
b69ab31238 ['A', [], 'A'],
b69ab31239 ],
b69ab31240};
b69ab31241
b69ab31242/*
b69ab31243
b69ab31244 /-B-\ A-\
b69ab31245 A D-E B--E
b69ab31246 \-C-/ C-/
b69ab31247
b69ab31248*/
b69ab31249export const TEST_SPLIT_PARENTS: TestFixture = {
b69ab31250 reserve: ['B', 'D', 'C'],
b69ab31251 rows: [
b69ab31252 ['E', ['A:A', 'A:B', 'P:C', 'P:D'], 'E'],
b69ab31253 ['D', ['P:B', 'P:C'], 'D'],
b69ab31254 ['C', ['P:A'], 'C'],
b69ab31255 ['B', ['P:A'], 'B'],
b69ab31256 ['A', [], 'A'],
b69ab31257 ],
b69ab31258};
b69ab31259
b69ab31260/*
b69ab31261
b69ab31262 A-B-C D-E-\
b69ab31263 F---I--J
b69ab31264 X-D-H-/ \-K
b69ab31265
b69ab31266*/
b69ab31267export const TEST_TERMINATIONS: TestFixture = {
b69ab31268 reserve: ['E'],
b69ab31269 rows: [
b69ab31270 ['K', ['P:I'], 'K'],
b69ab31271 ['J', ['P:I'], 'J'],
b69ab31272 ['I', ['P:E', '~', 'P:H'], 'I'],
b69ab31273 ['E', ['P:D'], 'E'],
b69ab31274 ['H', ['P:D'], 'H'],
b69ab31275 ['D', ['~'], 'D'],
b69ab31276 ['C', ['P:B'], 'C'],
b69ab31277 ['B', ['~'], 'B'],
b69ab31278 ],
b69ab31279};
b69ab31280
b69ab31281describe('renderText', () => {
b69ab31282 it('renders TEST_ANCESTORS', () => {
b69ab31283 expect(render(TEST_ANCESTORS)).toMatchInlineSnapshot(`
b69ab31284 "
b69ab31285 o Z
b69ab31286 │
b69ab31287 o Y
b69ab31288 │
b69ab31289 ╭─╯
b69ab31290 o F
b69ab31291 │
b69ab31292 :
b69ab31293 │ o X
b69ab31294 │ │
b69ab31295 ├─╯
b69ab31296 │ o W
b69ab31297 │ │
b69ab31298 ├─╯
b69ab31299 o E
b69ab31300 │
b69ab31301 :
b69ab31302 o D
b69ab31303 │
b69ab31304 ├─╮
b69ab31305 │ :
b69ab31306 │ o C
b69ab31307 │ │
b69ab31308 │ :
b69ab31309 o │ B
b69ab31310 │ │
b69ab31311 ├─╯
b69ab31312 o A"
b69ab31313 `);
b69ab31314 });
b69ab31315
b69ab31316 it('renders TEST_BASIC', () => {
b69ab31317 expect(render(TEST_BASIC)).toMatchInlineSnapshot(`
b69ab31318 "
b69ab31319 o C
b69ab31320 │
b69ab31321 o B
b69ab31322 │
b69ab31323 o A"
b69ab31324 `);
b69ab31325 });
b69ab31326
b69ab31327 it('renders TEST_BRANCHES_AND_MERGES', () => {
b69ab31328 expect(render(TEST_BRANCHES_AND_MERGES)).toMatchInlineSnapshot(`
b69ab31329 "
b69ab31330 o W
b69ab31331 │
b69ab31332 o V
b69ab31333 │
b69ab31334 ├─╮
b69ab31335 │ o U
b69ab31336 │ │
b69ab31337 │ ├─╮
b69ab31338 │ │ o T
b69ab31339 │ │ │
b69ab31340 │ o │ S
b69ab31341 │ │
b69ab31342 o │ R
b69ab31343 │ │
b69ab31344 o │ Q
b69ab31345 │ │
b69ab31346 ├─╮ │
b69ab31347 │ o │ P
b69ab31348 │ │ │
b69ab31349 │ ├───╮
b69ab31350 │ │ │ o O
b69ab31351 │ │ │ │
b69ab31352 │ │ │ o N
b69ab31353 │ │ │ │
b69ab31354 │ │ │ ├─╮
b69ab31355 │ o │ │ │ M
b69ab31356 │ │ │ │ │
b69ab31357 │ o │ │ │ L
b69ab31358 │ │ │ │ │
b69ab31359 o │ │ │ │ K
b69ab31360 │ │ │ │ │
b69ab31361 ├───────╯
b69ab31362 o │ │ │ J
b69ab31363 │ │ │ │
b69ab31364 o │ │ │ I
b69ab31365 │ │ │ │
b69ab31366 ├─╯ │ │
b69ab31367 o │ │ H
b69ab31368 │ │ │
b69ab31369 o │ │ G
b69ab31370 │ │ │
b69ab31371 ├─────╮
b69ab31372 │ │ o F
b69ab31373 │ │ │
b69ab31374 │ ├─╯
b69ab31375 │ o E
b69ab31376 │ │
b69ab31377 o │ D
b69ab31378 │ │
b69ab31379 o │ C
b69ab31380 │ │
b69ab31381 ├───╯
b69ab31382 o B
b69ab31383 │
b69ab31384 o A"
b69ab31385 `);
b69ab31386 });
b69ab31387
b69ab31388 it('renders TEST_DIFFERENT_ORDERS1', () => {
b69ab31389 expect(render(TEST_DIFFERENT_ORDERS1)).toMatchInlineSnapshot(`
b69ab31390 "
b69ab31391 o K
b69ab31392 │
b69ab31393 ├─╮
b69ab31394 │ o J
b69ab31395 │ │
b69ab31396 │ ├─╮
b69ab31397 │ │ o I
b69ab31398 │ │ │
b69ab31399 │ │ ├─╮
b69ab31400 │ │ │ o H
b69ab31401 │ │ │ │
b69ab31402 │ │ │ ├─╮
b69ab31403 │ │ │ │ o G
b69ab31404 │ │ │ │ │
b69ab31405 │ │ │ │ ├─╮
b69ab31406 o │ │ │ │ │ F
b69ab31407 │ │ │ │ │ │
b69ab31408 │ o │ │ │ │ E
b69ab31409 │ │ │ │ │ │
b69ab31410 ├─╯ │ │ │ │
b69ab31411 │ o │ │ │ D
b69ab31412 │ │ │ │ │
b69ab31413 ├───╯ │ │ │
b69ab31414 │ o │ │ C
b69ab31415 │ │ │ │
b69ab31416 ├─────╯ │ │
b69ab31417 │ o │ B
b69ab31418 │ │ │
b69ab31419 ├───────╯ │
b69ab31420 │ o Z
b69ab31421 │
b69ab31422 o A"
b69ab31423 `);
b69ab31424 });
b69ab31425
b69ab31426 it('renders TEST_DIFFERENT_ORDERS2', () => {
b69ab31427 expect(render(TEST_DIFFERENT_ORDERS2)).toMatchInlineSnapshot(`
b69ab31428 "
b69ab31429 o K
b69ab31430 │
b69ab31431 ├─╮
b69ab31432 │ o J
b69ab31433 │ │
b69ab31434 │ ├─╮
b69ab31435 │ │ o I
b69ab31436 │ │ │
b69ab31437 │ │ ├─╮
b69ab31438 │ │ │ o H
b69ab31439 │ │ │ │
b69ab31440 │ │ │ ├─╮
b69ab31441 │ │ │ │ o G
b69ab31442 │ │ │ │ │
b69ab31443 │ │ │ │ ├─╮
b69ab31444 │ │ │ │ │ o Z
b69ab31445 │ │ │ │ │
b69ab31446 │ │ │ │ o B
b69ab31447 │ │ │ │ │
b69ab31448 │ │ │ o │ C
b69ab31449 │ │ │ │ │
b69ab31450 │ │ │ ├─╯
b69ab31451 │ │ o │ D
b69ab31452 │ │ │ │
b69ab31453 │ │ ├─╯
b69ab31454 │ o │ E
b69ab31455 │ │ │
b69ab31456 │ ├─╯
b69ab31457 o │ F
b69ab31458 │ │
b69ab31459 ├─╯
b69ab31460 o A"
b69ab31461 `);
b69ab31462 });
b69ab31463
b69ab31464 it('renders TEST_DIFFERENT_ORDERS3', () => {
b69ab31465 expect(render(TEST_DIFFERENT_ORDERS3)).toMatchInlineSnapshot(`
b69ab31466 "
b69ab31467 o K
b69ab31468 │
b69ab31469 ├─╮
b69ab31470 │ o J
b69ab31471 │ │
b69ab31472 o │ F
b69ab31473 │ │
b69ab31474 ├───╮
b69ab31475 │ │ o I
b69ab31476 │ │ │
b69ab31477 │ ├─╯
b69ab31478 o │ E
b69ab31479 │ │
b69ab31480 ├───╮
b69ab31481 │ │ o H
b69ab31482 │ │ │
b69ab31483 │ ├─╯
b69ab31484 o │ D
b69ab31485 │ │
b69ab31486 ├───╮
b69ab31487 │ │ o G
b69ab31488 │ │ │
b69ab31489 │ ├─╯
b69ab31490 o │ C
b69ab31491 │ │
b69ab31492 ├───╮
b69ab31493 │ │ o Z
b69ab31494 │ │
b69ab31495 o │ B
b69ab31496 │ │
b69ab31497 ├─╯
b69ab31498 o A"
b69ab31499 `);
b69ab31500 });
b69ab31501
b69ab31502 it('renders TEST_DIFFERENT_ORDERS4', () => {
b69ab31503 expect(render(TEST_DIFFERENT_ORDERS4)).toMatchInlineSnapshot(`
b69ab31504 "
b69ab31505 o K
b69ab31506 │
b69ab31507 ├─╮
b69ab31508 o │ F
b69ab31509 │ │
b69ab31510 │ o J
b69ab31511 │ │
b69ab31512 │ ├─╮
b69ab31513 │ o │ E
b69ab31514 │ │ │
b69ab31515 ├─╯ │
b69ab31516 │ o I
b69ab31517 │ │
b69ab31518 │ ╭─┤
b69ab31519 │ │ o D
b69ab31520 │ │ │
b69ab31521 ├───╯
b69ab31522 │ o H
b69ab31523 │ │
b69ab31524 │ ├─╮
b69ab31525 │ o │ C
b69ab31526 │ │ │
b69ab31527 ├─╯ │
b69ab31528 │ o G
b69ab31529 │ │
b69ab31530 │ ╭─┤
b69ab31531 │ o │ Z
b69ab31532 │ │
b69ab31533 │ o B
b69ab31534 │ │
b69ab31535 ├───╯
b69ab31536 o A"
b69ab31537 `);
b69ab31538 expect(render(TEST_DIFFERENT_ORDERS4, true)).toMatchInlineSnapshot(`
b69ab31539 "
b69ab31540 o K
b69ab31541 │ # top pad
b69ab31542 ├─╮ # link line
b69ab31543 │ │ # pad line
b69ab31544 --------------------
b69ab31545 o F
b69ab31546 │ # top pad
b69ab31547 │ # pad line
b69ab31548 --------------------
b69ab31549 o J
b69ab31550 │ # top pad
b69ab31551 ├─╮ # link line
b69ab31552 │ │ # pad line
b69ab31553 --------------------
b69ab31554 o E
b69ab31555 │ # top pad
b69ab31556 ╭─╯ # link line
b69ab31557 │ # pad line
b69ab31558 --------------------
b69ab31559 o I
b69ab31560 │ # top pad
b69ab31561 ╭─┤ # link line
b69ab31562 │ │ # pad line
b69ab31563 --------------------
b69ab31564 o D
b69ab31565 │ # top pad
b69ab31566 ╭───╯ # link line
b69ab31567 │ # pad line
b69ab31568 --------------------
b69ab31569 o H
b69ab31570 │ # top pad
b69ab31571 ├─╮ # link line
b69ab31572 │ │ # pad line
b69ab31573 --------------------
b69ab31574 o C
b69ab31575 │ # top pad
b69ab31576 ╭─╯ # link line
b69ab31577 │ # pad line
b69ab31578 --------------------
b69ab31579 o G
b69ab31580 │ # top pad
b69ab31581 ╭─┤ # link line
b69ab31582 │ │ # pad line
b69ab31583 --------------------
b69ab31584 o Z
b69ab31585 # top pad
b69ab31586 # pad line
b69ab31587 --------------------
b69ab31588 o B
b69ab31589 │ # top pad
b69ab31590 ╭───╯ # link line
b69ab31591 │ # pad line
b69ab31592 --------------------
b69ab31593 o A
b69ab31594 # top pad
b69ab31595 # pad line
b69ab31596 --------------------"
b69ab31597 `);
b69ab31598 });
b69ab31599
b69ab31600 it('renders TEST_LONG_MESSAGES', () => {
b69ab31601 expect(render(TEST_LONG_MESSAGES)).toMatchInlineSnapshot(`
b69ab31602 "
b69ab31603 o F
b69ab31604 │ very long message 1
b69ab31605 ├─┬─╮ very long message 2
b69ab31606 │ │ │ very long message 3
b69ab31607 │ │ ~
b69ab31608 │ │ very long message 4
b69ab31609 │ │ very long message 5
b69ab31610 │ │ very long message 6
b69ab31611 │ │
b69ab31612 │ o E
b69ab31613 │ │
b69ab31614 │ o D
b69ab31615 │ │
b69ab31616 o │ C
b69ab31617 │ │ long message 1
b69ab31618 ├─╯ long message 2
b69ab31619 │ long message 3
b69ab31620 │
b69ab31621 o B
b69ab31622 │
b69ab31623 o A
b69ab31624 │ long message 1
b69ab31625 │ long message 2
b69ab31626 ~ long message 3"
b69ab31627 `);
b69ab31628 });
b69ab31629
b69ab31630 it('renders TEST_OCTOPUS_BRANCH_AND_MERGE', () => {
b69ab31631 expect(render(TEST_OCTOPUS_BRANCH_AND_MERGE)).toMatchInlineSnapshot(`
b69ab31632 "
b69ab31633 o J
b69ab31634 │
b69ab31635 ├─┬─╮
b69ab31636 │ │ o I
b69ab31637 │ │ │
b69ab31638 │ o │ H
b69ab31639 │ │ │
b69ab31640 ╭─┼─┬─┬─╮
b69ab31641 │ │ │ │ o G
b69ab31642 │ │ │ │ │
b69ab31643 │ │ │ o │ E
b69ab31644 │ │ │ │ │
b69ab31645 │ │ │ ├─╯
b69ab31646 │ │ o │ D
b69ab31647 │ │ │ │
b69ab31648 │ │ ├─╮
b69ab31649 │ o │ │ C
b69ab31650 │ │ │ │
b69ab31651 │ ├───╯
b69ab31652 o │ │ F
b69ab31653 │ │ │
b69ab31654 ├─╯ │
b69ab31655 o │ B
b69ab31656 │ │
b69ab31657 ├───╯
b69ab31658 o A"
b69ab31659 `);
b69ab31660 });
b69ab31661
b69ab31662 it('renders TEST_RESERVED_COLUMN', () => {
b69ab31663 expect(render(TEST_RESERVED_COLUMN)).toMatchInlineSnapshot(`
b69ab31664 "
b69ab31665 o Z
b69ab31666 │
b69ab31667 o Y
b69ab31668 │
b69ab31669 o X
b69ab31670 │
b69ab31671 ╭─╯
b69ab31672 │ o W
b69ab31673 │ │
b69ab31674 ├─╯
b69ab31675 o G
b69ab31676 │
b69ab31677 o F
b69ab31678 │
b69ab31679 ├─╮
b69ab31680 │ o E
b69ab31681 │ │
b69ab31682 │ o D
b69ab31683 │
b69ab31684 o C
b69ab31685 │
b69ab31686 o B
b69ab31687 │
b69ab31688 o A"
b69ab31689 `);
b69ab31690 });
b69ab31691
b69ab31692 it('renders TEST_SPLIT_PARENTS', () => {
b69ab31693 expect(render(TEST_SPLIT_PARENTS)).toMatchInlineSnapshot(`
b69ab31694 "
b69ab31695 o E
b69ab31696 │
b69ab31697 ╭─┬─┬─┤
b69ab31698 : │ │ :
b69ab31699 │ o │ │ D
b69ab31700 │ │ │ │
b69ab31701 ╭─┴─╮ │
b69ab31702 │ o │ C
b69ab31703 │ │ │
b69ab31704 │ ├─╯
b69ab31705 o │ B
b69ab31706 │ │
b69ab31707 ├───╯
b69ab31708 o A"
b69ab31709 `);
b69ab31710 expect(render(TEST_SPLIT_PARENTS, true)).toMatchInlineSnapshot(`
b69ab31711 "
b69ab31712 o E
b69ab31713 │ # top pad
b69ab31714 ╭─┬─┬─┤ # link line
b69ab31715 : │ │ : # pad line
b69ab31716 --------------------
b69ab31717 o D
b69ab31718 │ # top pad
b69ab31719 ╭─┴─╮ # link line
b69ab31720 │ │ # pad line
b69ab31721 --------------------
b69ab31722 o C
b69ab31723 │ # top pad
b69ab31724 │ # link line
b69ab31725 │ # pad line
b69ab31726 --------------------
b69ab31727 o B
b69ab31728 │ # top pad
b69ab31729 │ # link line
b69ab31730 │ # pad line
b69ab31731 --------------------
b69ab31732 o A
b69ab31733 # top pad
b69ab31734 # pad line
b69ab31735 --------------------"
b69ab31736 `);
b69ab31737 });
b69ab31738
b69ab31739 it('renders TEST_TERMINATIONS', () => {
b69ab31740 expect(render(TEST_TERMINATIONS)).toMatchInlineSnapshot(`
b69ab31741 "
b69ab31742 o K
b69ab31743 │
b69ab31744 │ o J
b69ab31745 │ │
b69ab31746 ├─╯
b69ab31747 o I
b69ab31748 │
b69ab31749 ╭─┼─╮
b69ab31750 │ │ │
b69ab31751 │ ~ │
b69ab31752 │ │
b69ab31753 o │ E
b69ab31754 │ │
b69ab31755 │ o H
b69ab31756 │ │
b69ab31757 ├───╯
b69ab31758 o D
b69ab31759 │
b69ab31760 │
b69ab31761 ~
b69ab31762
b69ab31763 o C
b69ab31764 │
b69ab31765 o B
b69ab31766 │
b69ab31767 │
b69ab31768 ~"
b69ab31769 `);
b69ab31770 });
b69ab31771});
b69ab31772
b69ab31773function render(fixture: TestFixture, debugLinkLineFromNode = false): string {
b69ab31774 const {rows, reserve} = fixture;
b69ab31775 const renderer = new TextRenderer({debugLinkLineFromNode});
b69ab31776 if (reserve != null) {
b69ab31777 for (const h of reserve) {
b69ab31778 renderer.reserve(h);
b69ab31779 }
b69ab31780 }
b69ab31781 const rendered = rows.map(([hash, parents, message]) => {
b69ab31782 // Convert parents from string to Ancestor[]
b69ab31783 const ancestors = parents.map(p => {
b69ab31784 if (p.startsWith('P:')) {
b69ab31785 return new Ancestor({hash: p.substring(2), type: AncestorType.Parent});
b69ab31786 } else if (p.startsWith('A:')) {
b69ab31787 return new Ancestor({hash: p.substring(2), type: AncestorType.Ancestor});
b69ab31788 } else {
b69ab31789 return new Ancestor({hash: undefined, type: AncestorType.Anonymous});
b69ab31790 }
b69ab31791 });
b69ab31792 return renderer.nextRow(hash, ancestors, message.trimEnd() + '\n');
b69ab31793 });
b69ab31794 return '\n' + rendered.join('').trimEnd();
b69ab31795}