Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
0d9ca33
feat(test): add testing view stub to debug menu
sneurlax Aug 14, 2025
4e83345
feat(test): add tor test suite
sneurlax Aug 14, 2025
13ea4c4
feat(test): add monero wallet test suite
sneurlax Aug 14, 2025
bb2a199
fix(test): make individual test cards clickable
sneurlax Aug 14, 2025
9cc89d6
fix(test): remove empty logo space
sneurlax Aug 14, 2025
34aa5d1
feat(test): add swb option
sneurlax Aug 14, 2025
e0b9377
feat(test): add wownero integration test
sneurlax Aug 15, 2025
6e10d52
feat(test): add salvium integration test
sneurlax Aug 15, 2025
2e7c0ee
feat(test): add epic cash integration test
sneurlax Aug 15, 2025
8b6adba
feat(test): add firo integration test
sneurlax Aug 15, 2025
e7e7964
feat(test): ltc mweb integration test
sneurlax Aug 15, 2025
92d44a9
feat(test): put test suite cards in a scrollable list view
sneurlax Aug 15, 2025
854a401
fix(test): fix the reset button
sneurlax Aug 15, 2025
a7c414e
fix(test): fix the mweb test
sneurlax Aug 15, 2025
21e0cf7
fix(test): fix litecoin mweb test
sneurlax Aug 15, 2025
203b32f
Merge branch 'staging' into testing
sneurlax Sep 17, 2025
83e7c82
Merge remote-tracking branch 'origin/fix/epic' into testing
sneurlax Sep 17, 2025
0d2ee6f
test(monero): add Monero SWB round trip test
sneurlax Sep 17, 2025
de7d53f
test(wownero): add Wownero SWB round trip test
sneurlax Sep 17, 2025
4130100
test(salvium): add Salvium SWB round trip test
sneurlax Sep 17, 2025
a6be31c
fix(test): allow iui e2e tests to re-run
sneurlax Sep 17, 2025
8a93e53
Merge branch 'staging' into testing
sneurlax Dec 11, 2025
874854c
fix(test): cs_monero, cs_wownero updates
sneurlax Dec 11, 2025
0697345
fix(test): fix swb handling and unrelated dart format changes thruout
sneurlax Dec 11, 2025
db3d349
test: reproduce epic v4 crash on wallet creation/restoration
sneurlax Dec 11, 2025
c8a9746
feat(epic): use epic & epic-wallet v4, but with a patched epic-wallet
sneurlax Dec 15, 2025
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
2 changes: 1 addition & 1 deletion crypto_plugins/flutter_libepiccash
Submodule flutter_libepiccash updated 54 files
+0 −3 .gitmodules
+28 −21 README.md
+2 −2 analysis_options.yaml
+0 −35 android/src/main/kotlin/com/example/flutter_libepiccash/FlutterLibepiccashPlugin.kt
+21 −2 example/lib/wallet_info_view.dart
+0 −4 example/linux/flutter/generated_plugin_registrant.cc
+1 −1 example/linux/flutter/generated_plugins.cmake
+0 −2 example/macos/Flutter/GeneratedPluginRegistrant.swift
+29 −29 example/pubspec.lock
+0 −3 example/windows/flutter/generated_plugin_registrant.cc
+1 −1 example/windows/flutter/generated_plugins.cmake
+46 −0 ffigen.yaml
+0 −73 ios/Classes/FlutterLibepiccashPlugin.h
+0 −15 ios/Classes/FlutterLibepiccashPlugin.m
+0 −61 ios/Classes/SwiftFlutterLibepiccashPlugin.swift
+140 −216 lib/epic_cash.dart
+0 −8 lib/flutter_libepiccash.dart
+0 −17 lib/flutter_libepiccash_method_channel.dart
+0 −29 lib/flutter_libepiccash_platform_interface.dart
+170 −281 lib/lib.dart
+1,401 −0 lib/src/bindings_generated.dart
+72 −0 lib/src/errors.dart
+155 −0 lib/src/ffi_worker.dart
+103 −0 lib/src/parsing.dart
+6 −11 linux/CMakeLists.txt
+0 −70 linux/flutter_libepiccash_plugin.cc
+0 −26 linux/include/flutter_libepiccash/flutter_libepiccash_plugin.h
+0 −65 macos/Classes/FlutterLibepiccashPlugin.swift
+8 −7 pubspec.yaml
+2,446 −1,593 rust/Cargo.lock
+23 −12 rust/Cargo.toml
+0 −1 rust/epic-wallet
+4 −3 rust/src/config.rs
+301 −38 rust/src/ffi.rs
+845 −13 rust/src/lib.rs
+8 −4 rust/src/listener.rs
+3 −3 rust/src/mnemonic.rs
+67 −76 rust/src/wallet.rs
+142 −45 rust/target/epic_cash_wallet.h
+0 −14 scripts/windows/README.md
+0 −43 scripts/windows/build_all.ps1
+25 −0 test/balances_parsing_test.dart
+26 −0 test/errors_test.dart
+36 −0 test/ffi_string_free_test.dart
+0 −24 test/flutter_libepiccash_method_channel_test.dart
+0 −29 test/flutter_libepiccash_test.dart
+36 −0 test/parsing_test.dart
+76 −0 test/transaction_model_test.dart
+30 −0 test/transactions_parsing_test.dart
+6 −19 windows/CMakeLists.txt
+0 −59 windows/flutter_libepiccash_plugin.cpp
+0 −32 windows/flutter_libepiccash_plugin.h
+0 −12 windows/flutter_libepiccash_plugin_c_api.cpp
+0 −23 windows/include/flutter_libepiccash/flutter_libepiccash_plugin_c_api.h
18 changes: 18 additions & 0 deletions lib/pages/settings_views/global_settings_view/hidden_settings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,24 @@ class HiddenSettings extends StatelessWidget {
);
},
),
const SizedBox(height: 12),
Consumer(
builder: (_, ref, __) {
return GestureDetector(
onTap: () => Navigator.of(context).pushNamed("/testing"),
child: RoundedWhiteContainer(
child: Text(
"Testing",
style: STextStyles.button(context).copyWith(
color: Theme.of(context)
.extension<StackColors>()!
.accentColorDark,
),
),
),
);
},
),
// const SizedBox(
// height: 12,
// ),
Expand Down
150 changes: 150 additions & 0 deletions lib/pages/testing/sub_widgets/test_suite_card.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
/*
* This file is part of Stack Wallet.
*
* Copyright (c) 2025 Cypher Stack
* All Rights Reserved.
* The code is distributed under GPLv3 license, see LICENSE file for details.
* Generated by Cypher Stack on 2025-08-14
*
*/

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

