Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DRAFT: Visual tests in playrigth with a function list #9481

Draft
wants to merge 8 commits into
base: master
Choose a base branch
from

Conversation

asturur
Copy link
Member

@asturur asturur commented Nov 4, 2023

Motivation

This is an idea / proposal to have something simpler to setup when doing visual tests.
As the old QUNIT-VISUAL we can just prepare a list of functions with some metadata and have them run in sequence.
Those will run opening a single browser window and a single ci action, deprecating the old qunit-visual that runs on 3 node versions and 2 browsers.

The code is a bit messy and is not integrated ( on purpose ) with our generic pattern for single interactive e2e tests.
Eventually also my before function would be moved away from where i added it and just be specific of this kind of test.

I didn't convert more tests because i wanted to talk about it first.
Also is not urgent.

@asturur asturur marked this pull request as draft November 4, 2023 12:51
Copy link
Contributor

github-actions bot commented Nov 4, 2023

Build Stats

file / KB (diff) bundled minified
fabric 910.507 (+0.169) 305.103 (+0.026)

Copy link
Contributor

github-actions bot commented Nov 4, 2023

Coverage after merging create-tests-rendering-same-window into master will be

82.92%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
index.node.ts7.69%100%0%14.29%17, 20, 23, 35, 38, 41
src
   ClassRegistry.ts100%100%100%100%
   Collection.ts94.71%94.64%86.67%97.09%101, 104, 207–208, 233–234
   CommonMethods.ts96.55%87.50%100%100%9
   Intersection.ts100%100%100%100%
   Observable.ts87.76%85.29%87.50%89.58%134–135, 160–161, 32–33, 41, 50, 78, 89
   Point.ts100%100%100%100%
   Shadow.ts98.36%95.65%100%100%178
   cache.ts97.06%90%100%100%57
   config.ts75%66.67%66.67%82.76%130, 138, 138, 138, 138, 138–140, 151–153
   constants.ts100%100%100%100%
src/Pattern
   Pattern.ts92.31%91.89%90%93.55%119, 130, 139, 32, 95
src/brushes
   BaseBrush.ts100%100%100%100%
   CircleBrush.ts0%0%0%0%108, 108, 108, 110, 112, 114–116, 118–121, 128–129, 13, 136, 138, 23–24, 32–36, 40–44, 51–54, 62–66, 68, 76, 76, 76, 76, 76–77, 79, 79, 79–82, 84, 92–93, 95, 97–99
   PatternBrush.ts97.06%87.50%100%100%21
   PencilBrush.ts91.06%82.35%100%93.81%122–123, 152, 152–154, 176, 176, 276, 280, 285–286, 68–69, 84–85
   SprayBrush.ts0%0%0%0%107, 107, 107, 107, 107–108, 110–111, 118–119, 121, 123–127, 136, 140–141, 141, 149, 149, 149–152, 154–157, 161–162, 164, 166–169, 17, 172, 179, 18, 180, 182, 184–185, 187, 194–195, 197–198, 20, 201, 201, 208, 208, 21, 212, 22, 22, 22–24, 28, 32, 39, 46, 53, 60, 67, 84–86, 94–96, 98–99
src/canvas
   Canvas.ts78.99%76.67%83.05%80.04%1007, 1007, 1007–1009, 1009, 1009, 1016–1017, 1025–1026, 1026, 1026–1027, 1033, 1035, 1063–1065, 1068–1069, 1073–1074, 1197–1199, 1202–1203, 1276, 1393, 1515, 159, 184, 291–292, 295–299, 304, 327–328, 333–338, 358, 358, 358–359, 359, 359–360, 368, 373–374, 374, 374–375, 377, 386, 392–393, 393, 393, 43, 436, 444, 448, 448, 448–449, 451, 47, 533–534, 534, 534–535, 541, 541, 541–543, 563, 565, 565, 565–566, 566, 566, 569, 569, 569–570, 573, 582–583, 585–586, 588, 588–589, 591–592, 604–605, 605, 605–606, 608–613, 619, 626, 663, 663, 663, 665, 667–672, 678, 684, 684, 684–685, 687, 690, 695, 708, 736, 736, 797–798, 798, 798, 798, 798, 798, 801–802, 805, 805–807, 810–811, 887, 899, 906, 906, 906, 919, 952, 973–974, 990–991, 991, 991–993, 996–997, 997, 997, 999
   CanvasOptions.ts100%100%100%100%
   SelectableCanvas.ts94.34%91.94%94.34%96.21%1096, 1098, 1100–1101, 300, 470–471, 473–474, 474, 474, 523–524, 585–586, 599, 639–641, 673, 678–679, 706–707, 896, 896–897, 900, 920, 920, 969, 977
   StaticCanvas.ts96.78%93.09%100%98.53%1031, 1041, 1093–1094, 1097, 1132–1133, 1209, 1218, 1218, 1222, 1222, 1269–1270, 187–188, 204, 571, 583–584, 914–915, 915, 915–916
   StaticCanvasOptions.ts100%100%100%100%
   TextEditingManager.ts84.31%71.43%91.67%88%17–18, 18, 18–19, 19, 19
