Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions pkgs/code_assets/analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ analyzer:
strict-casts: true
strict-inference: true
strict-raw-types: true
plugins:
- custom_lint

linter:
rules:
Expand All @@ -15,3 +17,7 @@ linter:
- prefer_expression_function_bodies
- prefer_final_in_for_each
- prefer_final_locals

custom_lint:
rules:
- avoid_import_outside_src
3 changes: 3 additions & 0 deletions pkgs/code_assets/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ dependencies:
path: ../hooks/

dev_dependencies:
custom_lint: ^0.7.5
dart_flutter_team_lints: ^3.5.1
json_schema: ^5.2.0
repo_lint_rules:
path: ../repo_lint_rules/
test: ^1.25.15
6 changes: 6 additions & 0 deletions pkgs/data_assets/analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ analyzer:
strict-casts: true
strict-inference: true
strict-raw-types: true
plugins:
- custom_lint

linter:
rules:
Expand All @@ -15,3 +17,7 @@ linter:
- prefer_expression_function_bodies
- prefer_final_in_for_each
- prefer_final_locals

custom_lint:
rules:
- avoid_import_outside_src
3 changes: 3 additions & 0 deletions pkgs/data_assets/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ dependencies:
path: ../hooks/

dev_dependencies:
custom_lint: ^0.7.5
dart_flutter_team_lints: ^3.5.1
json_schema: ^5.2.0
repo_lint_rules:
path: ../repo_lint_rules/
test: ^1.25.15
7 changes: 7 additions & 0 deletions pkgs/hooks/analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ analyzer:
strict-casts: true
strict-inference: true
strict-raw-types: true
plugins:
- custom_lint

linter:
rules:
Expand All @@ -15,3 +17,8 @@ linter:
- prefer_expression_function_bodies
- prefer_final_in_for_each
- prefer_final_locals

custom_lint:
rules:
- avoid_import_outside_src

3 changes: 3 additions & 0 deletions pkgs/hooks/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,12 @@ environment:
sdk: '>=3.7.0 <4.0.0'

dev_dependencies:
custom_lint: ^0.7.5
dart_flutter_team_lints: ^3.5.1
json_schema: ^5.2.0
json_syntax_generator:
path: ../json_syntax_generator/
path: ^1.9.1
repo_lint_rules:
path: ../repo_lint_rules/
test: ^1.25.15
6 changes: 6 additions & 0 deletions pkgs/json_syntax_generator/analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ analyzer:
strict-casts: true
strict-inference: true
strict-raw-types: true
plugins:
- custom_lint

linter:
rules:
Expand All @@ -15,3 +17,7 @@ linter:
- prefer_expression_function_bodies
- prefer_final_in_for_each
- prefer_final_locals

custom_lint:
rules:
- avoid_import_outside_src
3 changes: 3 additions & 0 deletions pkgs/json_syntax_generator/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ dependencies:
json_schema: ^5.2.0

dev_dependencies:
custom_lint: ^0.7.5
dart_flutter_team_lints: ^3.5.1
path: ^1.9.1
repo_lint_rules:
path: ../repo_lint_rules/
test: ^1.25.15
7 changes: 7 additions & 0 deletions pkgs/native_assets_builder/analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ analyzer:
strict-casts: true
strict-inference: true
strict-raw-types: true
plugins:
- custom_lint

linter:
rules:
Expand All @@ -15,3 +17,8 @@ linter:
- prefer_expression_function_bodies
- prefer_final_in_for_each
- prefer_final_locals

custom_lint:
rules:
- avoid_import_outside_src

4 changes: 3 additions & 1 deletion pkgs/native_assets_builder/lib/src/model/hook_result.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ import 'package:collection/collection.dart';
import 'package:native_assets_cli/native_assets_cli.dart';
import 'package:native_assets_cli/native_assets_cli_builder.dart';

import '../../native_assets_builder.dart';
import '../build_runner/build_runner.dart';
import 'build_result.dart';
import 'link_result.dart';

/// The result from a [NativeAssetsBuildRunner.build] or
/// [NativeAssetsBuildRunner.link].
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import 'package:file/file.dart';
import 'package:package_config/package_config.dart';

import '../../native_assets_builder.dart';
import '../build_runner/build_runner.dart';

/// Directory layout for dealing with native assets.
///
Expand Down
3 changes: 3 additions & 0 deletions pkgs/native_assets_builder/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ dependencies:
yaml_edit: ^2.2.2

dev_dependencies:
custom_lint: ^0.7.5
dart_flutter_team_lints: ^3.5.1
file_testing: ^3.0.2
repo_lint_rules:
path: ../repo_lint_rules/
test: ^1.25.15
6 changes: 6 additions & 0 deletions pkgs/native_assets_cli/analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ analyzer:
strict-casts: true
strict-inference: true
strict-raw-types: true
plugins:
- custom_lint

linter:
rules:
Expand All @@ -15,3 +17,7 @@ linter:
- prefer_expression_function_bodies
- prefer_final_in_for_each
- prefer_final_locals

custom_lint:
rules:
- avoid_import_outside_src
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// expect_lint: avoid_import_outside_src
import '../native_assets_cli.dart';

