| b69ab31 | | | 1 | /** |
| b69ab31 | | | 2 | * Copyright (c) Meta Platforms, Inc. and affiliates. |
| b69ab31 | | | 3 | * |
| b69ab31 | | | 4 | * This source code is licensed under the MIT license found in the |
| b69ab31 | | | 5 | * LICENSE file in the root directory of this source tree. |
| b69ab31 | | | 6 | */ |
| b69ab31 | | | 7 | |
| b69ab31 | | | 8 | import type {Hash} from '../../types'; |
| b69ab31 | | | 9 | |
| b69ab31 | | | 10 | import {Ancestor, AncestorType} from '../render'; |
| b69ab31 | | | 11 | import {TextRenderer} from '../renderText'; |
| b69ab31 | | | 12 | |
| b69ab31 | | | 13 | /* Ported from fbcode/eden/scm/lib/renderdag/src/box_drawing.rs */ |
| b69ab31 | | | 14 | |
| b69ab31 | | | 15 | type TestFixture = { |
| b69ab31 | | | 16 | rows: Array<[Hash, string[], string]>; |
| b69ab31 | | | 17 | reserve?: Hash[]; |
| b69ab31 | | | 18 | }; |
| b69ab31 | | | 19 | |
| b69ab31 | | | 20 | /* |
| b69ab31 | | | 21 | A----B-D-----E----------F-\ |
| b69ab31 | | | 22 | \-C--/ \-W \-X \-Y-Z |
| b69ab31 | | | 23 | */ |
| b69ab31 | | | 24 | export const TEST_ANCESTORS: TestFixture = { |
| b69ab31 | | | 25 | reserve: ['F'], |
| b69ab31 | | | 26 | rows: [ |
| b69ab31 | | | 27 | ['Z', ['P:Y'], 'Z'], |
| b69ab31 | | | 28 | ['Y', ['P:F'], 'Y'], |
| b69ab31 | | | 29 | ['F', ['A:E'], 'F'], |
| b69ab31 | | | 30 | ['X', ['P:E'], 'X'], |
| b69ab31 | | | 31 | ['W', ['P:E'], 'W'], |
| b69ab31 | | | 32 | ['E', ['A:D'], 'E'], |
| b69ab31 | | | 33 | ['D', ['P:B', 'A:C'], 'D'], |
| b69ab31 | | | 34 | ['C', ['A:A'], 'C'], |
| b69ab31 | | | 35 | ['B', ['P:A'], 'B'], |
| b69ab31 | | | 36 | ['A', [], 'A'], |
| b69ab31 | | | 37 | ], |
| b69ab31 | | | 38 | }; |
| b69ab31 | | | 39 | |
| b69ab31 | | | 40 | /* A-B-C */ |
| b69ab31 | | | 41 | export const TEST_BASIC: TestFixture = { |
| b69ab31 | | | 42 | rows: [ |
| b69ab31 | | | 43 | ['C', ['P:B'], 'C'], |
| b69ab31 | | | 44 | ['B', ['P:A'], 'B'], |
| b69ab31 | | | 45 | ['A', [], 'A'], |
| b69ab31 | | | 46 | ], |
| b69ab31 | | | 47 | }; |
| b69ab31 | | | 48 | |
| b69ab31 | | | 49 | /* |
| b69ab31 | | | 50 | |
| b69ab31 | | | 51 | T /---------------N--O---\ T |
| b69ab31 | | | 52 | / / \ \ |
| b69ab31 | | | 53 | /----E-F-\ /-------L--M--------P--\ S--U---\ |
| b69ab31 | | | 54 | A-B-C-D------G--H--I--J--K---------------Q--R---------V--W |
| b69ab31 | | | 55 | \--N |
| b69ab31 | | | 56 | |
| b69ab31 | | | 57 | */ |
| b69ab31 | | | 58 | export const TEST_BRANCHES_AND_MERGES: TestFixture = { |
| b69ab31 | | | 59 | rows: [ |
| b69ab31 | | | 60 | ['W', ['P:V'], 'W'], |
| b69ab31 | | | 61 | ['V', ['P:R', 'P:U'], 'V'], |
| b69ab31 | | | 62 | ['U', ['P:S', 'P:T'], 'U'], |
| b69ab31 | | | 63 | ['T', ['P:E'], 'T'], |
| b69ab31 | | | 64 | ['S', [], 'S'], |
| b69ab31 | | | 65 | ['R', ['P:Q'], 'R'], |
| b69ab31 | | | 66 | ['Q', ['P:K', 'P:P'], 'Q'], |
| b69ab31 | | | 67 | ['P', ['P:M', 'P:O'], 'P'], |
| b69ab31 | | | 68 | ['O', ['P:N'], 'O'], |
| b69ab31 | | | 69 | ['N', ['P:F', 'P:J'], 'N'], |
| b69ab31 | | | 70 | ['M', ['P:L'], 'M'], |
| b69ab31 | | | 71 | ['L', ['P:H'], 'L'], |
| b69ab31 | | | 72 | ['K', ['P:J'], 'K'], |
| b69ab31 | | | 73 | ['J', ['P:I'], 'J'], |
| b69ab31 | | | 74 | ['I', ['P:H'], 'I'], |
| b69ab31 | | | 75 | ['H', ['P:G'], 'H'], |
| b69ab31 | | | 76 | ['G', ['P:D', 'P:F'], 'G'], |
| b69ab31 | | | 77 | ['F', ['P:E'], 'F'], |
| b69ab31 | | | 78 | ['E', ['P:B'], 'E'], |
| b69ab31 | | | 79 | ['D', ['P:C'], 'D'], |
| b69ab31 | | | 80 | ['C', ['P:B'], 'C'], |
| b69ab31 | | | 81 | ['B', ['P:A'], 'B'], |
| b69ab31 | | | 82 | ['A', [], 'A'], |
| b69ab31 | | | 83 | ], |
| b69ab31 | | | 84 | }; |
| b69ab31 | | | 85 | |
| b69ab31 | | | 86 | /* |
| b69ab31 | | | 87 | |
| b69ab31 | | | 88 | K |
| b69ab31 | | | 89 | /| |
| b69ab31 | | | 90 | F J |
| b69ab31 | | | 91 | / /| |
| b69ab31 | | | 92 | | E I |
| b69ab31 | | | 93 | |/ /| |
| b69ab31 | | | 94 | | D H |
| b69ab31 | | | 95 | |/ /| |
| b69ab31 | | | 96 | | C G |
| b69ab31 | | | 97 | |/ /| |
| b69ab31 | | | 98 | | B Z |
| b69ab31 | | | 99 | |/ |
| b69ab31 | | | 100 | A |
| b69ab31 | | | 101 | |
| b69ab31 | | | 102 | */ |
| b69ab31 | | | 103 | export const TEST_DIFFERENT_ORDERS1: TestFixture = { |
| b69ab31 | | | 104 | rows: [ |
| b69ab31 | | | 105 | ['K', ['P:F', 'P:J'], 'K'], |
| b69ab31 | | | 106 | ['J', ['P:E', 'P:I'], 'J'], |
| b69ab31 | | | 107 | ['I', ['P:D', 'P:H'], 'I'], |
| b69ab31 | | | 108 | ['H', ['P:C', 'P:G'], 'H'], |
| b69ab31 | | | 109 | ['G', ['P:B', 'P:Z'], 'G'], |
| b69ab31 | | | 110 | ['F', ['P:A'], 'F'], |
| b69ab31 | | | 111 | ['E', ['P:A'], 'E'], |
| b69ab31 | | | 112 | ['D', ['P:A'], 'D'], |
| b69ab31 | | | 113 | ['C', ['P:A'], 'C'], |
| b69ab31 | | | 114 | ['B', ['P:A'], 'B'], |
| b69ab31 | | | 115 | ['Z', [], 'Z'], |
| b69ab31 | | | 116 | ['A', [], 'A'], |
| b69ab31 | | | 117 | ], |
| b69ab31 | | | 118 | }; |
| b69ab31 | | | 119 | |
| b69ab31 | | | 120 | export const TEST_DIFFERENT_ORDERS2: TestFixture = { |
| b69ab31 | | | 121 | rows: [ |
| b69ab31 | | | 122 | ['K', ['P:F', 'P:J'], 'K'], |
| b69ab31 | | | 123 | ['J', ['P:E', 'P:I'], 'J'], |
| b69ab31 | | | 124 | ['I', ['P:D', 'P:H'], 'I'], |
| b69ab31 | | | 125 | ['H', ['P:C', 'P:G'], 'H'], |
| b69ab31 | | | 126 | ['G', ['P:B', 'P:Z'], 'G'], |
| b69ab31 | | | 127 | ['Z', [], 'Z'], |
| b69ab31 | | | 128 | ['B', ['P:A'], 'B'], |
| b69ab31 | | | 129 | ['C', ['P:A'], 'C'], |
| b69ab31 | | | 130 | ['D', ['P:A'], 'D'], |
| b69ab31 | | | 131 | ['E', ['P:A'], 'E'], |
| b69ab31 | | | 132 | ['F', ['P:A'], 'F'], |
| b69ab31 | | | 133 | ['A', [], 'A'], |
| b69ab31 | | | 134 | ], |
| b69ab31 | | | 135 | }; |
| b69ab31 | | | 136 | |
| b69ab31 | | | 137 | export const TEST_DIFFERENT_ORDERS3: TestFixture = { |
| b69ab31 | | | 138 | rows: [ |
| b69ab31 | | | 139 | ['K', ['P:F', 'P:J'], 'K'], |
| b69ab31 | | | 140 | ['J', ['P:A'], 'J'], |
| b69ab31 | | | 141 | ['F', ['P:E', 'P:I'], 'F'], |
| b69ab31 | | | 142 | ['I', ['P:A'], 'I'], |
| b69ab31 | | | 143 | ['E', ['P:D', 'P:H'], 'E'], |
| b69ab31 | | | 144 | ['H', ['P:A'], 'H'], |
| b69ab31 | | | 145 | ['D', ['P:C', 'P:G'], 'D'], |
| b69ab31 | | | 146 | ['G', ['P:A'], 'G'], |
| b69ab31 | | | 147 | ['C', ['P:B', 'P:Z'], 'C'], |
| b69ab31 | | | 148 | ['Z', [], 'Z'], |
| b69ab31 | | | 149 | ['B', ['P:A'], 'B'], |
| b69ab31 | | | 150 | ['A', [], 'A'], |
| b69ab31 | | | 151 | ], |
| b69ab31 | | | 152 | }; |
| b69ab31 | | | 153 | |
| b69ab31 | | | 154 | export const TEST_DIFFERENT_ORDERS4: TestFixture = { |
| b69ab31 | | | 155 | rows: [ |
| b69ab31 | | | 156 | ['K', ['P:F', 'P:J'], 'K'], |
| b69ab31 | | | 157 | ['F', ['P:A'], 'F'], |
| b69ab31 | | | 158 | ['J', ['P:E', 'P:I'], 'J'], |
| b69ab31 | | | 159 | ['E', ['P:A'], 'E'], |
| b69ab31 | | | 160 | ['I', ['P:D', 'P:H'], 'I'], |
| b69ab31 | | | 161 | ['D', ['P:A'], 'D'], |
| b69ab31 | | | 162 | ['H', ['P:C', 'P:G'], 'H'], |
| b69ab31 | | | 163 | ['C', ['P:A'], 'C'], |
| b69ab31 | | | 164 | ['G', ['P:B', 'P:Z'], 'G'], |
| b69ab31 | | | 165 | ['Z', [], 'Z'], |
| b69ab31 | | | 166 | ['B', ['P:A'], 'B'], |
| b69ab31 | | | 167 | ['A', [], 'A'], |
| b69ab31 | | | 168 | ], |
| b69ab31 | | | 169 | }; |
| b69ab31 | | | 170 | |
| b69ab31 | | | 171 | /* |
| b69ab31 | | | 172 | |
| b69ab31 | | | 173 | Y-\ |
| b69ab31 | | | 174 | Z-A-B-D-E-F |
| b69ab31 | | | 175 | \-C-/ |
| b69ab31 | | | 176 | |
| b69ab31 | | | 177 | */ |
| b69ab31 | | | 178 | export const TEST_LONG_MESSAGES: TestFixture = { |
| b69ab31 | | | 179 | rows: [ |
| b69ab31 | | | 180 | [ |
| b69ab31 | | | 181 | 'F', |
| b69ab31 | | | 182 | ['P:C', 'P:E', '~'], |
| b69ab31 | | | 183 | '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', |
| b69ab31 | | | 184 | ], |
| b69ab31 | | | 185 | ['E', ['P:D'], 'E'], |
| b69ab31 | | | 186 | ['D', ['P:B'], 'D'], |
| b69ab31 | | | 187 | ['C', ['P:B'], 'C\nlong message 1\nlong message 2\nlong message 3\n\n'], |
| b69ab31 | | | 188 | ['B', ['P:A'], 'B'], |
| b69ab31 | | | 189 | ['A', ['~'], 'A\nlong message 1\nlong message 2\nlong message 3\n\n'], |
| b69ab31 | | | 190 | ], |
| b69ab31 | | | 191 | }; |
| b69ab31 | | | 192 | |
| b69ab31 | | | 193 | /* |
| b69ab31 | | | 194 | |
| b69ab31 | | | 195 | /-----\ |
| b69ab31 | | | 196 | / \ |
| b69ab31 | | | 197 | D /--C--\ I |
| b69ab31 | | | 198 | / /---D---\ \ |
| b69ab31 | | | 199 | A-B----E----H-J |
| b69ab31 | | | 200 | \---F---/ / |
| b69ab31 | | | 201 | \--G--/ F |
| b69ab31 | | | 202 | |
| b69ab31 | | | 203 | */ |
| b69ab31 | | | 204 | export const TEST_OCTOPUS_BRANCH_AND_MERGE: TestFixture = { |
| b69ab31 | | | 205 | rows: [ |
| b69ab31 | | | 206 | ['J', ['P:F', 'P:H', 'P:I'], 'J'], |
| b69ab31 | | | 207 | ['I', ['P:D'], 'I'], |
| b69ab31 | | | 208 | ['H', ['P:C', 'P:D', 'P:E', 'P:F', 'P:G'], 'H'], |
| b69ab31 | | | 209 | ['G', ['P:B'], 'G'], |
| b69ab31 | | | 210 | ['E', ['P:B'], 'E'], |
| b69ab31 | | | 211 | ['D', ['P:A', 'P:B'], 'D'], |
| b69ab31 | | | 212 | ['C', ['P:B'], 'C'], |
| b69ab31 | | | 213 | ['F', ['P:B'], 'F'], |
| b69ab31 | | | 214 | ['B', ['P:A'], 'B'], |
| b69ab31 | | | 215 | ['A', [], 'A'], |
| b69ab31 | | | 216 | ], |
| b69ab31 | | | 217 | }; |
| b69ab31 | | | 218 | |
| b69ab31 | | | 219 | /* |
| b69ab31 | | | 220 | |
| b69ab31 | | | 221 | A-B-C-F-G----\ |
| b69ab31 | | | 222 | D-E-/ \-W \-X-Y-Z |
| b69ab31 | | | 223 | |
| b69ab31 | | | 224 | */ |
| b69ab31 | | | 225 | export const TEST_RESERVED_COLUMN: TestFixture = { |
| b69ab31 | | | 226 | reserve: ['G'], |
| b69ab31 | | | 227 | rows: [ |
| b69ab31 | | | 228 | ['Z', ['P:Y'], 'Z'], |
| b69ab31 | | | 229 | ['Y', ['P:X'], 'Y'], |
| b69ab31 | | | 230 | ['X', ['P:G'], 'X'], |
| b69ab31 | | | 231 | ['W', ['P:G'], 'W'], |
| b69ab31 | | | 232 | ['G', ['P:F'], 'G'], |
| b69ab31 | | | 233 | ['F', ['P:C', 'P:E'], 'F'], |
| b69ab31 | | | 234 | ['E', ['P:D'], 'E'], |
| b69ab31 | | | 235 | ['D', [], 'D'], |
| b69ab31 | | | 236 | ['C', ['P:B'], 'C'], |
| b69ab31 | | | 237 | ['B', ['P:A'], 'B'], |
| b69ab31 | | | 238 | ['A', [], 'A'], |
| b69ab31 | | | 239 | ], |
| b69ab31 | | | 240 | }; |
| b69ab31 | | | 241 | |
| b69ab31 | | | 242 | /* |
| b69ab31 | | | 243 | |
| b69ab31 | | | 244 | /-B-\ A-\ |
| b69ab31 | | | 245 | A D-E B--E |
| b69ab31 | | | 246 | \-C-/ C-/ |
| b69ab31 | | | 247 | |
| b69ab31 | | | 248 | */ |
| b69ab31 | | | 249 | export const TEST_SPLIT_PARENTS: TestFixture = { |
| b69ab31 | | | 250 | reserve: ['B', 'D', 'C'], |
| b69ab31 | | | 251 | rows: [ |
| b69ab31 | | | 252 | ['E', ['A:A', 'A:B', 'P:C', 'P:D'], 'E'], |
| b69ab31 | | | 253 | ['D', ['P:B', 'P:C'], 'D'], |
| b69ab31 | | | 254 | ['C', ['P:A'], 'C'], |
| b69ab31 | | | 255 | ['B', ['P:A'], 'B'], |
| b69ab31 | | | 256 | ['A', [], 'A'], |
| b69ab31 | | | 257 | ], |
| b69ab31 | | | 258 | }; |
| b69ab31 | | | 259 | |
| b69ab31 | | | 260 | /* |
| b69ab31 | | | 261 | |
| b69ab31 | | | 262 | A-B-C D-E-\ |
| b69ab31 | | | 263 | F---I--J |
| b69ab31 | | | 264 | X-D-H-/ \-K |
| b69ab31 | | | 265 | |
| b69ab31 | | | 266 | */ |
| b69ab31 | | | 267 | export const TEST_TERMINATIONS: TestFixture = { |
| b69ab31 | | | 268 | reserve: ['E'], |
| b69ab31 | | | 269 | rows: [ |
| b69ab31 | | | 270 | ['K', ['P:I'], 'K'], |
| b69ab31 | | | 271 | ['J', ['P:I'], 'J'], |
| b69ab31 | | | 272 | ['I', ['P:E', '~', 'P:H'], 'I'], |
| b69ab31 | | | 273 | ['E', ['P:D'], 'E'], |
| b69ab31 | | | 274 | ['H', ['P:D'], 'H'], |
| b69ab31 | | | 275 | ['D', ['~'], 'D'], |
| b69ab31 | | | 276 | ['C', ['P:B'], 'C'], |
| b69ab31 | | | 277 | ['B', ['~'], 'B'], |
| b69ab31 | | | 278 | ], |
| b69ab31 | | | 279 | }; |
| b69ab31 | | | 280 | |
| b69ab31 | | | 281 | describe('renderText', () => { |
| b69ab31 | | | 282 | it('renders TEST_ANCESTORS', () => { |
| b69ab31 | | | 283 | expect(render(TEST_ANCESTORS)).toMatchInlineSnapshot(` |
| b69ab31 | | | 284 | " |
| b69ab31 | | | 285 | o Z |
| b69ab31 | | | 286 | │ |
| b69ab31 | | | 287 | o Y |
| b69ab31 | | | 288 | │ |
| b69ab31 | | | 289 | ╭─╯ |
| b69ab31 | | | 290 | o F |
| b69ab31 | | | 291 | │ |
| b69ab31 | | | 292 | : |
| b69ab31 | | | 293 | │ o X |
| b69ab31 | | | 294 | │ │ |
| b69ab31 | | | 295 | ├─╯ |
| b69ab31 | | | 296 | │ o W |
| b69ab31 | | | 297 | │ │ |
| b69ab31 | | | 298 | ├─╯ |
| b69ab31 | | | 299 | o E |
| b69ab31 | | | 300 | │ |
| b69ab31 | | | 301 | : |
| b69ab31 | | | 302 | o D |
| b69ab31 | | | 303 | │ |
| b69ab31 | | | 304 | ├─╮ |
| b69ab31 | | | 305 | │ : |
| b69ab31 | | | 306 | │ o C |
| b69ab31 | | | 307 | │ │ |
| b69ab31 | | | 308 | │ : |
| b69ab31 | | | 309 | o │ B |
| b69ab31 | | | 310 | │ │ |
| b69ab31 | | | 311 | ├─╯ |
| b69ab31 | | | 312 | o A" |
| b69ab31 | | | 313 | `); |
| b69ab31 | | | 314 | }); |
| b69ab31 | | | 315 | |
| b69ab31 | | | 316 | it('renders TEST_BASIC', () => { |
| b69ab31 | | | 317 | expect(render(TEST_BASIC)).toMatchInlineSnapshot(` |
| b69ab31 | | | 318 | " |
| b69ab31 | | | 319 | o C |
| b69ab31 | | | 320 | │ |
| b69ab31 | | | 321 | o B |
| b69ab31 | | | 322 | │ |
| b69ab31 | | | 323 | o A" |
| b69ab31 | | | 324 | `); |
| b69ab31 | | | 325 | }); |
| b69ab31 | | | 326 | |
| b69ab31 | | | 327 | it('renders TEST_BRANCHES_AND_MERGES', () => { |
| b69ab31 | | | 328 | expect(render(TEST_BRANCHES_AND_MERGES)).toMatchInlineSnapshot(` |
| b69ab31 | | | 329 | " |
| b69ab31 | | | 330 | o W |
| b69ab31 | | | 331 | │ |
| b69ab31 | | | 332 | o V |
| b69ab31 | | | 333 | │ |
| b69ab31 | | | 334 | ├─╮ |
| b69ab31 | | | 335 | │ o U |
| b69ab31 | | | 336 | │ │ |
| b69ab31 | | | 337 | │ ├─╮ |
| b69ab31 | | | 338 | │ │ o T |
| b69ab31 | | | 339 | │ │ │ |
| b69ab31 | | | 340 | │ o │ S |
| b69ab31 | | | 341 | │ │ |
| b69ab31 | | | 342 | o │ R |
| b69ab31 | | | 343 | │ │ |
| b69ab31 | | | 344 | o │ Q |
| b69ab31 | | | 345 | │ │ |
| b69ab31 | | | 346 | ├─╮ │ |
| b69ab31 | | | 347 | │ o │ P |
| b69ab31 | | | 348 | │ │ │ |
| b69ab31 | | | 349 | │ ├───╮ |
| b69ab31 | | | 350 | │ │ │ o O |
| b69ab31 | | | 351 | │ │ │ │ |
| b69ab31 | | | 352 | │ │ │ o N |
| b69ab31 | | | 353 | │ │ │ │ |
| b69ab31 | | | 354 | │ │ │ ├─╮ |
| b69ab31 | | | 355 | │ o │ │ │ M |
| b69ab31 | | | 356 | │ │ │ │ │ |
| b69ab31 | | | 357 | │ o │ │ │ L |
| b69ab31 | | | 358 | │ │ │ │ │ |
| b69ab31 | | | 359 | o │ │ │ │ K |
| b69ab31 | | | 360 | │ │ │ │ │ |
| b69ab31 | | | 361 | ├───────╯ |
| b69ab31 | | | 362 | o │ │ │ J |
| b69ab31 | | | 363 | │ │ │ │ |
| b69ab31 | | | 364 | o │ │ │ I |
| b69ab31 | | | 365 | │ │ │ │ |
| b69ab31 | | | 366 | ├─╯ │ │ |
| b69ab31 | | | 367 | o │ │ H |
| b69ab31 | | | 368 | │ │ │ |
| b69ab31 | | | 369 | o │ │ G |
| b69ab31 | | | 370 | │ │ │ |
| b69ab31 | | | 371 | ├─────╮ |
| b69ab31 | | | 372 | │ │ o F |
| b69ab31 | | | 373 | │ │ │ |
| b69ab31 | | | 374 | │ ├─╯ |
| b69ab31 | | | 375 | │ o E |
| b69ab31 | | | 376 | │ │ |
| b69ab31 | | | 377 | o │ D |
| b69ab31 | | | 378 | │ │ |
| b69ab31 | | | 379 | o │ C |
| b69ab31 | | | 380 | │ │ |
| b69ab31 | | | 381 | ├───╯ |
| b69ab31 | | | 382 | o B |
| b69ab31 | | | 383 | │ |
| b69ab31 | | | 384 | o A" |
| b69ab31 | | | 385 | `); |
| b69ab31 | | | 386 | }); |
| b69ab31 | | | 387 | |
| b69ab31 | | | 388 | it('renders TEST_DIFFERENT_ORDERS1', () => { |
| b69ab31 | | | 389 | expect(render(TEST_DIFFERENT_ORDERS1)).toMatchInlineSnapshot(` |
| b69ab31 | | | 390 | " |
| b69ab31 | | | 391 | o K |
| b69ab31 | | | 392 | │ |
| b69ab31 | | | 393 | ├─╮ |
| b69ab31 | | | 394 | │ o J |
| b69ab31 | | | 395 | │ │ |
| b69ab31 | | | 396 | │ ├─╮ |
| b69ab31 | | | 397 | │ │ o I |
| b69ab31 | | | 398 | │ │ │ |
| b69ab31 | | | 399 | │ │ ├─╮ |
| b69ab31 | | | 400 | │ │ │ o H |
| b69ab31 | | | 401 | │ │ │ │ |
| b69ab31 | | | 402 | │ │ │ ├─╮ |
| b69ab31 | | | 403 | │ │ │ │ o G |
| b69ab31 | | | 404 | │ │ │ │ │ |
| b69ab31 | | | 405 | │ │ │ │ ├─╮ |
| b69ab31 | | | 406 | o │ │ │ │ │ F |
| b69ab31 | | | 407 | │ │ │ │ │ │ |
| b69ab31 | | | 408 | │ o │ │ │ │ E |
| b69ab31 | | | 409 | │ │ │ │ │ │ |
| b69ab31 | | | 410 | ├─╯ │ │ │ │ |
| b69ab31 | | | 411 | │ o │ │ │ D |
| b69ab31 | | | 412 | │ │ │ │ │ |
| b69ab31 | | | 413 | ├───╯ │ │ │ |
| b69ab31 | | | 414 | │ o │ │ C |
| b69ab31 | | | 415 | │ │ │ │ |
| b69ab31 | | | 416 | ├─────╯ │ │ |
| b69ab31 | | | 417 | │ o │ B |
| b69ab31 | | | 418 | │ │ │ |
| b69ab31 | | | 419 | ├───────╯ │ |
| b69ab31 | | | 420 | │ o Z |
| b69ab31 | | | 421 | │ |
| b69ab31 | | | 422 | o A" |
| b69ab31 | | | 423 | `); |
| b69ab31 | | | 424 | }); |
| b69ab31 | | | 425 | |
| b69ab31 | | | 426 | it('renders TEST_DIFFERENT_ORDERS2', () => { |
| b69ab31 | | | 427 | expect(render(TEST_DIFFERENT_ORDERS2)).toMatchInlineSnapshot(` |
| b69ab31 | | | 428 | " |
| b69ab31 | | | 429 | o K |
| b69ab31 | | | 430 | │ |
| b69ab31 | | | 431 | ├─╮ |
| b69ab31 | | | 432 | │ o J |
| b69ab31 | | | 433 | │ │ |
| b69ab31 | | | 434 | │ ├─╮ |
| b69ab31 | | | 435 | │ │ o I |
| b69ab31 | | | 436 | │ │ │ |
| b69ab31 | | | 437 | │ │ ├─╮ |
| b69ab31 | | | 438 | │ │ │ o H |
| b69ab31 | | | 439 | │ │ │ │ |
| b69ab31 | | | 440 | │ │ │ ├─╮ |
| b69ab31 | | | 441 | │ │ │ │ o G |
| b69ab31 | | | 442 | │ │ │ │ │ |
| b69ab31 | | | 443 | │ │ │ │ ├─╮ |
| b69ab31 | | | 444 | │ │ │ │ │ o Z |
| b69ab31 | | | 445 | │ │ │ │ │ |
| b69ab31 | | | 446 | │ │ │ │ o B |
| b69ab31 | | | 447 | │ │ │ │ │ |
| b69ab31 | | | 448 | │ │ │ o │ C |
| b69ab31 | | | 449 | │ │ │ │ │ |
| b69ab31 | | | 450 | │ │ │ ├─╯ |
| b69ab31 | | | 451 | │ │ o │ D |
| b69ab31 | | | 452 | │ │ │ │ |
| b69ab31 | | | 453 | │ │ ├─╯ |
| b69ab31 | | | 454 | │ o │ E |
| b69ab31 | | | 455 | │ │ │ |
| b69ab31 | | | 456 | │ ├─╯ |
| b69ab31 | | | 457 | o │ F |
| b69ab31 | | | 458 | │ │ |
| b69ab31 | | | 459 | ├─╯ |
| b69ab31 | | | 460 | o A" |
| b69ab31 | | | 461 | `); |
| b69ab31 | | | 462 | }); |
| b69ab31 | | | 463 | |
| b69ab31 | | | 464 | it('renders TEST_DIFFERENT_ORDERS3', () => { |
| b69ab31 | | | 465 | expect(render(TEST_DIFFERENT_ORDERS3)).toMatchInlineSnapshot(` |
| b69ab31 | | | 466 | " |
| b69ab31 | | | 467 | o K |
| b69ab31 | | | 468 | │ |
| b69ab31 | | | 469 | ├─╮ |
| b69ab31 | | | 470 | │ o J |
| b69ab31 | | | 471 | │ │ |
| b69ab31 | | | 472 | o │ F |
| b69ab31 | | | 473 | │ │ |
| b69ab31 | | | 474 | ├───╮ |
| b69ab31 | | | 475 | │ │ o I |
| b69ab31 | | | 476 | │ │ │ |
| b69ab31 | | | 477 | │ ├─╯ |
| b69ab31 | | | 478 | o │ E |
| b69ab31 | | | 479 | │ │ |
| b69ab31 | | | 480 | ├───╮ |
| b69ab31 | | | 481 | │ │ o H |
| b69ab31 | | | 482 | │ │ │ |
| b69ab31 | | | 483 | │ ├─╯ |
| b69ab31 | | | 484 | o │ D |
| b69ab31 | | | 485 | │ │ |
| b69ab31 | | | 486 | ├───╮ |
| b69ab31 | | | 487 | │ │ o G |
| b69ab31 | | | 488 | │ │ │ |
| b69ab31 | | | 489 | │ ├─╯ |
| b69ab31 | | | 490 | o │ C |
| b69ab31 | | | 491 | │ │ |
| b69ab31 | | | 492 | ├───╮ |
| b69ab31 | | | 493 | │ │ o Z |
| b69ab31 | | | 494 | │ │ |
| b69ab31 | | | 495 | o │ B |
| b69ab31 | | | 496 | │ │ |
| b69ab31 | | | 497 | ├─╯ |
| b69ab31 | | | 498 | o A" |
| b69ab31 | | | 499 | `); |
| b69ab31 | | | 500 | }); |
| b69ab31 | | | 501 | |
| b69ab31 | | | 502 | it('renders TEST_DIFFERENT_ORDERS4', () => { |
| b69ab31 | | | 503 | expect(render(TEST_DIFFERENT_ORDERS4)).toMatchInlineSnapshot(` |
| b69ab31 | | | 504 | " |
| b69ab31 | | | 505 | o K |
| b69ab31 | | | 506 | │ |
| b69ab31 | | | 507 | ├─╮ |
| b69ab31 | | | 508 | o │ F |
| b69ab31 | | | 509 | │ │ |
| b69ab31 | | | 510 | │ o J |
| b69ab31 | | | 511 | │ │ |
| b69ab31 | | | 512 | │ ├─╮ |
| b69ab31 | | | 513 | │ o │ E |
| b69ab31 | | | 514 | │ │ │ |
| b69ab31 | | | 515 | ├─╯ │ |
| b69ab31 | | | 516 | │ o I |
| b69ab31 | | | 517 | │ │ |
| b69ab31 | | | 518 | │ ╭─┤ |
| b69ab31 | | | 519 | │ │ o D |
| b69ab31 | | | 520 | │ │ │ |
| b69ab31 | | | 521 | ├───╯ |
| b69ab31 | | | 522 | │ o H |
| b69ab31 | | | 523 | │ │ |
| b69ab31 | | | 524 | │ ├─╮ |
| b69ab31 | | | 525 | │ o │ C |
| b69ab31 | | | 526 | │ │ │ |
| b69ab31 | | | 527 | ├─╯ │ |
| b69ab31 | | | 528 | │ o G |
| b69ab31 | | | 529 | │ │ |
| b69ab31 | | | 530 | │ ╭─┤ |
| b69ab31 | | | 531 | │ o │ Z |
| b69ab31 | | | 532 | │ │ |
| b69ab31 | | | 533 | │ o B |
| b69ab31 | | | 534 | │ │ |
| b69ab31 | | | 535 | ├───╯ |
| b69ab31 | | | 536 | o A" |
| b69ab31 | | | 537 | `); |
| b69ab31 | | | 538 | expect(render(TEST_DIFFERENT_ORDERS4, true)).toMatchInlineSnapshot(` |
| b69ab31 | | | 539 | " |
| b69ab31 | | | 540 | o K |
| b69ab31 | | | 541 | │ # top pad |
| b69ab31 | | | 542 | ├─╮ # link line |
| b69ab31 | | | 543 | │ │ # pad line |
| b69ab31 | | | 544 | -------------------- |
| b69ab31 | | | 545 | o F |
| b69ab31 | | | 546 | │ # top pad |
| b69ab31 | | | 547 | │ # pad line |
| b69ab31 | | | 548 | -------------------- |
| b69ab31 | | | 549 | o J |
| b69ab31 | | | 550 | │ # top pad |
| b69ab31 | | | 551 | ├─╮ # link line |
| b69ab31 | | | 552 | │ │ # pad line |
| b69ab31 | | | 553 | -------------------- |
| b69ab31 | | | 554 | o E |
| b69ab31 | | | 555 | │ # top pad |
| b69ab31 | | | 556 | ╭─╯ # link line |
| b69ab31 | | | 557 | │ # pad line |
| b69ab31 | | | 558 | -------------------- |
| b69ab31 | | | 559 | o I |
| b69ab31 | | | 560 | │ # top pad |
| b69ab31 | | | 561 | ╭─┤ # link line |
| b69ab31 | | | 562 | │ │ # pad line |
| b69ab31 | | | 563 | -------------------- |
| b69ab31 | | | 564 | o D |
| b69ab31 | | | 565 | │ # top pad |
| b69ab31 | | | 566 | ╭───╯ # link line |
| b69ab31 | | | 567 | │ # pad line |
| b69ab31 | | | 568 | -------------------- |
| b69ab31 | | | 569 | o H |
| b69ab31 | | | 570 | │ # top pad |
| b69ab31 | | | 571 | ├─╮ # link line |
| b69ab31 | | | 572 | │ │ # pad line |
| b69ab31 | | | 573 | -------------------- |
| b69ab31 | | | 574 | o C |
| b69ab31 | | | 575 | │ # top pad |
| b69ab31 | | | 576 | ╭─╯ # link line |
| b69ab31 | | | 577 | │ # pad line |
| b69ab31 | | | 578 | -------------------- |
| b69ab31 | | | 579 | o G |
| b69ab31 | | | 580 | │ # top pad |
| b69ab31 | | | 581 | ╭─┤ # link line |
| b69ab31 | | | 582 | │ │ # pad line |
| b69ab31 | | | 583 | -------------------- |
| b69ab31 | | | 584 | o Z |
| b69ab31 | | | 585 | # top pad |
| b69ab31 | | | 586 | # pad line |
| b69ab31 | | | 587 | -------------------- |
| b69ab31 | | | 588 | o B |
| b69ab31 | | | 589 | │ # top pad |
| b69ab31 | | | 590 | ╭───╯ # link line |
| b69ab31 | | | 591 | │ # pad line |
| b69ab31 | | | 592 | -------------------- |
| b69ab31 | | | 593 | o A |
| b69ab31 | | | 594 | # top pad |
| b69ab31 | | | 595 | # pad line |
| b69ab31 | | | 596 | --------------------" |
| b69ab31 | | | 597 | `); |
| b69ab31 | | | 598 | }); |
| b69ab31 | | | 599 | |
| b69ab31 | | | 600 | it('renders TEST_LONG_MESSAGES', () => { |
| b69ab31 | | | 601 | expect(render(TEST_LONG_MESSAGES)).toMatchInlineSnapshot(` |
| b69ab31 | | | 602 | " |
| b69ab31 | | | 603 | o F |
| b69ab31 | | | 604 | │ very long message 1 |
| b69ab31 | | | 605 | ├─┬─╮ very long message 2 |
| b69ab31 | | | 606 | │ │ │ very long message 3 |
| b69ab31 | | | 607 | │ │ ~ |
| b69ab31 | | | 608 | │ │ very long message 4 |
| b69ab31 | | | 609 | │ │ very long message 5 |
| b69ab31 | | | 610 | │ │ very long message 6 |
| b69ab31 | | | 611 | │ │ |
| b69ab31 | | | 612 | │ o E |
| b69ab31 | | | 613 | │ │ |
| b69ab31 | | | 614 | │ o D |
| b69ab31 | | | 615 | │ │ |
| b69ab31 | | | 616 | o │ C |
| b69ab31 | | | 617 | │ │ long message 1 |
| b69ab31 | | | 618 | ├─╯ long message 2 |
| b69ab31 | | | 619 | │ long message 3 |
| b69ab31 | | | 620 | │ |
| b69ab31 | | | 621 | o B |
| b69ab31 | | | 622 | │ |
| b69ab31 | | | 623 | o A |
| b69ab31 | | | 624 | │ long message 1 |
| b69ab31 | | | 625 | │ long message 2 |
| b69ab31 | | | 626 | ~ long message 3" |
| b69ab31 | | | 627 | `); |
| b69ab31 | | | 628 | }); |
| b69ab31 | | | 629 | |
| b69ab31 | | | 630 | it('renders TEST_OCTOPUS_BRANCH_AND_MERGE', () => { |
| b69ab31 | | | 631 | expect(render(TEST_OCTOPUS_BRANCH_AND_MERGE)).toMatchInlineSnapshot(` |
| b69ab31 | | | 632 | " |
| b69ab31 | | | 633 | o J |
| b69ab31 | | | 634 | │ |
| b69ab31 | | | 635 | ├─┬─╮ |
| b69ab31 | | | 636 | │ │ o I |
| b69ab31 | | | 637 | │ │ │ |
| b69ab31 | | | 638 | │ o │ H |
| b69ab31 | | | 639 | │ │ │ |
| b69ab31 | | | 640 | ╭─┼─┬─┬─╮ |
| b69ab31 | | | 641 | │ │ │ │ o G |
| b69ab31 | | | 642 | │ │ │ │ │ |
| b69ab31 | | | 643 | │ │ │ o │ E |
| b69ab31 | | | 644 | │ │ │ │ │ |
| b69ab31 | | | 645 | │ │ │ ├─╯ |
| b69ab31 | | | 646 | │ │ o │ D |
| b69ab31 | | | 647 | │ │ │ │ |
| b69ab31 | | | 648 | │ │ ├─╮ |
| b69ab31 | | | 649 | │ o │ │ C |
| b69ab31 | | | 650 | │ │ │ │ |
| b69ab31 | | | 651 | │ ├───╯ |
| b69ab31 | | | 652 | o │ │ F |
| b69ab31 | | | 653 | │ │ │ |
| b69ab31 | | | 654 | ├─╯ │ |
| b69ab31 | | | 655 | o │ B |
| b69ab31 | | | 656 | │ │ |
| b69ab31 | | | 657 | ├───╯ |
| b69ab31 | | | 658 | o A" |
| b69ab31 | | | 659 | `); |
| b69ab31 | | | 660 | }); |
| b69ab31 | | | 661 | |
| b69ab31 | | | 662 | it('renders TEST_RESERVED_COLUMN', () => { |
| b69ab31 | | | 663 | expect(render(TEST_RESERVED_COLUMN)).toMatchInlineSnapshot(` |
| b69ab31 | | | 664 | " |
| b69ab31 | | | 665 | o Z |
| b69ab31 | | | 666 | │ |
| b69ab31 | | | 667 | o Y |
| b69ab31 | | | 668 | │ |
| b69ab31 | | | 669 | o X |
| b69ab31 | | | 670 | │ |
| b69ab31 | | | 671 | ╭─╯ |
| b69ab31 | | | 672 | │ o W |
| b69ab31 | | | 673 | │ │ |
| b69ab31 | | | 674 | ├─╯ |
| b69ab31 | | | 675 | o G |
| b69ab31 | | | 676 | │ |
| b69ab31 | | | 677 | o F |
| b69ab31 | | | 678 | │ |
| b69ab31 | | | 679 | ├─╮ |
| b69ab31 | | | 680 | │ o E |
| b69ab31 | | | 681 | │ │ |
| b69ab31 | | | 682 | │ o D |
| b69ab31 | | | 683 | │ |
| b69ab31 | | | 684 | o C |
| b69ab31 | | | 685 | │ |
| b69ab31 | | | 686 | o B |
| b69ab31 | | | 687 | │ |
| b69ab31 | | | 688 | o A" |
| b69ab31 | | | 689 | `); |
| b69ab31 | | | 690 | }); |
| b69ab31 | | | 691 | |
| b69ab31 | | | 692 | it('renders TEST_SPLIT_PARENTS', () => { |
| b69ab31 | | | 693 | expect(render(TEST_SPLIT_PARENTS)).toMatchInlineSnapshot(` |
| b69ab31 | | | 694 | " |
| b69ab31 | | | 695 | o E |
| b69ab31 | | | 696 | │ |
| b69ab31 | | | 697 | ╭─┬─┬─┤ |
| b69ab31 | | | 698 | : │ │ : |
| b69ab31 | | | 699 | │ o │ │ D |
| b69ab31 | | | 700 | │ │ │ │ |
| b69ab31 | | | 701 | ╭─┴─╮ │ |
| b69ab31 | | | 702 | │ o │ C |
| b69ab31 | | | 703 | │ │ │ |
| b69ab31 | | | 704 | │ ├─╯ |
| b69ab31 | | | 705 | o │ B |
| b69ab31 | | | 706 | │ │ |
| b69ab31 | | | 707 | ├───╯ |
| b69ab31 | | | 708 | o A" |
| b69ab31 | | | 709 | `); |
| b69ab31 | | | 710 | expect(render(TEST_SPLIT_PARENTS, true)).toMatchInlineSnapshot(` |
| b69ab31 | | | 711 | " |
| b69ab31 | | | 712 | o E |
| b69ab31 | | | 713 | │ # top pad |
| b69ab31 | | | 714 | ╭─┬─┬─┤ # link line |
| b69ab31 | | | 715 | : │ │ : # pad line |
| b69ab31 | | | 716 | -------------------- |
| b69ab31 | | | 717 | o D |
| b69ab31 | | | 718 | │ # top pad |
| b69ab31 | | | 719 | ╭─┴─╮ # link line |
| b69ab31 | | | 720 | │ │ # pad line |
| b69ab31 | | | 721 | -------------------- |
| b69ab31 | | | 722 | o C |
| b69ab31 | | | 723 | │ # top pad |
| b69ab31 | | | 724 | │ # link line |
| b69ab31 | | | 725 | │ # pad line |
| b69ab31 | | | 726 | -------------------- |
| b69ab31 | | | 727 | o B |
| b69ab31 | | | 728 | │ # top pad |
| b69ab31 | | | 729 | │ # link line |
| b69ab31 | | | 730 | │ # pad line |
| b69ab31 | | | 731 | -------------------- |
| b69ab31 | | | 732 | o A |
| b69ab31 | | | 733 | # top pad |
| b69ab31 | | | 734 | # pad line |
| b69ab31 | | | 735 | --------------------" |
| b69ab31 | | | 736 | `); |
| b69ab31 | | | 737 | }); |
| b69ab31 | | | 738 | |
| b69ab31 | | | 739 | it('renders TEST_TERMINATIONS', () => { |
| b69ab31 | | | 740 | expect(render(TEST_TERMINATIONS)).toMatchInlineSnapshot(` |
| b69ab31 | | | 741 | " |
| b69ab31 | | | 742 | o K |
| b69ab31 | | | 743 | │ |
| b69ab31 | | | 744 | │ o J |
| b69ab31 | | | 745 | │ │ |
| b69ab31 | | | 746 | ├─╯ |
| b69ab31 | | | 747 | o I |
| b69ab31 | | | 748 | │ |
| b69ab31 | | | 749 | ╭─┼─╮ |
| b69ab31 | | | 750 | │ │ │ |
| b69ab31 | | | 751 | │ ~ │ |
| b69ab31 | | | 752 | │ │ |
| b69ab31 | | | 753 | o │ E |
| b69ab31 | | | 754 | │ │ |
| b69ab31 | | | 755 | │ o H |
| b69ab31 | | | 756 | │ │ |
| b69ab31 | | | 757 | ├───╯ |
| b69ab31 | | | 758 | o D |
| b69ab31 | | | 759 | │ |
| b69ab31 | | | 760 | │ |
| b69ab31 | | | 761 | ~ |
| b69ab31 | | | 762 | |
| b69ab31 | | | 763 | o C |
| b69ab31 | | | 764 | │ |
| b69ab31 | | | 765 | o B |
| b69ab31 | | | 766 | │ |
| b69ab31 | | | 767 | │ |
| b69ab31 | | | 768 | ~" |
| b69ab31 | | | 769 | `); |
| b69ab31 | | | 770 | }); |
| b69ab31 | | | 771 | }); |
| b69ab31 | | | 772 | |
| b69ab31 | | | 773 | function render(fixture: TestFixture, debugLinkLineFromNode = false): string { |
| b69ab31 | | | 774 | const {rows, reserve} = fixture; |
| b69ab31 | | | 775 | const renderer = new TextRenderer({debugLinkLineFromNode}); |
| b69ab31 | | | 776 | if (reserve != null) { |
| b69ab31 | | | 777 | for (const h of reserve) { |
| b69ab31 | | | 778 | renderer.reserve(h); |
| b69ab31 | | | 779 | } |
| b69ab31 | | | 780 | } |
| b69ab31 | | | 781 | const rendered = rows.map(([hash, parents, message]) => { |
| b69ab31 | | | 782 | // Convert parents from string to Ancestor[] |
| b69ab31 | | | 783 | const ancestors = parents.map(p => { |
| b69ab31 | | | 784 | if (p.startsWith('P:')) { |
| b69ab31 | | | 785 | return new Ancestor({hash: p.substring(2), type: AncestorType.Parent}); |
| b69ab31 | | | 786 | } else if (p.startsWith('A:')) { |
| b69ab31 | | | 787 | return new Ancestor({hash: p.substring(2), type: AncestorType.Ancestor}); |
| b69ab31 | | | 788 | } else { |
| b69ab31 | | | 789 | return new Ancestor({hash: undefined, type: AncestorType.Anonymous}); |
| b69ab31 | | | 790 | } |
| b69ab31 | | | 791 | }); |
| b69ab31 | | | 792 | return renderer.nextRow(hash, ancestors, message.trimEnd() + '\n'); |
| b69ab31 | | | 793 | }); |
| b69ab31 | | | 794 | return '\n' + rendered.join('').trimEnd(); |
| b69ab31 | | | 795 | } |