flutter_sdui_test 1.0.1 copy "flutter_sdui_test: ^1.0.1" to clipboard
flutter_sdui_test: ^1.0.1 copied to clipboard

Testing utilities for Flutter SDUI framework. Provides sduiGoldenTest() for side-by-side native vs SDUI golden comparisons.

flutter_sdui_test #

Golden test utilities for the Flutter SDUI framework. Drop it in dev_dependencies, call sduiGoldenTest(), and get a side-by-side pixel comparison of your native widget against its SDUI-rendered counterpart — with zero boilerplate.

Step 4 of 4 in the flutter_sdui toolchain. flutter_sdui_annotations marks your widgets → flutter_sdui_converter emits the JSON schema → flutter_sdui_kit renders it at runtime → this package verifies native and SDUI output match pixel-for-pixel.


Installation #

# pubspec.yaml
dependencies:
  flutter_sdui_annotations: ^1.0.0   # annotate your widgets
  flutter_sdui_kit: ^0.3.1           # runtime renderer

dev_dependencies:
  flutter_sdui_converter: ^1.0.0     # generate schema files used in schemaPath
  flutter_sdui_test: ^1.0.0          # this package

Quick start #

import 'package:flutter_sdui_test/flutter_sdui_test.dart';

void main() {
  sduiGoldenTest(
    'login screen',
    nativeWidget: const LoginScreen(),
    schemaPath: 'test/fixtures/login.json', // generated by flutter_sdui_converter
  );
}
# First generate the schema with flutter_sdui_converter
dart run flutter_sdui_converter --input . --output test/fixtures/login.json

flutter test --update-goldens   # generate golden files
flutter test                    # compare on subsequent runs

API #

sduiGoldenTest #

Registers a testWidgets group that renders nativeWidget alongside the SDUI equivalent and compares them pixel-by-pixel.

sduiGoldenTest(
  'screen name',
  nativeWidget: const MyWidget(),

  // Provide exactly one of:
  schemaPath: 'test/fixtures/screen.json',   // file-system path
  schema: {'screen': 'x', 'body': {}},       // inline map

  // Optional
  devices: [SduiDevices.phone, SduiDevices.tablet],
  threshold: 0.01,   // max tolerated pixel diff ratio (0.0 = exact match)
);

For each device, two golden files are produced:

test/goldens/
  {test_name}_{device}_native.png
  {test_name}_{device}_sdui.png

Paths are relative to the test file.

Device presets #

SduiDevices.phone    // 390 × 844   (iPhone 14)
SduiDevices.tablet   // 820 × 1180  (iPad Air)
SduiDevices.small    // 360 × 800   (Android compact)

Custom device:

const myDevice = SduiDevice(name: 'desktop', size: Size(1440, 900));
sduiGoldenTest('home', nativeWidget: const HomeScreen(), schema: {...}, devices: [myDevice]);

SduiTestSchema #

For manual test setup when you need the schema object directly:

// From a file
final schema = await SduiTestSchema.fromPath('test/fixtures/screen.json');

// From an inline map
final schema = SduiTestSchema.fromJson({'screen': 'x', 'body': {}});

schema.json           // Map<String, dynamic>
schema.toJsonString() // JSON-encoded string

sduiTestTheme #

Wraps widgets in a ThemeData using the deterministic Ahem font. This eliminates false-positive golden diffs caused by font-rendering differences between machines or Flutter SDK versions.

sduiGoldenTest applies it automatically. Use it directly when pumping widgets manually:

await tester.pumpWidget(
  MaterialApp(theme: sduiTestTheme(), home: MyWidget()),
);

loadSduiFonts #

Call in setUpAll to use your real app fonts instead of Ahem:

setUpAll(() async {
  await loadSduiFonts();
});

Fonts must be declared in your pubspec.yaml under flutter: fonts:.

SduiDiffReporter #

Formats failure output. Used internally by sduiGoldenTest but available for custom comparators:

// Detailed box-drawing failure message
SduiDiffReporter.failure(
  testName: 'login',
  deviceName: 'phone',
  diffPercent: 0.05,
  nativePath: 'goldens/login_phone_native.png',
  sduiPath: 'goldens/login_phone_sdui.png',
);

// One-line summary
SduiDiffReporter.summary(testName: 'login', deviceName: 'phone', diffPercent: 0.05);

How threshold comparison works #

When threshold > 0.0, sduiGoldenTest installs a custom goldenFileComparator scoped to the test (restored in addTearDown). On first run, if no golden exists, it writes the file and passes. On subsequent runs, it computes the pixel diff ratio — if it exceeds threshold, the test fails with a detailed message including the file paths and a --update-goldens hint.


Part of the flutter_sdui workspace #

This package is developed in the chinmay-singh-modak/sdui monorepo alongside the rest of the toolchain.

Package Role pub.dev
flutter_sdui_annotations Annotations pub.dev/packages/flutter_sdui_annotations
flutter_sdui_converter CLI + programmatic converter tool pub.dev/packages/flutter_sdui_converter
flutter_sdui_test Golden test utilities (this package) pub.dev/packages/flutter_sdui_test
flutter_sdui_kit SDUI runtime renderer (SduiWidget) pub.dev/packages/flutter_sdui_kit
2
likes
150
points
199
downloads

Documentation

API reference

Publisher

verified publisherchinmaysinghmodak.com

Weekly Downloads

Testing utilities for Flutter SDUI framework. Provides sduiGoldenTest() for side-by-side native vs SDUI golden comparisons.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter, flutter_sdui_kit, flutter_test

More

Packages that depend on flutter_sdui_test