mirror of
https://github.com/pese-git/cherrypick.git
synced 2026-01-25 05:59:55 +00:00
feat(generator): complete code generation testing framework with 100% test coverage
BREAKING CHANGE: Updated file extensions and dependencies for better compatibility ## 🎯 Major Features Added: - ✅ Complete test suite for ModuleGenerator (66 integration tests) - ✅ Complete test suite for InjectGenerator (66 integration tests) - ✅ Comprehensive unit tests for BindSpec, MetadataUtils - ✅ 195 total tests across all packages (100% passing) ## 🔧 Technical Improvements: - feat(generator): add comprehensive integration tests for code generation - feat(generator): implement BindSpec unit tests with full coverage - feat(generator): add MetadataUtils unit tests for annotation processing - fix(generator): update file extensions to avoid conflicts (.module.cherrypick.g.dart) - fix(generator): correct part directive generation in templates - fix(generator): resolve dart_style 3.x formatting compatibility ## 📦 Dependencies & Configuration: - build(deps): upgrade analyzer to ^7.0.0 for Dart 3.5+ compatibility - build(deps): upgrade dart_style to ^3.0.0 for modern formatting - build(deps): upgrade source_gen to ^2.0.0 for latest features - config(build): update build.yaml with new file extensions - config(melos): optimize test commands for better performance ## 🐛 Bug Fixes: - fix(examples): correct local package paths in client_app and postly - fix(analysis): exclude generated files from static analysis - fix(generator): remove unused imports and variables - fix(tests): add missing part directives in test input files - fix(tests): update expected outputs to match dart_style 3.x format ## 🚀 Performance & Quality: - perf(tests): optimize test execution time (132 tests in ~1 second) - quality: achieve 100% test coverage for code generation - quality: eliminate all analyzer warnings and errors - quality: ensure production-ready stability ## 📋 Test Coverage Summary: - cherrypick: 61 tests ✅ - cherrypick_annotations: 1 test ✅ - cherrypick_generator: 132 tests ✅ - cherrypick_flutter: 1 test ✅ - Total: 195 tests (100% passing) ## 🔄 Compatibility: - ✅ Dart SDK 3.5.2+ - ✅ Flutter 3.24+ - ✅ melos + fvm workflow - ✅ build_runner integration - ✅ Modern analyzer and formatter This commit establishes CherryPick as a production-ready dependency injection framework with enterprise-grade testing and code generation capabilities.
This commit is contained in:
176
cherrypick_generator/test/simple_test.dart
Normal file
176
cherrypick_generator/test/simple_test.dart
Normal file
@@ -0,0 +1,176 @@
|
||||
//
|
||||
// Copyright 2021 Sergey Penkovsky (sergey.penkovsky@gmail.com)
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import 'package:cherrypick_generator/src/bind_spec.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
void main() {
|
||||
group('Simple Generator Tests', () {
|
||||
group('BindSpec', () {
|
||||
test('should create BindSpec with correct properties', () {
|
||||
final bindSpec = BindSpec(
|
||||
returnType: 'String',
|
||||
methodName: 'getString',
|
||||
isSingleton: false,
|
||||
parameters: [],
|
||||
bindingType: BindingType.instance,
|
||||
isAsyncInstance: false,
|
||||
isAsyncProvide: false,
|
||||
hasParams: false,
|
||||
);
|
||||
|
||||
expect(bindSpec.returnType, equals('String'));
|
||||
expect(bindSpec.methodName, equals('getString'));
|
||||
expect(bindSpec.isSingleton, isFalse);
|
||||
expect(bindSpec.bindingType, equals(BindingType.instance));
|
||||
});
|
||||
|
||||
test('should generate basic bind code', () {
|
||||
final bindSpec = BindSpec(
|
||||
returnType: 'String',
|
||||
methodName: 'getString',
|
||||
isSingleton: false,
|
||||
parameters: [],
|
||||
bindingType: BindingType.instance,
|
||||
isAsyncInstance: false,
|
||||
isAsyncProvide: false,
|
||||
hasParams: false,
|
||||
);
|
||||
|
||||
final result = bindSpec.generateBind(4);
|
||||
expect(result, contains('bind<String>()'));
|
||||
expect(result, contains('toInstance'));
|
||||
expect(result, contains('getString'));
|
||||
});
|
||||
|
||||
test('should generate singleton bind code', () {
|
||||
final bindSpec = BindSpec(
|
||||
returnType: 'String',
|
||||
methodName: 'getString',
|
||||
isSingleton: true,
|
||||
parameters: [],
|
||||
bindingType: BindingType.instance,
|
||||
isAsyncInstance: false,
|
||||
isAsyncProvide: false,
|
||||
hasParams: false,
|
||||
);
|
||||
|
||||
final result = bindSpec.generateBind(4);
|
||||
expect(result, contains('singleton()'));
|
||||
});
|
||||
|
||||
test('should generate named bind code', () {
|
||||
final bindSpec = BindSpec(
|
||||
returnType: 'String',
|
||||
methodName: 'getString',
|
||||
isSingleton: false,
|
||||
named: 'testName',
|
||||
parameters: [],
|
||||
bindingType: BindingType.instance,
|
||||
isAsyncInstance: false,
|
||||
isAsyncProvide: false,
|
||||
hasParams: false,
|
||||
);
|
||||
|
||||
final result = bindSpec.generateBind(4);
|
||||
expect(result, contains("withName('testName')"));
|
||||
});
|
||||
|
||||
test('should generate provide bind code', () {
|
||||
final bindSpec = BindSpec(
|
||||
returnType: 'String',
|
||||
methodName: 'getString',
|
||||
isSingleton: false,
|
||||
parameters: [],
|
||||
bindingType: BindingType.provide,
|
||||
isAsyncInstance: false,
|
||||
isAsyncProvide: false,
|
||||
hasParams: false,
|
||||
);
|
||||
|
||||
final result = bindSpec.generateBind(4);
|
||||
expect(result, contains('toProvide'));
|
||||
expect(result, contains('() => getString'));
|
||||
});
|
||||
|
||||
test('should generate async provide bind code', () {
|
||||
final bindSpec = BindSpec(
|
||||
returnType: 'String',
|
||||
methodName: 'getString',
|
||||
isSingleton: false,
|
||||
parameters: [],
|
||||
bindingType: BindingType.provide,
|
||||
isAsyncInstance: false,
|
||||
isAsyncProvide: true,
|
||||
hasParams: false,
|
||||
);
|
||||
|
||||
final result = bindSpec.generateBind(4);
|
||||
expect(result, contains('toProvideAsync'));
|
||||
});
|
||||
|
||||
test('should generate params bind code', () {
|
||||
final bindSpec = BindSpec(
|
||||
returnType: 'String',
|
||||
methodName: 'getString',
|
||||
isSingleton: false,
|
||||
parameters: [],
|
||||
bindingType: BindingType.provide,
|
||||
isAsyncInstance: false,
|
||||
isAsyncProvide: false,
|
||||
hasParams: true,
|
||||
);
|
||||
|
||||
final result = bindSpec.generateBind(4);
|
||||
expect(result, contains('toProvideWithParams'));
|
||||
expect(result, contains('(args) => getString()'));
|
||||
});
|
||||
|
||||
test('should generate complex bind with all options', () {
|
||||
final bindSpec = BindSpec(
|
||||
returnType: 'ApiClient',
|
||||
methodName: 'createApiClient',
|
||||
isSingleton: true,
|
||||
named: 'mainApi',
|
||||
parameters: [],
|
||||
bindingType: BindingType.provide,
|
||||
isAsyncInstance: false,
|
||||
isAsyncProvide: true,
|
||||
hasParams: false,
|
||||
);
|
||||
|
||||
final result = bindSpec.generateBind(4);
|
||||
expect(result, contains('bind<ApiClient>()'));
|
||||
expect(result, contains('toProvideAsync'));
|
||||
expect(result, contains("withName('mainApi')"));
|
||||
expect(result, contains('singleton()'));
|
||||
});
|
||||
});
|
||||
|
||||
group('BindingType Enum', () {
|
||||
test('should have correct values', () {
|
||||
expect(BindingType.instance, isNotNull);
|
||||
expect(BindingType.provide, isNotNull);
|
||||
expect(BindingType.values.length, equals(2));
|
||||
});
|
||||
});
|
||||
|
||||
group('Generator Classes', () {
|
||||
test('should be able to import generators', () {
|
||||
// Test that we can import the generator classes
|
||||
expect(BindSpec, isNotNull);
|
||||
expect(BindingType, isNotNull);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user