From fb04bed5fefceba0eb9bc02db0561e1ff77208d3 Mon Sep 17 00:00:00 2001 From: Aditya Gurjar Date: Sat, 17 Aug 2019 18:23:50 +0530 Subject: [PATCH] Tests for Conversation Page --- lib/pages/ConversationPage.dart | 2 + lib/pages/ConversationPageList.dart | 3 +- lib/widgets/ChatAppBar.dart | 173 ++++++++++++---------- lib/widgets/ChatItemWidget.dart | 4 +- lib/widgets/InputWidget.dart | 6 +- test/main_test.dart | 14 ++ test/pages/ConversationPageList_test.dart | 19 +++ test/pages/ConversationPage_test.dart | 25 ++++ test/widget_test.dart | 17 --- test/widgets/ChatAppBar_test.dart | 20 +++ test/widgets/ChatItemWidget_test.dart | 20 +++ test/widgets/ChatListWidget_test.dart | 12 ++ test/widgets/InputWidget_test.dart | 19 +++ 13 files changed, 235 insertions(+), 99 deletions(-) create mode 100644 test/main_test.dart create mode 100644 test/pages/ConversationPageList_test.dart create mode 100644 test/pages/ConversationPage_test.dart delete mode 100644 test/widget_test.dart create mode 100644 test/widgets/ChatAppBar_test.dart create mode 100644 test/widgets/ChatItemWidget_test.dart create mode 100644 test/widgets/ChatListWidget_test.dart create mode 100644 test/widgets/InputWidget_test.dart diff --git a/lib/pages/ConversationPage.dart b/lib/pages/ConversationPage.dart index 76589d5..408c356 100644 --- a/lib/pages/ConversationPage.dart +++ b/lib/pages/ConversationPage.dart @@ -4,8 +4,10 @@ import 'package:messio/widgets/ChatListWidget.dart'; import 'package:messio/widgets/InputWidget.dart'; class ConversationPage extends StatefulWidget { + @override _ConversationPageState createState() => _ConversationPageState(); + const ConversationPage(); } class _ConversationPageState extends State { diff --git a/lib/pages/ConversationPageList.dart b/lib/pages/ConversationPageList.dart index c4a6138..20d6958 100644 --- a/lib/pages/ConversationPageList.dart +++ b/lib/pages/ConversationPageList.dart @@ -6,6 +6,8 @@ class ConversationPageList extends StatefulWidget { @override _ConversationPageListState createState() => _ConversationPageListState(); + + const ConversationPageList(); } class _ConversationPageListState extends State { @@ -20,6 +22,5 @@ class _ConversationPageListState extends State { ], ); - } } diff --git a/lib/widgets/ChatAppBar.dart b/lib/widgets/ChatAppBar.dart index 6479ade..fba31c9 100644 --- a/lib/widgets/ChatAppBar.dart +++ b/lib/widgets/ChatAppBar.dart @@ -4,96 +4,113 @@ import 'package:messio/config/Palette.dart'; class ChatAppBar extends StatelessWidget implements PreferredSizeWidget { final double height = 100; + + const ChatAppBar(); + @override Widget build(BuildContext context) { - var textHeading = TextStyle(color: Palette.primaryTextColor, fontSize: 20); // Text style for the name - var textStyle = TextStyle(color: Palette.secondaryTextColor); // Text style for everything else + var textHeading = TextStyle( + color: Palette.primaryTextColor, + fontSize: 20); // Text style for the name + var textStyle = TextStyle( + color: Palette.secondaryTextColor); // Text style for everything else - double width = MediaQuery.of(context).size.width; // calculate the screen width return Material( child: Container( - decoration: new BoxDecoration(boxShadow: [ //adds a shadow to the appbar + decoration: new BoxDecoration(boxShadow: [ + //adds a shadow to the appbar new BoxShadow( - color: Colors.black, - blurRadius: 5.0, - )]), - child: Container( + color: Colors.black, + blurRadius: 5.0, + ) + ]), + child: Container( + padding: EdgeInsets.only(top: 10, bottom: 10), color: Palette.primaryBackgroundColor, child: Row(children: [ - Expanded( //we're dividing the appbar into 7 : 3 ratio. 7 is for content and 3 is for the display picture. - flex: 7, - child: Center( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - height: 70 - (width * .06), - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - flex: 2, - child: Center( - child: Icon( - Icons.attach_file, - color: Palette.secondaryColor, - ))), - Expanded( - flex: 6, - child: Container( - child: Column( + Expanded( + //we're dividing the appbar into 7 : 3 ratio. 7 is for content and 3 is for the display picture. + flex: 7, + child: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Expanded( + flex: 7, + child: Container( + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 2, + child: Center( + child: IconButton( + icon: Icon( + Icons.attach_file, + color: Palette.secondaryColor, + ), + onPressed: ()=>{}))), + Expanded( + flex: 6, + child: Container( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + mainAxisAlignment: + MainAxisAlignment.center, + mainAxisSize: MainAxisSize.min, + children: [ + Text('Aditya Gurjar', + style: textHeading), + Text('@adityagurjar', + style: textStyle) + ], + ))), + ], + ))), + //second row containing the buttons for media + Expanded( + flex: 3, + child: Container( + padding: EdgeInsets.fromLTRB(20, 5, 5, 0), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: - CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - mainAxisSize: MainAxisSize.min, + CrossAxisAlignment.center, children: [ - Text('Aditya Gurjar', style: textHeading), - Text('@adityagurjar', style: textStyle) + Text( + 'Photos', + style: textStyle, + ), + VerticalDivider( + width: 30, + color: Palette.primaryTextColor, + ), + Text( + 'Videos', + style: textStyle, + ), + VerticalDivider( + width: 30, + color: Palette.primaryTextColor, + ), + Text('Files', style: textStyle) ], ))), - ], - )), - //second row containing the buttons for media - Container( - height: 23, - padding: EdgeInsets.fromLTRB(20, 5, 5, 0), - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text( - 'Photos', - style: textStyle, - ), - VerticalDivider( - width: 30, - color: Palette.primaryTextColor, - ), - Text( - 'Videos', - style: textStyle, - ), - VerticalDivider( - width: 30, - color: Palette.primaryTextColor, - ), - Text('Files', style: textStyle) - ], - )), - ], - ))), - //This is the display picture - Expanded( - flex: 3, - child: Container( - child: Center( - child: CircleAvatar( - radius: (80 - (width * .06)) / 2, - backgroundImage: Image.asset( - Assets.user, - ).image, - )))), - ])))); + ], + ))), + //This is the display picture + Expanded( + flex: 3, + child: Container( + child: Center( + child: CircleAvatar( + radius: 30, + backgroundImage: Image.asset( + Assets.user, + ).image, + )))), + ])))); } @override diff --git a/lib/widgets/ChatItemWidget.dart b/lib/widgets/ChatItemWidget.dart index 435d243..c333cf9 100644 --- a/lib/widgets/ChatItemWidget.dart +++ b/lib/widgets/ChatItemWidget.dart @@ -3,9 +3,9 @@ import 'package:messio/config/Palette.dart'; import 'package:intl/intl.dart'; class ChatItemWidget extends StatelessWidget{ - var index; + final int index; - ChatItemWidget(this.index); + const ChatItemWidget(this.index); @override Widget build(BuildContext context) { diff --git a/lib/widgets/InputWidget.dart b/lib/widgets/InputWidget.dart index 8b92b8b..0a0590f 100644 --- a/lib/widgets/InputWidget.dart +++ b/lib/widgets/InputWidget.dart @@ -3,7 +3,10 @@ import 'package:messio/config/Palette.dart'; class InputWidget extends StatelessWidget { - final TextEditingController textEditingController = new TextEditingController(); + final TextEditingController textEditingController = TextEditingController(); + + + InputWidget(); @override Widget build(BuildContext context) { @@ -16,6 +19,7 @@ class InputWidget extends StatelessWidget { child: new IconButton( icon: new Icon(Icons.face), color: Palette.primaryColor, + onPressed: ()=>{}, ), ), color: Colors.white, diff --git a/test/main_test.dart b/test/main_test.dart new file mode 100644 index 0000000..a361bac --- /dev/null +++ b/test/main_test.dart @@ -0,0 +1,14 @@ + +import 'package:flutter_test/flutter_test.dart'; +import 'package:messio/main.dart'; +import 'package:messio/pages/ConversationPageList.dart'; + +void main() { + testWidgets('Main UI Test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(Messio()); + + expect(find.byType(ConversationPageList),findsOneWidget); + + }); +} diff --git a/test/pages/ConversationPageList_test.dart b/test/pages/ConversationPageList_test.dart new file mode 100644 index 0000000..17b3492 --- /dev/null +++ b/test/pages/ConversationPageList_test.dart @@ -0,0 +1,19 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:messio/pages/ConversationPage.dart'; +import 'package:messio/pages/ConversationPageList.dart'; + +void main(){ + const MaterialApp app = MaterialApp( + home: Scaffold( + body: const ConversationPageList() + ), + ); + testWidgets('ConversationPageList UI Test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(app); + expect(find.byType(ConversationPage),findsOneWidget); + expect(find.byType(PageView),findsOneWidget); + + }); +} \ No newline at end of file diff --git a/test/pages/ConversationPage_test.dart b/test/pages/ConversationPage_test.dart new file mode 100644 index 0000000..db94347 --- /dev/null +++ b/test/pages/ConversationPage_test.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:messio/pages/ConversationPage.dart'; +import 'package:messio/widgets/ChatAppBar.dart'; +import 'package:messio/widgets/ChatListWidget.dart'; +import 'package:messio/widgets/InputWidget.dart'; + +void main(){ + const MaterialApp app = MaterialApp( + home: Scaffold( + body: const ConversationPage() + ), + ); + + testWidgets('ConversationPage UI Test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(app); + + expect(find.byType(ChatAppBar),findsOneWidget); + expect(find.byType(InputWidget),findsOneWidget); + expect(find.byType(ChatListWidget),findsOneWidget); + + + }); +} \ No newline at end of file diff --git a/test/widget_test.dart b/test/widget_test.dart deleted file mode 100644 index 84505fb..0000000 --- a/test/widget_test.dart +++ /dev/null @@ -1,17 +0,0 @@ -// This is a basic Flutter widget test. -// -// To perform an interaction with a widget in your test, use the WidgetTester -// utility that Flutter provides. For example, you can send tap and scroll -// gestures. You can also use WidgetTester to find child widgets in the widget -// tree, read text, and verify that the values of widget properties are correct. -import 'package:flutter_test/flutter_test.dart'; - -import 'package:messio/main.dart'; - -void main() { - testWidgets('Checking if hello world shows up', (WidgetTester tester) async { - // Build our app and trigger a frame. - await tester.pumpWidget(Messio()); - expect(find.text('Hello World!'), findsOneWidget); - }); -} diff --git a/test/widgets/ChatAppBar_test.dart b/test/widgets/ChatAppBar_test.dart new file mode 100644 index 0000000..f093b0f --- /dev/null +++ b/test/widgets/ChatAppBar_test.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:messio/widgets/ChatAppBar.dart'; + +void main(){ + const MaterialApp app = MaterialApp( + home: Scaffold( + body: const ChatAppBar() + ), + ); + testWidgets('ChatAppBar UI Test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(app); + + expect(find.text('Aditya Gurjar'), findsOneWidget); + expect(find.text('@adityagurjar'), findsOneWidget); + expect(find.byType(IconButton),findsNWidgets(1)); + expect(find.byType(CircleAvatar),findsOneWidget); + }); +} \ No newline at end of file diff --git a/test/widgets/ChatItemWidget_test.dart b/test/widgets/ChatItemWidget_test.dart new file mode 100644 index 0000000..abae7f3 --- /dev/null +++ b/test/widgets/ChatItemWidget_test.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:messio/widgets/ChatItemWidget.dart'; + +void main(){ + const MaterialApp app = MaterialApp( + home: Scaffold( + body: const ChatItemWidget(0) + ), + ); + testWidgets('ChatItemWidget UI Test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(app); + + expect(find.byType(Container),findsNWidgets(3)); + expect(find.byType(Column),findsNWidgets(1)); + expect(find.byType(Row),findsNWidgets(2)); + expect(find.byType(Text),findsNWidgets(2)); + }); +} \ No newline at end of file diff --git a/test/widgets/ChatListWidget_test.dart b/test/widgets/ChatListWidget_test.dart new file mode 100644 index 0000000..0dfc381 --- /dev/null +++ b/test/widgets/ChatListWidget_test.dart @@ -0,0 +1,12 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:messio/main.dart'; + +void main(){ + testWidgets('ChatListWidget UI Test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(Messio()); + + expect(find.byType(ListView),findsOneWidget); + }); +} \ No newline at end of file diff --git a/test/widgets/InputWidget_test.dart b/test/widgets/InputWidget_test.dart new file mode 100644 index 0000000..3d78c6e --- /dev/null +++ b/test/widgets/InputWidget_test.dart @@ -0,0 +1,19 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:messio/widgets/InputWidget.dart'; + +void main(){ + MaterialApp app = MaterialApp( + home: Scaffold( + body: InputWidget() + ), + ); + testWidgets('InputWidget UI Test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(app); + + expect(find.byType(IconButton),findsNWidgets(2)); + expect(find.byType(EditableText),findsOneWidget); + + }); +} \ No newline at end of file