Skip to content

Commit

Permalink
Tests
Browse files Browse the repository at this point in the history
  • Loading branch information
carlosjs23 committed Jun 1, 2018
1 parent bfce58e commit f26b7ff
Show file tree
Hide file tree
Showing 9 changed files with 433 additions and 93 deletions.
331 changes: 245 additions & 86 deletions .idea/workspace.xml

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@
## [0.0.3] - 01/06/2018

* BSD License
* API Docs
* API Docs
* Child property is now required for Button widget.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ To use the native_ui package, follow the [package installation instructions](htt
### Examples

#### Platform Native Button

Renders an iOS style button when the TargetPlatform is iOS and an Android style button when the TargetPlatform is Android.
```dart
Button(
onPressed: _login(context),
Expand All @@ -28,7 +28,7 @@ Button(
```

#### ConditionalBuilder

Render a Widget based on a boolean expression.
```dart
ConditionalBuilder(
condition: _isLogging,
Expand All @@ -49,7 +49,7 @@ ConditionalBuilder(
```

### PlatformSwitcher

Unique widget for switch widgets between platforms.
```dart
PlatformSwitcher(
iOSChild: iOSButton(
Expand Down
3 changes: 2 additions & 1 deletion lib/src/button.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import 'package:flutter/material.dart';
import 'package:native_ui/native_ui.dart';
import 'ios/button.dart';

/// Wrapper for Android and iOS style buttons.
///
/// Provides a common API for both platform buttons
///
class Button extends StatelessWidget {
/// Creates an native-styled platform button.
/// Creates a native-styled platform button.
const Button({
Key key,
@required this.onPressed,
Expand Down
2 changes: 1 addition & 1 deletion lib/src/conditional_builder.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';

// Render a Widget based on an boolean expression.
// Render a Widget based on a boolean expression.
class ConditionalBuilder extends StatelessWidget {
const ConditionalBuilder({
Key key,
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: native_ui
description: NativeUI widgets for Android and iOS
version: 0.0.2
version: 0.0.3
author: Carlos A. Escobar <[email protected]>
homepage: https://github.com

Expand Down
63 changes: 63 additions & 0 deletions test/button_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:native_ui/native_ui.dart';

const TextStyle testStyle = const TextStyle(
fontFamily: 'Ahem',
fontSize: 10.0,
);

void main() {
testWidgets('Button wrapper renders MaterialButton when TargetPlatform is Android', (WidgetTester tester) async {
await tester.pumpWidget(
Theme(
data: ThemeData(
platform: TargetPlatform.android,
),
child: boilerplate(
child: Button(
child: Text(
'X',
style: testStyle,
),
onPressed: null,
),
),
),
);
final RenderBox button = tester.renderObject(find.byType(MaterialButton));
expect(
button.size,
const Size(88.0, 36.0),
);
});

testWidgets('Button wrapper renders iOSButton when TargetPlatform is iOS', (WidgetTester tester) async {
await tester.pumpWidget(
Theme(
data: ThemeData(
platform: TargetPlatform.iOS,
),
child: boilerplate(
child: Button(
child: const Text('X', style: testStyle),
onPressed: null,
),
),
),
);
final RenderBox button = tester.renderObject(find.byType(iOSButton));
expect(
button.size,
const Size.square(44.0),
);
});
}

Widget boilerplate({Widget child}) {
return new Directionality(
textDirection: TextDirection.ltr,
child: new Center(child: child),
);
}
43 changes: 43 additions & 0 deletions test/conditional_builder_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:native_ui/native_ui.dart';

void main() {
testWidgets('Does renders trueWidget when condition is true', (WidgetTester tester) async {
await tester.pumpWidget(
boilerplate(
child: const ConditionalBuilder(
condition: true,
trueWidget: const Text('True'),
falseWidget: const Text('False'))),
);
final RenderParagraph textWidget = tester.renderObject(find.byType(Text));
expect(
textWidget.text.text,
'True',
);
});

testWidgets('Does renders falseWidget when condition is false', (WidgetTester tester) async {
await tester.pumpWidget(
boilerplate(
child: const ConditionalBuilder(
condition: false,
trueWidget: const Text('True'),
falseWidget: const Text('False'))),
);
final RenderParagraph textWidget = tester.renderObject(find.byType(Text));
expect(
textWidget.text.text,
'False',
);
});
}

Widget boilerplate({Widget child}) {
return new Directionality(
textDirection: TextDirection.ltr,
child: new Center(child: child),
);
}
73 changes: 73 additions & 0 deletions test/platform_switcher_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:native_ui/native_ui.dart';

void main() {
testWidgets('Android platform', (WidgetTester tester) async {
await tester.pumpWidget(
Theme(
data: ThemeData(
platform: TargetPlatform.android,
),
child: boilerplate(
child: PlatformSwitcher(
androidChild: new Text('Android'),
iOSChild: new Text('iOS'),
fuchsiaChild: new Text('fuchsia'),
),
),
),
);
final RenderParagraph textWidget = tester.renderObject(find.byType(Text));
expect(textWidget.text.text, 'Android');
});

testWidgets('iOS platform', (WidgetTester tester) async {
await tester.pumpWidget(
Theme(
data: ThemeData(
platform: TargetPlatform.iOS,
),
child: boilerplate(
child: PlatformSwitcher(
androidChild: new Text('Android'),
iOSChild: new Text('iOS'),
fuchsiaChild: new Text('fuchsia'),
),
),
),
);
final RenderParagraph textWidget = tester.renderObject(find.byType(Text));
expect(textWidget.text.text, 'iOS');
});

testWidgets('fucshia platform', (WidgetTester tester) async {
await tester.pumpWidget(
Theme(
data: ThemeData(
platform: TargetPlatform.fuchsia,
),
child: boilerplate(
child: PlatformSwitcher(
androidChild: new Text('Android'),
iOSChild: new Text('iOS'),
fuchsiaChild: new Text('fuchsia'),
),
),
),
);
final RenderParagraph textWidget = tester.renderObject(find.byType(Text));
expect(
textWidget.text.text,
'fuchsia',
);
});
}

Widget boilerplate({Widget child}) {
return new Directionality(
textDirection: TextDirection.ltr,
child: new Center(child: child),
);
}

0 comments on commit f26b7ff

Please sign in to comment.