1+ classdef tParallelizableBuildSummaryPlugin < matlab .unittest .TestCase
2+
3+ % Copyright 2026 The MathWorks, Inc.
4+
5+ properties
6+ TempFolder
7+ Plugin
8+ Runner
9+ end
10+
11+ methods (TestClassSetup )
12+ function setupPath(testCase )
13+ import matlab .unittest .fixtures .PathFixture ;
14+
15+ testCase .applyFixture(PathFixture(fileparts(fileparts(mfilename(" fullpath" )))));
16+ end
17+ end
18+
19+ methods (TestMethodSetup )
20+ function createPlugin(testCase )
21+ import matlab .unittest .fixtures .WorkingFolderFixture ;
22+
23+ testCase .applyFixture(WorkingFolderFixture );
24+ testCase.TempFolder = pwd();
25+
26+ testCase.Plugin = ParallelizableBuildSummaryPlugin(TempFolder = testCase .TempFolder);
27+ testCase.Runner = matlab .buildtool.BuildRunner.withNoPlugins();
28+ testCase .Runner.addPlugin(testCase .Plugin);
29+ end
30+ end
31+
32+ methods (Test )
33+ function runningBuildCreatesSummaryArtifact(testCase )
34+ plan = buildplan();
35+ plan(" t1" ) = Task();
36+ plan(" t2" ) = Task();
37+
38+ testCase .Runner.run(plan , [" t1" , " t2" ]);
39+
40+ name = " buildSummary" + getenv(" GITHUB_RUN_ID" ) + " .json" ;
41+ testCase .verifyTrue(isfile(fullfile(testCase .TempFolder, name )));
42+ end
43+
44+ function runningBuildCreatesSummaryArtifactWithExpectedTasks(testCase )
45+ plan = buildplan();
46+ plan(" t1" ) = Task();
47+ plan(" t2" ) = Task();
48+
49+ testCase .Runner.run(plan , [" t1" , " t2" ]);
50+
51+ name = " buildSummary" + getenv(" GITHUB_RUN_ID" ) + " .json" ;
52+ f = fullfile(testCase .TempFolder, name );
53+ testCase .assertTrue(isfile(f ));
54+
55+ s = readstruct(f );
56+
57+ testCase .verifySize(s , [1 2 ]);
58+ testCase .verifyEqual(s(1 ).name, " t1" );
59+ testCase .verifyEqual(s(2 ).name, " t2" );
60+ end
61+
62+ function summaryArtifactStatusesAreCorrect(testCase )
63+ plan = buildplan();
64+ plan(" t1" ) = Task();
65+ plan(" t2" ) = Task(Actions = @()error(" bam" ));
66+
67+ testCase .Runner.run(plan , [" t1" , " t2" ]);
68+
69+ name = " buildSummary" + getenv(" GITHUB_RUN_ID" ) + " .json" ;
70+ f = fullfile(testCase .TempFolder, name );
71+ testCase .assertTrue(isfile(f ));
72+
73+ s = readstruct(f );
74+
75+ testCase .verifySize(s , [1 2 ]);
76+
77+ testCase .verifyFalse(s(1 ).failed);
78+ testCase .verifyFalse(s(1 ).skipped);
79+
80+ testCase .verifyTrue(s(2 ).failed);
81+ testCase .verifyFalse(s(2 ).skipped);
82+ end
83+
84+ function runningBuildCreatesSummaryForTaskGroups(testCase )
85+ plan = buildplan();
86+ plan(" g:t" ) = Task();
87+
88+ testCase .Runner.run(plan , " g:t" );
89+
90+ name = " buildSummary" + getenv(" GITHUB_RUN_ID" ) + " .json" ;
91+ f = fullfile(testCase .TempFolder, name );
92+
93+ testCase .assertTrue(isfile(f ));
94+
95+ s = readstruct(f );
96+
97+ testCase .verifySize(s , [1 1 ]);
98+ testCase .verifyEqual(s(1 ).name, " g:t" );
99+ end
100+ end
101+
102+ end
103+
104+ function plugin = ParallelizableBuildSummaryPlugin(varargin )
105+ plugin = buildframework .ParallelizableBuildSummaryPlugin(varargin{: });
106+ end
107+
108+ function task = Task(varargin )
109+ task = matlab .buildtool.Task(varargin{: });
110+ end
0 commit comments