const x = Builder;
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@

import 'package:collection/collection.dart';

import '../../code_assets.dart';
import 'config.dart';
import 'os.dart';
import 'syntax.g.dart' as syntax;

/// The configuration for a C toolchain.
Expand Down
14 changes: 9 additions & 5 deletions pkgs/native_assets_cli/lib/src/code_assets/testing.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,16 @@

import 'dart:async';

import '../../code_assets.dart';
import '../../code_assets_builder.dart';
import '../../native_assets_cli.dart';
import '../../native_assets_cli_builder.dart';
import '../../test.dart';
import '../config.dart';
import '../test.dart';
import '../validation.dart';
import 'architecture.dart';
import 'c_compiler_config.dart';
import 'config.dart';
import 'extension.dart';
import 'ios_sdk.dart';
import 'link_mode_preference.dart';
import 'os.dart';

/// Validate a code build hook; this will throw an exception on validation
/// errors.
Expand Down
7 changes: 4 additions & 3 deletions pkgs/native_assets_cli/lib/src/data_assets/validation.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@

import 'dart:io';

import '../../data_assets.dart';
import '../../native_assets_cli.dart';
import '../../native_assets_cli_builder.dart';
import '../config.dart';
import '../encoded_asset.dart';
import '../extension.dart';
import 'data_asset.dart';
import 'syntax.g.dart' as syntax;

Future<ValidationErrors> validateDataAssetBuildInput(BuildInput input) async =>
Expand Down
101 changes: 101 additions & 0 deletions pkgs/native_assets_cli/lib/src/test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:async';
import 'dart:convert';
import 'dart:io';

import 'package:yaml/yaml.dart';

import 'config.dart';
import 'validation.dart';

/// Validate a build hook; this will throw an exception on validation errors.
///
/// This is intended to be used from tests, e.g.:
///
/// ```
/// test('test my build hook', () async {
/// await testCodeBuildHook(
/// ...
/// );
/// });
/// ```
Future<void> testBuildHook({
required void Function(BuildInputBuilder) extraInputSetup,
required FutureOr<void> Function(List<String> arguments) mainMethod,
required FutureOr<void> Function(BuildInput input, BuildOutput output) check,
bool? linkingEnabled,
}) async {
const keepTempKey = 'KEEP_TEMPORARY_DIRECTORIES';

final tempDir = await Directory.systemTemp.createTemp();

try {
// Deal with Windows temp folder aliases.
final tempUri = Directory(
await tempDir.resolveSymbolicLinks(),
).uri.normalizePath();
final outputDirectory = tempUri.resolve('output/');
final outputDirectoryShared = tempUri.resolve('output_shared/');
final outputFile = tempUri.resolve('output.json');

await Directory.fromUri(outputDirectory).create();
await Directory.fromUri(outputDirectoryShared).create();

final inputBuilder = BuildInputBuilder();
inputBuilder
..setupShared(
packageRoot: Directory.current.uri,
packageName: _readPackageNameFromPubspec(),
outputFile: outputFile,
outputDirectoryShared: outputDirectoryShared,
)
..config.setupBuild(linkingEnabled: true);
extraInputSetup(inputBuilder);

final input = BuildInput(inputBuilder.json);

final inputUri = tempUri.resolve('input.json');
_writeJsonTo(inputUri, input.json);
await mainMethod(['--config=${inputUri.toFilePath()}']);
final output = BuildOutput(_readJsonFrom(input.outputFile));

// Test conformance of protocol invariants.
final validationErrors = await validateBuildOutput(input, output);
if (validationErrors.isNotEmpty) {
throw ValidationFailure(
'encountered build output validation issues: $validationErrors',
);
}

// Run user-defined tests.
await check(input, output);
} finally {
final keepTempDir = (Platform.environment[keepTempKey] ?? '').isNotEmpty;
if (!keepTempDir) {
tempDir.deleteSync(recursive: true);
} else {
print('$keepTempKey ${tempDir.uri}');
}
}
}

void _writeJsonTo(Uri uri, Map<String, Object?> json) {
final encoder = const JsonEncoder().fuse(const Utf8Encoder());
File.fromUri(uri).writeAsBytesSync(encoder.convert(json));
}

Map<String, Object?> _readJsonFrom(Uri uri) {
final decoder = const Utf8Decoder().fuse(const JsonDecoder());
final bytes = File.fromUri(uri).readAsBytesSync();
return decoder.convert(bytes) as Map<String, Object?>;
}

String _readPackageNameFromPubspec() {
final uri = Directory.current.uri.resolve('pubspec.yaml');
final readAsString = File.fromUri(uri).readAsStringSync();
final yaml = loadYaml(readAsString) as YamlMap;
return yaml['name'] as String;
}
4 changes: 2 additions & 2 deletions pkgs/native_assets_cli/lib/src/validation.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

import 'dart:io';

import '../native_assets_cli.dart';
import '../native_assets_cli_builder.dart';
import 'config.dart';
import 'encoded_asset.dart';
import 'hooks/syntax.g.dart' as syntax;

typedef ValidationErrors = List<String>;
Expand Down
Loading
Loading