style(lint): flutter analyze 경고 91건 → 0건 전체 정리
- analysis_options.yaml: freezed/g.dart 생성 파일 분석 제외
- game_text_l10n.dart: if문 중괄호 추가, 불필요한 ${} 제거
- iap_service.dart: 불필요한 dart:typed_data import 제거
- pq_logic.dart, combat_text_frames.dart: dangling library doc → library; 추가
- save_picker_dialog.dart: __ → _ (unnecessary_underscores)
- desktop_equipment_panel.dart: 불필요한 import 제거
- test 파일: _localVar → localVar 네이밍, ignore_for_file 추가
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
// ignore_for_file: inference_failure_on_collection_literal
|
||||
|
||||
import 'dart:collection';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:asciineverdie/src/core/model/equipment_container.dart';
|
||||
import 'package:asciineverdie/src/core/model/equipment_item.dart';
|
||||
import 'package:asciineverdie/src/core/model/equipment_slot.dart';
|
||||
import 'package:asciineverdie/src/core/model/item_stats.dart';
|
||||
@@ -17,7 +18,7 @@ void main() {
|
||||
// 헬퍼: 모든 필드가 채워진 GameSave 생성
|
||||
// =========================================================================
|
||||
|
||||
GameSave _createFullSave() {
|
||||
GameSave createFullSave() {
|
||||
return GameSave(
|
||||
version: kSaveVersion,
|
||||
rngState: 12345,
|
||||
@@ -144,10 +145,10 @@ void main() {
|
||||
// =========================================================================
|
||||
|
||||
test('toJson() → fromJson() 라운드트립 — 모든 필드 보존', () {
|
||||
final original = _createFullSave();
|
||||
final original = createFullSave();
|
||||
// jsonEncode → jsonDecode로 순수 Map 변환 (freezed 객체 제거)
|
||||
final json = jsonDecode(jsonEncode(original.toJson()))
|
||||
as Map<String, dynamic>;
|
||||
final json =
|
||||
jsonDecode(jsonEncode(original.toJson())) as Map<String, dynamic>;
|
||||
final restored = GameSave.fromJson(json);
|
||||
|
||||
// traits 검증
|
||||
@@ -184,10 +185,7 @@ void main() {
|
||||
expect(restored.equipment.weapon, equals('Flaming Sword'));
|
||||
expect(restored.equipment.shield, equals('Tower Shield'));
|
||||
expect(restored.equipment.bestIndex, equals(0));
|
||||
expect(
|
||||
restored.equipment.weaponItem.rarity,
|
||||
equals(ItemRarity.epic),
|
||||
);
|
||||
expect(restored.equipment.weaponItem.rarity, equals(ItemRarity.epic));
|
||||
expect(restored.equipment.weaponItem.level, equals(10));
|
||||
expect(restored.equipment.weaponItem.stats.atk, equals(50));
|
||||
|
||||
@@ -201,7 +199,10 @@ void main() {
|
||||
expect(restored.progress.task.max, equals(100));
|
||||
expect(restored.progress.quest.position, equals(3));
|
||||
expect(restored.progress.exp.position, equals(500));
|
||||
expect(restored.progress.currentTask.caption, equals('Executing a Goblin'));
|
||||
expect(
|
||||
restored.progress.currentTask.caption,
|
||||
equals('Executing a Goblin'),
|
||||
);
|
||||
expect(restored.progress.currentTask.type, equals(TaskType.kill));
|
||||
expect(
|
||||
restored.progress.currentTask.monsterGrade,
|
||||
@@ -252,7 +253,14 @@ void main() {
|
||||
'version': 2,
|
||||
'rng': 100,
|
||||
'traits': {'name': 'OldHero', 'race': 'Elf', 'klass': 'Mage'},
|
||||
'stats': {'str': 10, 'con': 10, 'dex': 10, 'int': 10, 'wis': 10, 'cha': 10},
|
||||
'stats': {
|
||||
'str': 10,
|
||||
'con': 10,
|
||||
'dex': 10,
|
||||
'int': 10,
|
||||
'wis': 10,
|
||||
'cha': 10,
|
||||
},
|
||||
'inventory': {'gold': 500, 'items': []},
|
||||
'equipment': {
|
||||
'weapon': 'Ancient Sword',
|
||||
@@ -291,7 +299,10 @@ void main() {
|
||||
// 레거시 아이템은 level 1, common으로 변환
|
||||
expect(restored.equipment.weaponItem.level, equals(1));
|
||||
expect(restored.equipment.weaponItem.rarity, equals(ItemRarity.common));
|
||||
expect(restored.equipment.weaponItem.slot, equals(EquipmentSlot.weapon));
|
||||
expect(
|
||||
restored.equipment.weaponItem.slot,
|
||||
equals(EquipmentSlot.weapon),
|
||||
);
|
||||
|
||||
// 버전 정보 보존
|
||||
expect(restored.version, equals(2));
|
||||
@@ -299,30 +310,34 @@ void main() {
|
||||
|
||||
test('v2 세이브에 monetization 없으면 null', () {
|
||||
// jsonDecode로 순수 Map<String, dynamic> 생성 (타입 캐스팅 호환)
|
||||
final legacyJson = jsonDecode(jsonEncode({
|
||||
'version': 2,
|
||||
'rng': 0,
|
||||
'traits': {},
|
||||
'stats': {},
|
||||
'inventory': {'gold': 0, 'items': []},
|
||||
'equipment': {
|
||||
'weapon': 'Keyboard',
|
||||
'shield': '',
|
||||
'helm': '',
|
||||
'hauberk': '',
|
||||
'brassairts': '',
|
||||
'vambraces': '',
|
||||
'gauntlets': '',
|
||||
'gambeson': '',
|
||||
'cuisses': '',
|
||||
'greaves': '',
|
||||
'sollerets': '',
|
||||
'bestIndex': 0,
|
||||
},
|
||||
'skills': [],
|
||||
'progress': {},
|
||||
'queue': [],
|
||||
})) as Map<String, dynamic>;
|
||||
final legacyJson =
|
||||
jsonDecode(
|
||||
jsonEncode({
|
||||
'version': 2,
|
||||
'rng': 0,
|
||||
'traits': {},
|
||||
'stats': {},
|
||||
'inventory': {'gold': 0, 'items': []},
|
||||
'equipment': {
|
||||
'weapon': 'Keyboard',
|
||||
'shield': '',
|
||||
'helm': '',
|
||||
'hauberk': '',
|
||||
'brassairts': '',
|
||||
'vambraces': '',
|
||||
'gauntlets': '',
|
||||
'gambeson': '',
|
||||
'cuisses': '',
|
||||
'greaves': '',
|
||||
'sollerets': '',
|
||||
'bestIndex': 0,
|
||||
},
|
||||
'skills': [],
|
||||
'progress': {},
|
||||
'queue': [],
|
||||
}),
|
||||
)
|
||||
as Map<String, dynamic>;
|
||||
|
||||
final restored = GameSave.fromJson(legacyJson);
|
||||
|
||||
@@ -404,10 +419,7 @@ void main() {
|
||||
'plot': {'pos': 0, 'max': 1},
|
||||
'exp': {'pos': 0, 'max': 1},
|
||||
'encumbrance': {'pos': 0, 'max': 1},
|
||||
'taskInfo': {
|
||||
'caption': 'Unknown task',
|
||||
'type': 'nonexistent_type',
|
||||
},
|
||||
'taskInfo': {'caption': 'Unknown task', 'type': 'nonexistent_type'},
|
||||
},
|
||||
'queue': [
|
||||
{
|
||||
@@ -424,10 +436,7 @@ void main() {
|
||||
// 알 수 없는 enum 값은 기본값으로 대체
|
||||
expect(restored.progress.currentTask.type, equals(TaskType.neutral));
|
||||
expect(restored.queue.entries.first.kind, equals(QueueKind.task));
|
||||
expect(
|
||||
restored.queue.entries.first.taskType,
|
||||
equals(TaskType.neutral),
|
||||
);
|
||||
expect(restored.queue.entries.first.taskType, equals(TaskType.neutral));
|
||||
});
|
||||
});
|
||||
|
||||
@@ -448,9 +457,7 @@ void main() {
|
||||
});
|
||||
|
||||
test('skills가 빈 배열이면 빈 스킬북', () {
|
||||
final json = <String, dynamic>{
|
||||
'skills': [],
|
||||
};
|
||||
final json = <String, dynamic>{'skills': []};
|
||||
|
||||
final restored = GameSave.fromJson(json);
|
||||
|
||||
@@ -494,9 +501,7 @@ void main() {
|
||||
});
|
||||
|
||||
test('queue가 빈 배열이면 빈 큐', () {
|
||||
final json = <String, dynamic>{
|
||||
'queue': [],
|
||||
};
|
||||
final json = <String, dynamic>{'queue': []};
|
||||
|
||||
final restored = GameSave.fromJson(json);
|
||||
|
||||
@@ -504,9 +509,7 @@ void main() {
|
||||
});
|
||||
|
||||
test('monetization null이면 null 유지', () {
|
||||
final json = <String, dynamic>{
|
||||
'monetization': null,
|
||||
};
|
||||
final json = <String, dynamic>{'monetization': null};
|
||||
|
||||
final restored = GameSave.fromJson(json);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user