src/canvas/DOMManagers
   CanvasDOMManager.ts95.52%70%100%100%21–22, 29
   StaticCanvasDOMManager.ts97.50%88.89%100%100%33
   util.ts86.67%80.56%83.33%93.94%14, 26, 63–64, 67, 67, 74, 93–94
src/color
   Color.ts94.96%91.67%96.30%96.05%233, 258–259, 267–268, 48
   color_map.ts100%100%100%100%
   constants.ts100%100%100%100%
   util.ts85.71%76.92%100%89.74%55–56, 56, 58, 58, 58–59, 61–62, 89
src/controls
   Control.ts94.44%93.10%91.67%96.77%183, 249, 354
   changeWidth.ts100%100%100%100%
   commonControls.ts100%100%100%100%
   controlRendering.ts81.63%78%100%84.78%106, 111, 121, 121, 45, 50, 61, 61, 65–72, 81–82
   drag.ts100%100%100%100%
   fireEvent.ts88.89%75%100%100%13
   polyControl.ts7.25%0%0%13.51%103, 108, 120, 120, 120, 120, 120, 122–125, 125, 128, 135, 17, 25–29, 29, 29, 29, 29, 29, 29, 29, 50–56, 56, 56, 56, 56, 58, 63–64, 66, 76, 82–84, 84, 86, 89–90, 90, 90, 90, 90, 92, 97
   rotate.ts19.57%12.50%50%21.43%41, 45, 51, 51, 51–52, 55–57, 59, 59, 59, 59, 59–61, 61, 61–63, 65, 65, 65–67, 67, 67–68, 73, 73, 73–74, 76, 78, 80–81
   scale.ts93.57%92.94%100%93.67%129–130, 132–134, 148–149, 181–183, 42
   scaleSkew.ts78.79%64.29%100%85.71%27, 29, 29, 29, 31, 33, 35
   skew.ts91.03%79.31%100%97.67%131–132, 163–164, 171, 177, 179
   util.ts100%100%100%100%
   wrapWithFireEvent.ts100%100%100%100%
   wrapWithFixedAnchor.ts100%100%100%100%
src/env
  &

@ShaMan123
Copy link
Contributor

please merge #9110 #9333 before you migrate the tests

@ShaMan123
Copy link
Contributor

ShaMan123 commented Nov 6, 2023

#9110 does what you suggest, using a single browser to run all the snapshots. It is very fast.
I remeber you had some things you wanted to change there.

Copy link
Contributor

@ShaMan123 ShaMan123 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems that Polyline code has creeped in from another branch
I would do this differently as explained in the comments

if (testCase.disabled !== 'node') {
await test.step(`node - ${testCase.title}`, async () => {
// we want the browser snapshot of a test to be committed and not the node snapshot
config.config.updateSnapshots = 'none';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is wrong because it will override the -u flag passed in argv

Comment on lines +59 to +78
export async function beforeRenderTest(
cb: (
canvas: Canvas
) => AsyncReturnValue<{ title: string; boundFunction: () => void }[]>,
options
) {
const el = document.querySelector<HTMLCanvasElement>('#canvas');
const canvas = new Canvas(el, options);
// cb has to bind the rendering test to the specific canvas and add a clear before the test
const renderingTests = await cb(canvas);
renderingTests.forEach((renderTest) => {
if (renderingTestMap.has(renderTest.title)) {
throw new Error(
`test identifiers must be unique: ${renderTest.title} is already defined`
);
}
renderingTestMap.set(renderTest.title, renderTest.boundFunction);
});
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure I under this.
Do you want to create a new canvas for every test?
Why? What is the gain?
What about simply resizing the canvas before the test and adding a canvas.clear() after the snapshot call?
Seems more straight forward, simpler and faster and can be exposed on the CanvasUtil.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants