diff --git a/dev/bots/analyze.dart b/dev/bots/analyze.dart index abf4869904..f6c9ec227d 100644 --- a/dev/bots/analyze.dart +++ b/dev/bots/analyze.dart @@ -201,6 +201,10 @@ Future run(List arguments) async { } finally { outDir.deleteSync(recursive: true); } + + // Ensure gen_default links the correct files + printProgress('Correct file names in gen_defaults.dart...'); + await verifyTokenTemplatesUpdateCorrectFiles(flutterRoot); } @@ -278,6 +282,56 @@ Future verifyNoDoubleClamp(String workingDirectory) async { } } +/// Verify Token Templates are mapped to correct file names while generating +/// M3 defaults in /dev/tools/gen_defaults/bin/gen_defaults.dart. +Future verifyTokenTemplatesUpdateCorrectFiles(String workingDirectory) async { + final List errors = []; + + String getMaterialDirPath(List lines) { + final String line = lines.firstWhere((String line) => line.contains('String materialLib')); + final String relativePath = line.substring(line.indexOf("'") + 1, line.lastIndexOf("'")); + return path.join(workingDirectory, relativePath); + } + + String getFileName(String line) { + const String materialLibString = r"'$materialLib/"; + final String leftClamp = line.substring(line.indexOf(materialLibString) + materialLibString.length); + return leftClamp.substring(0, leftClamp.indexOf("'")); + } + + final String genDefaultsBinDir = '$workingDirectory/dev/tools/gen_defaults/bin'; + final File file = File(path.join(genDefaultsBinDir, 'gen_defaults.dart')); + final List lines = file.readAsLinesSync(); + final String materialDirPath = getMaterialDirPath(lines); + bool atLeastOneTargetLineExists = false; + + for (final String line in lines) { + if (line.contains('updateFile();')) { + atLeastOneTargetLineExists = true; + final String fileName = getFileName(line); + final String filePath = path.join(materialDirPath, fileName); + final File file = File(filePath); + + if (!file.existsSync()) { + errors.add('file $filePath does not exist.'); + } + } + } + + assert(atLeastOneTargetLineExists, 'No lines exist that this test expects to ' + 'verify. Check if the target file is correct or remove this test'); + + // Fail if any errors + if (errors.isNotEmpty) { + final String s = errors.length > 1 ? 's' : ''; + final String itThem = errors.length > 1 ? 'them' : 'it'; + foundError([ + ...errors, + '${bold}Please correct the file name$s or remove $itThem from /dev/tools/gen_defaults/bin/gen_defaults.dart$reset', + ]); + } +} + /// Verify tool test files end in `_test.dart`. /// /// The test runner will only recognize files ending in `_test.dart` as tests to diff --git a/dev/tools/gen_defaults/bin/gen_defaults.dart b/dev/tools/gen_defaults/bin/gen_defaults.dart index 342c6d2c06..25c23a8711 100644 --- a/dev/tools/gen_defaults/bin/gen_defaults.dart +++ b/dev/tools/gen_defaults/bin/gen_defaults.dart @@ -17,17 +17,17 @@ import 'dart:convert'; import 'dart:io'; +import 'package:gen_defaults/action_chip_template.dart'; import 'package:gen_defaults/app_bar_template.dart'; import 'package:gen_defaults/banner_template.dart'; import 'package:gen_defaults/button_template.dart'; import 'package:gen_defaults/card_template.dart'; import 'package:gen_defaults/checkbox_template.dart'; -import 'package:gen_defaults/chip_action_template.dart'; -import 'package:gen_defaults/chip_filter_template.dart'; -import 'package:gen_defaults/chip_input_template.dart'; import 'package:gen_defaults/dialog_template.dart'; import 'package:gen_defaults/fab_template.dart'; +import 'package:gen_defaults/filter_chip_template.dart'; import 'package:gen_defaults/icon_button_template.dart'; +import 'package:gen_defaults/input_chip_template.dart'; import 'package:gen_defaults/input_decorator_template.dart'; import 'package:gen_defaults/navigation_bar_template.dart'; import 'package:gen_defaults/navigation_rail_template.dart'; @@ -104,6 +104,7 @@ Future main(List args) async { tokens['colorsLight'] = _readTokenFile('color_light.json'); tokens['colorsDark'] = _readTokenFile('color_dark.json'); + ActionChipTemplate('ActionChip', '$materialLib/action_chip.dart', tokens).updateFile(); AppBarTemplate('AppBar', '$materialLib/app_bar.dart', tokens).updateFile(); BannerTemplate('Banner', '$materialLib/banner.dart', tokens).updateFile(); ButtonTemplate('md.comp.elevated-button', 'ElevatedButton', '$materialLib/elevated_button.dart', tokens).updateFile(); @@ -113,13 +114,12 @@ Future main(List args) async { ButtonTemplate('md.comp.text-button', 'TextButton', '$materialLib/text_button.dart', tokens).updateFile(); CardTemplate('Card', '$materialLib/card.dart', tokens).updateFile(); CheckboxTemplate('Checkbox', '$materialLib/checkbox.dart', tokens).updateFile(); - ChipActionTemplate('ActionChip', '$materialLib/action_chip.dart', tokens).updateFile(); - ChipFilterTemplate('FilterChip', '$materialLib/filter_chip.dart', tokens).updateFile(); - ChipFilterTemplate('FilterChip', '$materialLib/choice_chip.dart', tokens).updateFile(); - ChipInputTemplate('InputChip', '$materialLib/input_chip.dart', tokens).updateFile(); DialogTemplate('Dialog', '$materialLib/dialog.dart', tokens).updateFile(); FABTemplate('FAB', '$materialLib/floating_action_button.dart', tokens).updateFile(); + FilterChipTemplate('ChoiceChip', '$materialLib/choice_chip.dart', tokens).updateFile(); + FilterChipTemplate('FilterChip', '$materialLib/filter_chip.dart', tokens).updateFile(); IconButtonTemplate('IconButton', '$materialLib/icon_button.dart', tokens).updateFile(); + InputChipTemplate('InputChip', '$materialLib/input_chip.dart', tokens).updateFile(); InputDecoratorTemplate('InputDecorator', '$materialLib/input_decorator.dart', tokens).updateFile(); NavigationBarTemplate('NavigationBar', '$materialLib/navigation_bar.dart', tokens).updateFile(); NavigationRailTemplate('NavigationRail', '$materialLib/navigation_rail.dart', tokens).updateFile(); diff --git a/dev/tools/gen_defaults/lib/chip_action_template.dart b/dev/tools/gen_defaults/lib/action_chip_template.dart similarity index 95% rename from dev/tools/gen_defaults/lib/chip_action_template.dart rename to dev/tools/gen_defaults/lib/action_chip_template.dart index b225c75a04..44d25692f7 100644 --- a/dev/tools/gen_defaults/lib/chip_action_template.dart +++ b/dev/tools/gen_defaults/lib/action_chip_template.dart @@ -4,9 +4,9 @@ import 'template.dart'; -class ChipActionTemplate extends TokenTemplate { +class ActionChipTemplate extends TokenTemplate { - const ChipActionTemplate(super.blockName, super.fileName, super.tokens); + const ActionChipTemplate(super.blockName, super.fileName, super.tokens); static const String tokenGroup = 'md.comp.assist-chip'; static const String variant = '.flat'; diff --git a/dev/tools/gen_defaults/lib/chip_filter_template.dart b/dev/tools/gen_defaults/lib/filter_chip_template.dart similarity index 96% rename from dev/tools/gen_defaults/lib/chip_filter_template.dart rename to dev/tools/gen_defaults/lib/filter_chip_template.dart index d383f342d9..74eaf45ceb 100644 --- a/dev/tools/gen_defaults/lib/chip_filter_template.dart +++ b/dev/tools/gen_defaults/lib/filter_chip_template.dart @@ -4,8 +4,8 @@ import 'template.dart'; -class ChipFilterTemplate extends TokenTemplate { - const ChipFilterTemplate(super.blockName, super.fileName, super.tokens); +class FilterChipTemplate extends TokenTemplate { + const FilterChipTemplate(super.blockName, super.fileName, super.tokens); static const String tokenGroup = 'md.comp.filter-chip'; static const String variant = '.flat'; diff --git a/dev/tools/gen_defaults/lib/chip_input_template.dart b/dev/tools/gen_defaults/lib/input_chip_template.dart similarity index 95% rename from dev/tools/gen_defaults/lib/chip_input_template.dart rename to dev/tools/gen_defaults/lib/input_chip_template.dart index 5fb9037a87..2a4d3136ab 100644 --- a/dev/tools/gen_defaults/lib/chip_input_template.dart +++ b/dev/tools/gen_defaults/lib/input_chip_template.dart @@ -4,8 +4,8 @@ import 'template.dart'; -class ChipInputTemplate extends TokenTemplate { - const ChipInputTemplate(super.blockName, super.fileName, super.tokens); +class InputChipTemplate extends TokenTemplate { + const InputChipTemplate(super.blockName, super.fileName, super.tokens); static const String tokenGroup = 'md.comp.input-chip'; static const String variant = ''; diff --git a/packages/flutter/test/material/chip_action_test.dart b/packages/flutter/test/material/action_chip_test.dart similarity index 100% rename from packages/flutter/test/material/chip_action_test.dart rename to packages/flutter/test/material/action_chip_test.dart diff --git a/packages/flutter/test/material/chip_choice_test.dart b/packages/flutter/test/material/choice_chip_test.dart similarity index 100% rename from packages/flutter/test/material/chip_choice_test.dart rename to packages/flutter/test/material/choice_chip_test.dart diff --git a/packages/flutter/test/material/chip_filter_test.dart b/packages/flutter/test/material/filter_chip_test.dart similarity index 100% rename from packages/flutter/test/material/chip_filter_test.dart rename to packages/flutter/test/material/filter_chip_test.dart diff --git a/packages/flutter/test/material/chip_input_test.dart b/packages/flutter/test/material/input_chip_test.dart similarity index 100% rename from packages/flutter/test/material/chip_input_test.dart rename to packages/flutter/test/material/input_chip_test.dart