import '../../../services/testing/testing_models.dart';
import '../../../services/testing/testing_service.dart';
import '../../../themes/stack_colors.dart';
import '../../../utilities/text_styles.dart';
import '../../../widgets/loading_indicator.dart';
import '../../../widgets/rounded_white_container.dart';

class TestSuiteCard extends ConsumerWidget {
const TestSuiteCard({
super.key,
required this.testType,
required this.status,
this.onTap,
});

final TestType testType;
final TestSuiteStatus status;
final VoidCallback? onTap;

@override
Widget build(BuildContext context, WidgetRef ref) {
final testingService = ref.read(testingServiceProvider.notifier);
final colors = Theme.of(context).extension<StackColors>()!;

return GestureDetector(
onTap: onTap,
child: RoundedWhiteContainer(
padding: const EdgeInsets.all(2),
child: Stack(
children: [
Padding(
padding: const EdgeInsets.all(10),
child: Row(
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
testingService.getDisplayNameForTest(testType),
style: STextStyles.titleBold12(context),
),
const SizedBox(height: 2),
Text(
_getSubtitleForStatus(status),
style: STextStyles.label(context).copyWith(
color: _getColorForStatus(status, colors),
),
),
],
),
),
const SizedBox(width: 12),
const SizedBox(
width: 20,
height: 20,
),
],
),
),
Positioned.fill(
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.end,
children: [
Padding(
padding: const EdgeInsets.only(right: 12),
child: _buildStatusIndicator(status, colors),
),
],
),
),
],
),
),
);
}

Widget _buildStatusIndicator(TestSuiteStatus status, StackColors colors) {
switch (status) {
case TestSuiteStatus.waiting:
return Icon(
Icons.schedule,
size: 20,
color: colors.textSubtitle1,
);
case TestSuiteStatus.running:
return const SizedBox(
width: 20,
height: 20,
child: LoadingIndicator(
width: 20,
height: 20,
),
);
case TestSuiteStatus.passed:
return Icon(
Icons.check_circle,
size: 20,
color: colors.accentColorGreen,
);
case TestSuiteStatus.failed:
return Icon(
Icons.error,
size: 20,
color: colors.accentColorRed,
);
}
}

String _getSubtitleForStatus(TestSuiteStatus status) {
switch (status) {
case TestSuiteStatus.waiting:
return "Ready to test";
case TestSuiteStatus.running:
return "Running tests...";
case TestSuiteStatus.passed:
return "All tests passed";
case TestSuiteStatus.failed:
return "Tests failed";
}
}

Color _getColorForStatus(TestSuiteStatus status, StackColors colors) {
switch (status) {
case TestSuiteStatus.waiting:
return colors.textSubtitle1;
case TestSuiteStatus.running:
return colors.accentColorGreen;
case TestSuiteStatus.passed:
return colors.accentColorGreen;
case TestSuiteStatus.failed:
return colors.accentColorRed;
}
}
}
Loading
Loading