diff --git a/test/common_server_api_test.dart b/test/common_server_api_test.dart
index bd4d1b0..badb672 100644
--- a/test/common_server_api_test.dart
+++ b/test/common_server_api_test.dart
@@ -51,6 +51,191 @@
 }
 ''';
 
+const counterApp = r'''
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:flutter/material.dart';
+
+void main() => runApp(MyApp());
+
+class MyApp extends StatelessWidget {
+  @override
+  Widget build(BuildContext context) {
+    return MaterialApp(
+      title: 'Flutter Demo',
+      debugShowCheckedModeBanner: false,
+      theme: ThemeData(
+        primarySwatch: Colors.blue,
+      ),
+      home: MyHomePage(title: 'Flutter Demo Home Page'),
+    );
+  }
+}
+
+class MyHomePage extends StatefulWidget {
+  MyHomePage({Key key, this.title}) : super(key: key);
+
+  final String title;
+
+  @override
+  _MyHomePageState createState() => _MyHomePageState();
+}
+
+class _MyHomePageState extends State<MyHomePage> {
+  int _counter = 0;
+
+  void _incrementCounter() {
+    setState(() {
+      _counter++;
+    });
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      appBar: AppBar(
+        title: Text(widget.title),
+      ),
+      body: Center(
+        child: Column(
+          mainAxisAlignment: MainAxisAlignment.center,
+          children: <Widget>[
+            Text(
+              'You have pushed the button this many times:',
+            ),
+            Text(
+              '$_counter',
+              style: Theme.of(context).textTheme.headline4,
+            ),
+          ],
+        ),
+      ),
+      floatingActionButton: FloatingActionButton(
+        onPressed: _incrementCounter,
+        tooltip: 'Increment',
+        child: Icon(Icons.add),
+      ),
+    );
+  }
+}
+''';
+
+const draggableAndPhysicsApp = '''
+import 'package:flutter/material.dart';
+import 'package:flutter/physics.dart';
+
+main() {
+  runApp(
+    MaterialApp(
+      debugShowCheckedModeBanner: false,
+      home: PhysicsCardDragDemo(),
+    ),
+  );
+}
+
+class PhysicsCardDragDemo extends StatelessWidget {
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      appBar: AppBar(
+        title: Text('A draggable card!'),
+      ),
+      body: DraggableCard(
+        child: FlutterLogo(
+          size: 128,
+        ),
+      ),
+    );
+  }
+}
+
+class DraggableCard extends StatefulWidget {
+  final Widget child;
+  DraggableCard({this.child});
+
+  @override
+  _DraggableCardState createState() => _DraggableCardState();
+}
+
+class _DraggableCardState extends State<DraggableCard>
+    with SingleTickerProviderStateMixin {
+  AnimationController _controller;
+  Alignment _dragAlignment = Alignment.center;
+  Animation<Alignment> _animation;
+
+  void _runAnimation(Offset pixelsPerSecond, Size size) {
+    _animation = _controller.drive(
+      AlignmentTween(
+        begin: _dragAlignment,
+        end: Alignment.center,
+      ),
+    );
+
+    final unitsPerSecondX = pixelsPerSecond.dx / size.width;
+    final unitsPerSecondY = pixelsPerSecond.dy / size.height;
+    final unitsPerSecond = Offset(unitsPerSecondX, unitsPerSecondY);
+    final unitVelocity = unitsPerSecond.distance;
+
+    const spring = SpringDescription(
+      mass: 30,
+      stiffness: 1,
+      damping: 1,
+    );
+
+    final simulation = SpringSimulation(spring, 0, 1, -unitVelocity);
+
+    _controller.animateWith(simulation);
+  }
+
+  @override
+  void initState() {
+    super.initState();
+    _controller = AnimationController(vsync: this);
+
+    _controller.addListener(() {
+      setState(() {
+        _dragAlignment = _animation.value;
+      });
+    });
+  }
+
+  @override
+  void dispose() {
+    _controller.dispose();
+    super.dispose();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    final size = MediaQuery.of(context).size;
+    return GestureDetector(
+      onPanDown: (details) {
+        _controller.stop();
+      },
+      onPanUpdate: (details) {
+        setState(() {
+          _dragAlignment += Alignment(
+            details.delta.dx / (size.width / 2),
+            details.delta.dy / (size.height / 2),
+          );
+        });
+      },
+      onPanEnd: (details) {
+        _runAnimation(details.velocity.pixelsPerSecond, size);
+      },
+      child: Align(
+        alignment: _dragAlignment,
+        child: Card(
+          child: widget.child,
+        ),
+      ),
+    );
+  }
+}
+''';
+
 void main() => defineTests();
 
 void defineTests() {
@@ -150,6 +335,32 @@
       }
     });
 
+    test('analyze counterApp', () async {
+      for (final version in versions) {
+        final jsonData = {'source': counterApp};
+        final response =
+            await _sendPostRequest('dartservices/$version/analyze', jsonData);
+        expect(response.statusCode, 200);
+        final data = await response.transform(utf8.decoder).join();
+        expect(json.decode(data), {
+          'packageImports': ['flutter']
+        });
+      }
+    });
+
+    test('analyze draggableAndPhysicsApp', () async {
+      for (final version in versions) {
+        final jsonData = {'source': draggableAndPhysicsApp};
+        final response =
+            await _sendPostRequest('dartservices/$version/analyze', jsonData);
+        expect(response.statusCode, 200);
+        final data = await response.transform(utf8.decoder).join();
+        expect(json.decode(data), {
+          'packageImports': ['flutter']
+        });
+      }
+    });
+
     test('analyze errors', () async {
       for (final version in versions) {
         final jsonData = {'source': sampleCodeError};
diff --git a/test/flutter_analysis_server_test.dart b/test/flutter_analysis_server_test.dart
index 6e551c7..198cbc2 100644
--- a/test/flutter_analysis_server_test.dart
+++ b/test/flutter_analysis_server_test.dart
@@ -15,7 +15,7 @@
 import 'package:dart_services/src/sdk_manager.dart';
 import 'package:test/test.dart';
 
-const counter = r'''
+const counterApp = r'''
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -86,7 +86,7 @@
 }
 ''';
 
