From 11ba9e85d40071d98afc32b428ee167788f8a72c Mon Sep 17 00:00:00 2001 From: gaaclarke <30870216+gaaclarke@users.noreply.github.com> Date: Tue, 8 Nov 2022 15:11:28 -0800 Subject: [PATCH] Clang-tidy: Fixed math on shard-id validator. (#37433) Clang-tidy: Fixed math on shard-id validator. --- tools/clang_tidy/lib/src/options.dart | 2 +- tools/clang_tidy/test/clang_tidy_test.dart | 46 +++++++++++++++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/tools/clang_tidy/lib/src/options.dart b/tools/clang_tidy/lib/src/options.dart index 1d262e3bce635..7e17e1f72e547 100644 --- a/tools/clang_tidy/lib/src/options.dart +++ b/tools/clang_tidy/lib/src/options.dart @@ -120,7 +120,7 @@ class Options { } final String? shardIdString = argResults['shard-id'] as String?; final int? shardId = shardIdString == null ? null : int.parse(shardIdString); - if (shardId != null && (shardId >= shardCommands.length || shardId < 0)) { + if (shardId != null && (shardId > shardCommands.length || shardId < 0)) { return Options._error('Invalid shard-id value: $shardId.', errSink: errSink); } return Options._fromArgResults( diff --git a/tools/clang_tidy/test/clang_tidy_test.dart b/tools/clang_tidy/test/clang_tidy_test.dart index 9d6738e52973c..73129a0f99665 100644 --- a/tools/clang_tidy/test/clang_tidy_test.dart +++ b/tools/clang_tidy/test/clang_tidy_test.dart @@ -2,12 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io' as io show File, Platform, stderr; +import 'dart:io' as io show Directory, File, Platform, stderr; import 'package:clang_tidy/clang_tidy.dart'; import 'package:clang_tidy/src/command.dart'; import 'package:clang_tidy/src/options.dart'; import 'package:litetest/litetest.dart'; +import 'package:path/path.dart' as path; import 'package:process_runner/process_runner.dart'; // Recorded locally from clang-tidy. @@ -38,6 +39,18 @@ Suppressed 3474 warnings (3466 in non-user code, 8 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 1 warning treated as error'''; +void _withTempFile(String prefix, void Function(String path) func) { + final String filePath = + path.join(io.Directory.systemTemp.path, '$prefix-temp-file'); + final io.File file = io.File(filePath); + file.createSync(); + try { + func(file.path); + } finally { + file.deleteSync(); + } +} + Future main(List args) async { if (args.isEmpty) { io.stderr.writeln( @@ -115,6 +128,37 @@ Future main(List args) async { )); }); + test('shard-id valid', () async { + _withTempFile('shard-id-valid', (String path) { + final Options options = Options.fromCommandLine( [ + '--compile-commands=$path', + '--shard-variants=variant', + '--shard-id=1', + ],); + expect(options.errorMessage, isNull); + expect(options.shardId, equals(1)); + }); + }); + + test('shard-id invalid', () async { + _withTempFile('shard-id-valid', (String path) { + final StringBuffer errBuffer = StringBuffer(); + final Options options = Options.fromCommandLine([ + '--compile-commands=$path', + '--shard-variants=variant', + '--shard-id=2', + ], errSink: errBuffer); + expect(options.errorMessage, isNotNull); + expect(options.shardId, isNull); + print('foo ${options.errorMessage}'); + expect( + options.errorMessage, + contains( + 'Invalid shard-id value', + )); + }); + }); + test('Error when --compile-commands path does not exist', () async { final StringBuffer outBuffer = StringBuffer(); final StringBuffer errBuffer = StringBuffer();