Move test uniqueness check outside of _generate_test

This logic really belongs to the main loop, where the used_tests
variable, keeping track of the tests created so far, lives.

Bug: 330885075
Change-Id: I19e525132865abab2e84a5bc39ae0e2a42a3f7bc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5374600
Commit-Queue: Jean-Philippe Gravel <jpgravel@chromium.org>
Reviewed-by: Andres Ricardo Perez <andresrperez@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1282135}
diff --git a/html/canvas/tools/gentestutilsunion.py b/html/canvas/tools/gentestutilsunion.py
index 31be4d0..3aad13b 100644
--- a/html/canvas/tools/gentestutilsunion.py
+++ b/html/canvas/tools/gentestutilsunion.py
@@ -471,25 +471,14 @@
 
 
 def _generate_test(test: _TestParams, jinja_env: jinja2.Environment,
-                   used_tests: DefaultDict[str, Set[_CanvasType]],
                    output_dirs: _OutputPaths) -> None:
     _validate_test(test)
 
-    name = test['name']
-
-    enabled_canvas_types = test['canvas_types']
-
     params = dict(test)
     params.update({
         'code': _expand_test_code(test['code']),
     })
 
-    already_tested = used_tests[name].intersection(enabled_canvas_types)
-    if already_tested:
-        raise InvalidTestDefinitionError(
-            f'Test {name} is defined twice for types {already_tested}')
-    used_tests[name].update(enabled_canvas_types)
-
     output_files = output_dirs.sub_path(params['file_name'])
 
     if 'reference' in test or 'html_reference' in test:
@@ -546,6 +535,15 @@
     return test_variants
 
 
+def _check_uniqueness(tested: DefaultDict[str, Set[_CanvasType]], name: str,
+                      canvas_types: FrozenSet[_CanvasType]) -> None:
+    already_tested = tested[name].intersection(canvas_types)
+    if already_tested:
+        raise InvalidTestDefinitionError(
+            f'Test {name} is defined twice for types {already_tested}')
+    tested[name].update(canvas_types)
+
+
 def generate_test_files(name_to_dir_file: str) -> None:
     """Generate Canvas tests from YAML file definition."""
     output_dirs = _OutputPaths(element='../element', offscreen='../offscreen')
@@ -608,7 +606,9 @@
             sub_dir = _get_test_sub_dir(variant['file_name'], name_to_sub_dir)
             output_sub_dirs = output_dirs.sub_path(sub_dir)
 
+            _check_uniqueness(used_tests, variant['name'],
+                              variant['canvas_types'])
             _generate_expected_image(variant, output_sub_dirs)
-            _generate_test(variant, jinja_env, used_tests, output_sub_dirs)
+            _generate_test(variant, jinja_env, output_sub_dirs)
 
     print()