-const draggableAndPhysics = '''
+const draggableAndPhysicsApp = '''
 import 'package:flutter/material.dart';
 import 'package:flutter/physics.dart';
 
@@ -222,12 +222,12 @@
     });
 
     test('analyze counter app', () async {
-      final results = await analysisServer.analyze(counter);
+      final results = await analysisServer.analyze(counterApp);
       expect(results.issues, isEmpty);
     });
 
     test('analyze Draggable Physics sample', () async {
-      final results = await analysisServer.analyze(draggableAndPhysics);
+      final results = await analysisServer.analyze(draggableAndPhysicsApp);
       expect(results.issues, isEmpty);
     });
   });
@@ -258,12 +258,12 @@
     });
 
     test('analyze counter app', () async {
-      final results = await analysisServer.analyze(counter);
+      final results = await analysisServer.analyze(counterApp);
       expect(results.issues, isEmpty);
     });
 
     test('analyze Draggable Physics sample', () async {
-      final results = await analysisServer.analyze(draggableAndPhysics);
+      final results = await analysisServer.analyze(draggableAndPhysicsApp);
       expect(results.issues, isEmpty);
     });
   });
@@ -294,12 +294,13 @@
     });
 
     test('analyze counter app', () async {
-      final results = await flutterAnalysisServer.analyze(counter);
+      final results = await flutterAnalysisServer.analyze(counterApp);
       expect(results.issues, isEmpty);
     });
 
     test('analyze Draggable Physics sample', () async {
-      final results = await flutterAnalysisServer.analyze(draggableAndPhysics);
+      final results =
+          await flutterAnalysisServer.analyze(draggableAndPhysicsApp);
       expect(results.issues, isEmpty);
     });
   });
@@ -324,13 +325,13 @@
 
     test('counter app', () async {
       final results =
-          await commonServerImpl.analyze(SourceRequest()..source = counter);
+          await commonServerImpl.analyze(SourceRequest()..source = counterApp);
       expect(results.issues, isEmpty);
     });
 
     test('Draggable Physics sample', () async {
       final results = await commonServerImpl
-          .analyze(SourceRequest()..source = draggableAndPhysics);
+          .analyze(SourceRequest()..source = draggableAndPhysicsApp);
       expect(results.issues, isEmpty);
     });
   });
