Dart: Reorganize files

This change attempts to provide a more rational structure for
Dart-related code. As much as possible code is moved under //mojo/dart.
The layout is now:

apptests/
  dart_apptests/ (moved from //services/dart/dart_apptests)
  test_apps/  (moved from //services/dart/tests)
embedder/
  snapshotter/ (moved from //mojo/dart/dart_snapshotter)
packages/  (no changes)
tools/  (no changes)
unittests/
  embedder_tester/  (moved from //mojo/dart/embedder/test)
  embedder_tests/  (moved from //mojo/dart/test)
  http_load_test/  (moved from //mojo/dart/http_load_test)
  observatory_test/  (moved from //mojo/dart/observatory_test)
  observatory_tester/  (moved from //mojo/dart/observatory_tester)

I've also consolidated .gitignore rules under //.gitignore and deleted
stray pubspec.lock files.

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org/1545483003 .
diff --git a/.gitignore b/.gitignore
index ee36554..d1bb5d5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -68,39 +68,21 @@
 /v8/
 
 # dart packages directories and related.
-/benchmarks/mojo_rtt_benchmark/.packages
-/benchmarks/mojo_rtt_benchmark/packages
+/benchmarks/**/.packages
+/benchmarks/**/packages
+/benchmarks/**/pubspec.lock
 /examples/dart/**/.packages
 /examples/dart/**/packages
-/mojo/common/dart/.packages
-/mojo/common/dart/packages
-/mojo/dart/apptest/.packages
-/mojo/dart/apptest/packages
-/mojo/dart/apptest/pubspec.lock
-/mojo/dart/packages/mojo_apptest/.packages
-/mojo/dart/packages/mojo_apptest/packages
-/mojo/dart/packages/mojo_apptest/pubspec.lock
-/mojo/dart/http_load_test/.packages
-/mojo/dart/http_load_test/bin/packages
-/mojo/dart/http_load_test/packages
-/mojo/dart/mojo_services/.packages
-/mojo/dart/mojo_services/packages
-/mojo/dart/mojo_services/pubspec.lock
-/mojo/dart/mojom/.packages
-/mojo/dart/mojom/bin/packages
-/mojo/dart/mojom/packages
-/mojo/dart/mojom/test/packages
-/mojo/dart/observatory_test/.packages
-/mojo/dart/testing/.packages
-/services/dart/test/echo/.packages
-/services/dart/test/echo/packages
-/services/dart/test/pingpong/.packages
-/services/dart/test/pingpong/packages
-/services/dart/test/pingpong_target/.packages
-/services/dart/test/pingpong_target/packages
-/services/dart/test/dart/service_test_interfaces/.packages
-/services/dart/test/dart/service_test_interfaces/packages
-/services/dart/test/dart/service_test_interfaces/pubspec.lock
+/examples/dart/**/pubspec.lock
+/mojo/dart/apptests/**/.packages
+/mojo/dart/apptests/**/packages
+/mojo/dart/apptests/**/pubspec.lock
+/mojo/dart/packages/**/.packages
+/mojo/dart/packages/**/packages
+/mojo/dart/packages/**/pubspec.lock
+/mojo/dart/unittests/**/.packages
+/mojo/dart/unittests/**/packages
+/mojo/dart/unittests/**/pubspec.lock
 
 # downloaded keyboard_native resources.
 /services/keyboard_native/res/*.png
diff --git a/benchmarks/mojo_rtt_benchmark/pubspec.lock b/benchmarks/mojo_rtt_benchmark/pubspec.lock
deleted file mode 100644
index b915527..0000000
--- a/benchmarks/mojo_rtt_benchmark/pubspec.lock
+++ /dev/null
@@ -1,35 +0,0 @@
-# Generated by pub
-# See http://pub.dartlang.org/doc/glossary.html#lockfile
-packages:
-  args:
-    description: args
-    source: hosted
-    version: "0.13.2"
-  common:
-    description:
-      path: "../../mojo/common/dart"
-      relative: true
-    source: path
-    version: "0.0.0"
-  crypto:
-    description: crypto
-    source: hosted
-    version: "0.9.1"
-  logging:
-    description: logging
-    source: hosted
-    version: "0.11.2"
-  mojo:
-    description: mojo
-    source: hosted
-    version: "0.4.2"
-  mojom:
-    description:
-      path: "../../out/Debug/gen/dart-pkg/mojom"
-      relative: true
-    source: path
-    version: "0.2.7"
-  path:
-    description: path
-    source: hosted
-    version: "1.3.6"
diff --git a/build/module_args/dart.gni b/build/module_args/dart.gni
index e784261..d3c3eec 100644
--- a/build/module_args/dart.gni
+++ b/build/module_args/dart.gni
@@ -5,4 +5,5 @@
 # This variable should point to the Dart SDK.
 dart_sdk_root = "//third_party/dart-sdk/dart-sdk"
 
-dart_snapshotter_bin = "//mojo/dart/dart_snapshotter($host_toolchain)"
+dart_snapshotter_bin =
+    "//mojo/dart/embedder/snapshotter:dart_snapshotter($host_toolchain)"
diff --git a/examples/dart/camera_roll/pubspec.lock b/examples/dart/camera_roll/pubspec.lock
deleted file mode 100644
index d067c60..0000000
--- a/examples/dart/camera_roll/pubspec.lock
+++ /dev/null
@@ -1,219 +0,0 @@
-# Generated by pub
-# See http://pub.dartlang.org/doc/glossary.html#lockfile
-packages:
-  analyzer:
-    description: analyzer
-    source: hosted
-    version: "0.26.1+7"
-  archive:
-    description: archive
-    source: hosted
-    version: "1.0.20"
-  args:
-    description: args
-    source: hosted
-    version: "0.13.2"
-  async:
-    description: async
-    source: hosted
-    version: "1.3.0"
-  barback:
-    description: barback
-    source: hosted
-    version: "0.15.2+7"
-  cassowary:
-    description: cassowary
-    source: hosted
-    version: "0.1.7"
-  charcode:
-    description: charcode
-    source: hosted
-    version: "1.1.0"
-  collection:
-    description: collection
-    source: hosted
-    version: "1.1.3"
-  concepts:
-    description: concepts
-    source: hosted
-    version: "0.2.0"
-  crypto:
-    description: crypto
-    source: hosted
-    version: "0.9.1"
-  csslib:
-    description: csslib
-    source: hosted
-    version: "0.12.1"
-  either:
-    description: either
-    source: hosted
-    version: "0.1.8"
-  glob:
-    description: glob
-    source: hosted
-    version: "1.0.5"
-  html:
-    description: html
-    source: hosted
-    version: "0.12.2"
-  http_multi_server:
-    description: http_multi_server
-    source: hosted
-    version: "1.3.2"
-  http_parser:
-    description: http_parser
-    source: hosted
-    version: "1.0.0"
-  intl:
-    description: intl
-    source: hosted
-    version: "0.12.4+2"
-  logging:
-    description: logging
-    source: hosted
-    version: "0.11.1+1"
-  matcher:
-    description: matcher
-    source: hosted
-    version: "0.12.0+1"
-  material_design_icons:
-    description: material_design_icons
-    source: hosted
-    version: "0.0.3"
-  mime:
-    description: mime
-    source: hosted
-    version: "0.9.3"
-  mojo:
-    description: mojo
-    source: hosted
-    version: "0.1.0"
-  mojo_services:
-    description: mojo_services
-    source: hosted
-    version: "0.1.0"
-  mojom:
-    description: mojom
-    source: hosted
-    version: "0.1.0"
-  mustache4dart:
-    description: mustache4dart
-    source: hosted
-    version: "1.0.10"
-  newton:
-    description: newton
-    source: hosted
-    version: "0.1.4"
-  option:
-    description: option
-    source: hosted
-    version: "1.1.0"
-  package_config:
-    description: package_config
-    source: hosted
-    version: "0.1.3"
-  path:
-    description: path
-    source: hosted
-    version: "1.3.6"
-  petitparser:
-    description: petitparser
-    source: hosted
-    version: "1.4.3"
-  plugin:
-    description: plugin
-    source: hosted
-    version: "0.1.0"
-  pool:
-    description: pool
-    source: hosted
-    version: "1.1.0"
-  pub_semver:
-    description: pub_semver
-    source: hosted
-    version: "1.2.2"
-  quiver:
-    description: quiver
-    source: hosted
-    version: "0.21.4"
-  shelf:
-    description: shelf
-    source: hosted
-    version: "0.6.3"
-  shelf_path:
-    description: shelf_path
-    source: hosted
-    version: "0.1.7"
-  shelf_route:
-    description: shelf_route
-    source: hosted
-    version: "0.13.5"
-  shelf_static:
-    description: shelf_static
-    source: hosted
-    version: "0.2.3+1"
-  shelf_web_socket:
-    description: shelf_web_socket
-    source: hosted
-    version: "0.0.1+4"
-  sky:
-    description: sky
-    source: hosted
-    version: "0.0.51"
-  sky_engine:
-    description: sky_engine
-    source: hosted
-    version: "0.0.29"
-  sky_services:
-    description: sky_services
-    source: hosted
-    version: "0.0.29"
-  sky_tools:
-    description: sky_tools
-    source: hosted
-    version: "0.0.15"
-  source_map_stack_trace:
-    description: source_map_stack_trace
-    source: hosted
-    version: "1.0.4"
-  source_maps:
-    description: source_maps
-    source: hosted
-    version: "0.10.1"
-  source_span:
-    description: source_span
-    source: hosted
-    version: "1.2.0"
-  stack_trace:
-    description: stack_trace
-    source: hosted
-    version: "1.4.2"
-  string_scanner:
-    description: string_scanner
-    source: hosted
-    version: "0.1.4"
-  test:
-    description: test
-    source: hosted
-    version: "0.12.4+9"
-  uri:
-    description: uri
-    source: hosted
-    version: "0.11.0"
-  utf:
-    description: utf
-    source: hosted
-    version: "0.9.0+2"
-  vector_math:
-    description: vector_math
-    source: hosted
-    version: "1.4.3"
-  watcher:
-    description: watcher
-    source: hosted
-    version: "0.9.7"
-  yaml:
-    description: yaml
-    source: hosted
-    version: "2.1.6"
diff --git a/examples/dart/camera_video/pubspec.lock b/examples/dart/camera_video/pubspec.lock
deleted file mode 100644
index 3a914d1..0000000
--- a/examples/dart/camera_video/pubspec.lock
+++ /dev/null
@@ -1,219 +0,0 @@
-# Generated by pub
-# See http://pub.dartlang.org/doc/glossary.html#lockfile
-packages:
-  analyzer:
-    description: analyzer
-    source: hosted
-    version: "0.26.1+7"
-  archive:
-    description: archive
-    source: hosted
-    version: "1.0.20"
-  args:
-    description: args
-    source: hosted
-    version: "0.13.2"
-  async:
-    description: async
-    source: hosted
-    version: "1.3.0"
-  barback:
-    description: barback
-    source: hosted
-    version: "0.15.2+7"
-  cassowary:
-    description: cassowary
-    source: hosted
-    version: "0.1.7"
-  charcode:
-    description: charcode
-    source: hosted
-    version: "1.1.0"
-  collection:
-    description: collection
-    source: hosted
-    version: "1.1.3"
-  concepts:
-    description: concepts
-    source: hosted
-    version: "0.2.0"
-  crypto:
-    description: crypto
-    source: hosted
-    version: "0.9.1"
-  csslib:
-    description: csslib
-    source: hosted
-    version: "0.12.1"
-  either:
-    description: either
-    source: hosted
-    version: "0.1.8"
-  flutter:
-    description: flutter
-    source: hosted
-    version: "0.0.6"
-  glob:
-    description: glob
-    source: hosted
-    version: "1.0.5"
-  html:
-    description: html
-    source: hosted
-    version: "0.12.2"
-  http_multi_server:
-    description: http_multi_server
-    source: hosted
-    version: "1.3.2"
-  http_parser:
-    description: http_parser
-    source: hosted
-    version: "1.0.0"
-  intl:
-    description: intl
-    source: hosted
-    version: "0.12.4+2"
-  logging:
-    description: logging
-    source: hosted
-    version: "0.11.1+1"
-  matcher:
-    description: matcher
-    source: hosted
-    version: "0.12.0+1"
-  material_design_icons:
-    description: material_design_icons
-    source: hosted
-    version: "0.0.3"
-  mime:
-    description: mime
-    source: hosted
-    version: "0.9.3"
-  mojo:
-    description: mojo
-    source: hosted
-    version: "0.2.0"
-  mojo_services:
-    description: mojo_services
-    source: hosted
-    version: "0.3.0"
-  mojom:
-    description: mojom
-    source: hosted
-    version: "0.2.1"
-  mustache4dart:
-    description: mustache4dart
-    source: hosted
-    version: "1.0.10"
-  newton:
-    description: newton
-    source: hosted
-    version: "0.1.4"
-  option:
-    description: option
-    source: hosted
-    version: "1.1.0"
-  package_config:
-    description: package_config
-    source: hosted
-    version: "0.1.3"
-  path:
-    description: path
-    source: hosted
-    version: "1.3.6"
-  petitparser:
-    description: petitparser
-    source: hosted
-    version: "1.5.0"
-  plugin:
-    description: plugin
-    source: hosted
-    version: "0.1.0"
-  pool:
-    description: pool
-    source: hosted
-    version: "1.1.0"
-  pub_semver:
-    description: pub_semver
-    source: hosted
-    version: "1.2.2"
-  quiver:
-    description: quiver
-    source: hosted
-    version: "0.21.4"
-  shelf:
-    description: shelf
-    source: hosted
-    version: "0.6.3"
-  shelf_path:
-    description: shelf_path
-    source: hosted
-    version: "0.1.7"
-  shelf_route:
-    description: shelf_route
-    source: hosted
-    version: "0.13.5"
-  shelf_static:
-    description: shelf_static
-    source: hosted
-    version: "0.2.3+1"
-  shelf_web_socket:
-    description: shelf_web_socket
-    source: hosted
-    version: "0.0.1+4"
-  sky_engine:
-    description: sky_engine
-    source: hosted
-    version: "0.0.37"
-  sky_services:
-    description: sky_services
-    source: hosted
-    version: "0.0.37"
-  sky_tools:
-    description: sky_tools
-    source: hosted
-    version: "0.0.24"
-  source_map_stack_trace:
-    description: source_map_stack_trace
-    source: hosted
-    version: "1.0.4"
-  source_maps:
-    description: source_maps
-    source: hosted
-    version: "0.10.1"
-  source_span:
-    description: source_span
-    source: hosted
-    version: "1.2.1"
-  stack_trace:
-    description: stack_trace
-    source: hosted
-    version: "1.4.2"
-  string_scanner:
-    description: string_scanner
-    source: hosted
-    version: "0.1.4"
-  test:
-    description: test
-    source: hosted
-    version: "0.12.4+9"
-  uri:
-    description: uri
-    source: hosted
-    version: "0.11.0"
-  utf:
-    description: utf
-    source: hosted
-    version: "0.9.0+2"
-  vector_math:
-    description: vector_math
-    source: hosted
-    version: "1.4.3"
-  watcher:
-    description: watcher
-    source: hosted
-    version: "0.9.7"
-  yaml:
-    description: yaml
-    source: hosted
-    version: "2.1.6"
diff --git a/examples/dart/device_info/pubspec.lock b/examples/dart/device_info/pubspec.lock
deleted file mode 100644
index e7b03b5..0000000
--- a/examples/dart/device_info/pubspec.lock
+++ /dev/null
@@ -1,3 +0,0 @@
-# Generated by pub
-# See http://pub.dartlang.org/doc/glossary.html#lockfile
-packages: {}
diff --git a/examples/dart/echo_client/pubspec.lock b/examples/dart/echo_client/pubspec.lock
deleted file mode 100644
index e51f263..0000000
--- a/examples/dart/echo_client/pubspec.lock
+++ /dev/null
@@ -1,29 +0,0 @@
-# Generated by pub
-# See http://pub.dartlang.org/doc/glossary.html#lockfile
-packages:
-  args:
-    description: args
-    source: hosted
-    version: "0.13.2"
-  crypto:
-    description: crypto
-    source: hosted
-    version: "0.9.1"
-  logging:
-    description: logging
-    source: hosted
-    version: "0.11.2"
-  mojo:
-    description: mojo
-    source: hosted
-    version: "0.4.2"
-  mojom:
-    description:
-      path: "../../../out/Debug/gen/dart-pkg/mojom"
-      relative: true
-    source: path
-    version: "0.2.7"
-  path:
-    description: path
-    source: hosted
-    version: "1.3.6"
diff --git a/examples/dart/hello_world/hello/pubspec.lock b/examples/dart/hello_world/hello/pubspec.lock
deleted file mode 100644
index e7b03b5..0000000
--- a/examples/dart/hello_world/hello/pubspec.lock
+++ /dev/null
@@ -1,3 +0,0 @@
-# Generated by pub
-# See http://pub.dartlang.org/doc/glossary.html#lockfile
-packages: {}
diff --git a/examples/dart/hello_world/world/pubspec.lock b/examples/dart/hello_world/world/pubspec.lock
deleted file mode 100644
index e7b03b5..0000000
--- a/examples/dart/hello_world/world/pubspec.lock
+++ /dev/null
@@ -1,3 +0,0 @@
-# Generated by pub
-# See http://pub.dartlang.org/doc/glossary.html#lockfile
-packages: {}
diff --git a/examples/dart/netcat/pubspec.lock b/examples/dart/netcat/pubspec.lock
deleted file mode 100644
index e7b03b5..0000000
--- a/examples/dart/netcat/pubspec.lock
+++ /dev/null
@@ -1,3 +0,0 @@
-# Generated by pub
-# See http://pub.dartlang.org/doc/glossary.html#lockfile
-packages: {}
diff --git a/examples/dart/wget/pubspec.lock b/examples/dart/wget/pubspec.lock
deleted file mode 100644
index 2c826b1..0000000
--- a/examples/dart/wget/pubspec.lock
+++ /dev/null
@@ -1,31 +0,0 @@
-# Generated by pub
-# See http://pub.dartlang.org/doc/glossary.html#lockfile
-packages:
-  args:
-    description: args
-    source: hosted
-    version: "0.13.2"
-  crypto:
-    description: crypto
-    source: hosted
-    version: "0.9.1"
-  logging:
-    description: logging
-    source: hosted
-    version: "0.11.2"
-  mojo:
-    description: mojo
-    source: hosted
-    version: "0.4.2"
-  mojo_services:
-    description: mojo_services
-    source: hosted
-    version: "0.4.4"
-  mojom:
-    description: mojom
-    source: hosted
-    version: "0.2.7"
-  path:
-    description: path
-    source: hosted
-    version: "1.3.6"
diff --git a/mojo/BUILD.gn b/mojo/BUILD.gn
index ed14d23..78c8632 100644
--- a/mojo/BUILD.gn
+++ b/mojo/BUILD.gn
@@ -62,7 +62,7 @@
     ":public_tests",
     "//mojo/common:mojo_common_unittests",
     "//mojo/converters:mojo_converters_unittests",
-    "//mojo/dart/embedder/test",
+    "//mojo/dart:tests",
     "//mojo/edk:tests",
     "//mojo/file_utils:file_utils_apptests",
     "//mojo/gles2:mgl_unittests",
diff --git a/mojo/dart/BUILD.gn b/mojo/dart/BUILD.gn
index abaa709..5c16042 100644
--- a/mojo/dart/BUILD.gn
+++ b/mojo/dart/BUILD.gn
@@ -4,10 +4,15 @@
 
 group("dart") {
   deps = [
-    "//mojo/dart/dart_snapshotter($host_toolchain)",
-    "//mojo/dart/http_load_test",
-    "//mojo/dart/observatory_test",
-    "//mojo/dart/packages/mojo_sdk",
-    "//mojo/dart/packages/mojo_services",
+    "//mojo/dart/embedder",
+    "//mojo/dart/packages",
+  ]
+}
+
+group("tests") {
+  testonly = true
+  deps = [
+    "//mojo/dart/apptests",
+    "//mojo/dart/unittests",
   ]
 }
diff --git a/mojo/dart/apptests/BUILD.gn b/mojo/dart/apptests/BUILD.gn
new file mode 100644
index 0000000..dcfdfb8
--- /dev/null
+++ b/mojo/dart/apptests/BUILD.gn
@@ -0,0 +1,10 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+group("apptests") {
+  deps = [
+    "//mojo/dart/apptests/dart_apptests",
+    "//mojo/dart/apptests/test_apps",
+  ]
+}
diff --git a/services/dart/dart_apptests/BUILD.gn b/mojo/dart/apptests/dart_apptests/BUILD.gn
similarity index 67%
rename from services/dart/dart_apptests/BUILD.gn
rename to mojo/dart/apptests/dart_apptests/BUILD.gn
index 3ac585a..710c76d 100644
--- a/services/dart/dart_apptests/BUILD.gn
+++ b/mojo/dart/apptests/dart_apptests/BUILD.gn
@@ -22,11 +22,6 @@
   deps = [
     "//mojo/dart/packages",
     "//mojo/public/dart",
-    "//mojo/public/interfaces/bindings/tests:versioning_test_client_interfaces",
-    "//mojo/public/interfaces/bindings/tests:versioning_test_service_interfaces",
-    "//services/dart/test/echo",
-    "//services/dart/test/pingpong",
-    "//services/dart/test/pingpong_target",
-    "//services/dart/test/dart/service_test_interfaces",
+    "//mojo/dart/apptests/test_apps",
   ]
 }
diff --git a/services/dart/dart_apptests/lib/main.dart b/mojo/dart/apptests/dart_apptests/lib/main.dart
similarity index 100%
rename from services/dart/dart_apptests/lib/main.dart
rename to mojo/dart/apptests/dart_apptests/lib/main.dart
diff --git a/services/dart/dart_apptests/lib/src/connect_to_loader_apptests.dart b/mojo/dart/apptests/dart_apptests/lib/src/connect_to_loader_apptests.dart
similarity index 100%
rename from services/dart/dart_apptests/lib/src/connect_to_loader_apptests.dart
rename to mojo/dart/apptests/dart_apptests/lib/src/connect_to_loader_apptests.dart
diff --git a/services/dart/dart_apptests/lib/src/echo_apptests.dart b/mojo/dart/apptests/dart_apptests/lib/src/echo_apptests.dart
similarity index 100%
rename from services/dart/dart_apptests/lib/src/echo_apptests.dart
rename to mojo/dart/apptests/dart_apptests/lib/src/echo_apptests.dart
diff --git a/services/dart/dart_apptests/lib/src/file_apptests.dart b/mojo/dart/apptests/dart_apptests/lib/src/file_apptests.dart
similarity index 100%
rename from services/dart/dart_apptests/lib/src/file_apptests.dart
rename to mojo/dart/apptests/dart_apptests/lib/src/file_apptests.dart
diff --git a/services/dart/dart_apptests/lib/src/io_http_apptests.dart b/mojo/dart/apptests/dart_apptests/lib/src/io_http_apptests.dart
similarity index 100%
rename from services/dart/dart_apptests/lib/src/io_http_apptests.dart
rename to mojo/dart/apptests/dart_apptests/lib/src/io_http_apptests.dart
diff --git a/services/dart/dart_apptests/lib/src/io_internet_address_apptests.dart b/mojo/dart/apptests/dart_apptests/lib/src/io_internet_address_apptests.dart
similarity index 100%
rename from services/dart/dart_apptests/lib/src/io_internet_address_apptests.dart
rename to mojo/dart/apptests/dart_apptests/lib/src/io_internet_address_apptests.dart
diff --git a/services/dart/dart_apptests/lib/src/pingpong_apptests.dart b/mojo/dart/apptests/dart_apptests/lib/src/pingpong_apptests.dart
similarity index 100%
rename from services/dart/dart_apptests/lib/src/pingpong_apptests.dart
rename to mojo/dart/apptests/dart_apptests/lib/src/pingpong_apptests.dart
diff --git a/services/dart/dart_apptests/lib/src/versioning_apptests.dart b/mojo/dart/apptests/dart_apptests/lib/src/versioning_apptests.dart
similarity index 100%
rename from services/dart/dart_apptests/lib/src/versioning_apptests.dart
rename to mojo/dart/apptests/dart_apptests/lib/src/versioning_apptests.dart
diff --git a/services/dart/dart_apptests/pubspec.yaml b/mojo/dart/apptests/dart_apptests/pubspec.yaml
similarity index 100%
rename from services/dart/dart_apptests/pubspec.yaml
rename to mojo/dart/apptests/dart_apptests/pubspec.yaml
diff --git a/services/dart/test/BUILD.gn b/mojo/dart/apptests/test_apps/BUILD.gn
similarity index 61%
rename from services/dart/test/BUILD.gn
rename to mojo/dart/apptests/test_apps/BUILD.gn
index c6e2270..4b01f33 100644
--- a/services/dart/test/BUILD.gn
+++ b/mojo/dart/apptests/test_apps/BUILD.gn
@@ -4,6 +4,16 @@
 
 import("//mojo/public/tools/bindings/mojom.gni")
 
+group("test_apps") {
+  deps = [
+    ":echo_service_interface",
+    ":pingpong_service_interface",
+    "//mojo/dart/apptests/test_apps/echo",
+    "//mojo/dart/apptests/test_apps/pingpong",
+    "//mojo/dart/apptests/test_apps/pingpong_target",
+  ]
+}
+
 mojom("echo_service_interface") {
   sources = [
     "interfaces/echo_service.mojom",
diff --git a/services/dart/test/echo/BUILD.gn b/mojo/dart/apptests/test_apps/echo/BUILD.gn
similarity index 87%
rename from services/dart/test/echo/BUILD.gn
rename to mojo/dart/apptests/test_apps/echo/BUILD.gn
index 96592aa..2bd6a73 100644
--- a/services/dart/test/echo/BUILD.gn
+++ b/mojo/dart/apptests/test_apps/echo/BUILD.gn
@@ -15,6 +15,5 @@
   deps = [
     "//mojo/dart/packages",
     "//mojo/public/dart",
-    "//services/dart/test/dart/service_test_interfaces",
   ]
 }
diff --git a/services/dart/test/echo/lib/main.dart b/mojo/dart/apptests/test_apps/echo/lib/main.dart
similarity index 100%
rename from services/dart/test/echo/lib/main.dart
rename to mojo/dart/apptests/test_apps/echo/lib/main.dart
diff --git a/services/dart/test/echo/pubspec.yaml b/mojo/dart/apptests/test_apps/echo/pubspec.yaml
similarity index 100%
rename from services/dart/test/echo/pubspec.yaml
rename to mojo/dart/apptests/test_apps/echo/pubspec.yaml
diff --git a/services/dart/test/interfaces/echo_service.mojom b/mojo/dart/apptests/test_apps/interfaces/echo_service.mojom
similarity index 100%
rename from services/dart/test/interfaces/echo_service.mojom
rename to mojo/dart/apptests/test_apps/interfaces/echo_service.mojom
diff --git a/services/dart/test/interfaces/pingpong_service.mojom b/mojo/dart/apptests/test_apps/interfaces/pingpong_service.mojom
similarity index 100%
rename from services/dart/test/interfaces/pingpong_service.mojom
rename to mojo/dart/apptests/test_apps/interfaces/pingpong_service.mojom
diff --git a/services/dart/test/pingpong/BUILD.gn b/mojo/dart/apptests/test_apps/pingpong/BUILD.gn
similarity index 87%
rename from services/dart/test/pingpong/BUILD.gn
rename to mojo/dart/apptests/test_apps/pingpong/BUILD.gn
index 8c071bd..ed22e3e 100644
--- a/services/dart/test/pingpong/BUILD.gn
+++ b/mojo/dart/apptests/test_apps/pingpong/BUILD.gn
@@ -15,6 +15,5 @@
   deps = [
     "//mojo/dart/packages",
     "//mojo/public/dart",
-    "//services/dart/test/dart/service_test_interfaces",
   ]
 }
diff --git a/services/dart/test/pingpong/lib/main.dart b/mojo/dart/apptests/test_apps/pingpong/lib/main.dart
similarity index 100%
rename from services/dart/test/pingpong/lib/main.dart
rename to mojo/dart/apptests/test_apps/pingpong/lib/main.dart
diff --git a/services/dart/test/pingpong/pubspec.yaml b/mojo/dart/apptests/test_apps/pingpong/pubspec.yaml
similarity index 100%
rename from services/dart/test/pingpong/pubspec.yaml
rename to mojo/dart/apptests/test_apps/pingpong/pubspec.yaml
diff --git a/services/dart/test/pingpong_target/BUILD.gn b/mojo/dart/apptests/test_apps/pingpong_target/BUILD.gn
similarity index 87%
rename from services/dart/test/pingpong_target/BUILD.gn
rename to mojo/dart/apptests/test_apps/pingpong_target/BUILD.gn
index 86f595f..7c47e53 100644
--- a/services/dart/test/pingpong_target/BUILD.gn
+++ b/mojo/dart/apptests/test_apps/pingpong_target/BUILD.gn
@@ -15,6 +15,5 @@
   deps = [
     "//mojo/dart/packages",
     "//mojo/public/dart",
-    "//services/dart/test/dart/service_test_interfaces",
   ]
 }
diff --git a/services/dart/test/pingpong_target/lib/main.dart b/mojo/dart/apptests/test_apps/pingpong_target/lib/main.dart
similarity index 100%
rename from services/dart/test/pingpong_target/lib/main.dart
rename to mojo/dart/apptests/test_apps/pingpong_target/lib/main.dart
diff --git a/services/dart/test/pingpong_target/pubspec.yaml b/mojo/dart/apptests/test_apps/pingpong_target/pubspec.yaml
similarity index 100%
rename from services/dart/test/pingpong_target/pubspec.yaml
rename to mojo/dart/apptests/test_apps/pingpong_target/pubspec.yaml
diff --git a/mojo/dart/embedder/BUILD.gn b/mojo/dart/embedder/BUILD.gn
index ab4bd83..808a40c 100644
--- a/mojo/dart/embedder/BUILD.gn
+++ b/mojo/dart/embedder/BUILD.gn
@@ -7,6 +7,14 @@
 import("//mojo/dart/packages/mojo/sources.gni")
 import("//mojo/dart/packages/mojo/sdk_ext_sources.gni")
 
+group("embedder") {
+  deps = [
+    ":dart_controller_no_snapshot",
+    ":generate_snapshot_file",
+    "//mojo/dart/embedder/snapshotter",
+  ]
+}
+
 source_set("dart_controller_no_snapshot") {
   sources = [
     "$target_gen_dir/dart_embedder_patch_resources.cc",
diff --git a/mojo/dart/dart_snapshotter/BUILD.gn b/mojo/dart/embedder/snapshotter/BUILD.gn
similarity index 91%
rename from mojo/dart/dart_snapshotter/BUILD.gn
rename to mojo/dart/embedder/snapshotter/BUILD.gn
index af9db33..30bd130 100644
--- a/mojo/dart/dart_snapshotter/BUILD.gn
+++ b/mojo/dart/embedder/snapshotter/BUILD.gn
@@ -2,6 +2,12 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+group("snapshotter") {
+  deps = [
+    ":dart_snapshotter",
+  ]
+}
+
 executable("dart_snapshotter") {
   sources = [
     "main.cc",
diff --git a/mojo/dart/dart_snapshotter/main.cc b/mojo/dart/embedder/snapshotter/main.cc
similarity index 98%
rename from mojo/dart/dart_snapshotter/main.cc
rename to mojo/dart/embedder/snapshotter/main.cc
index 7fb5256..0f75dbe 100644
--- a/mojo/dart/dart_snapshotter/main.cc
+++ b/mojo/dart/embedder/snapshotter/main.cc
@@ -12,7 +12,7 @@
 #include "base/logging.h"
 #include "base/process/memory.h"
 #include "dart/runtime/include/dart_api.h"
-#include "mojo/dart/dart_snapshotter/vm.h"
+#include "mojo/dart/embedder/snapshotter/vm.h"
 #include "mojo/edk/embedder/embedder.h"
 #include "mojo/edk/embedder/simple_platform_support.h"
 #include "tonic/dart_error.h"
diff --git a/mojo/dart/dart_snapshotter/test/dart_snapshotter_test.py b/mojo/dart/embedder/snapshotter/test/dart_snapshotter_test.py
similarity index 97%
rename from mojo/dart/dart_snapshotter/test/dart_snapshotter_test.py
rename to mojo/dart/embedder/snapshotter/test/dart_snapshotter_test.py
index 60fb145..249635d 100755
--- a/mojo/dart/dart_snapshotter/test/dart_snapshotter_test.py
+++ b/mojo/dart/embedder/snapshotter/test/dart_snapshotter_test.py
@@ -12,7 +12,7 @@
 
 SNAPSHOT_TEST_DIR = os.path.dirname(os.path.abspath(__file__))
 SRC_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(
-    SNAPSHOT_TEST_DIR))))
+    os.path.dirname(SNAPSHOT_TEST_DIR)))))
 DART_DIR = os.path.join(SRC_ROOT, 'dart')
 
 VM_SNAPSHOT_FILES=[
diff --git a/mojo/dart/dart_snapshotter/vm.cc b/mojo/dart/embedder/snapshotter/vm.cc
similarity index 96%
rename from mojo/dart/dart_snapshotter/vm.cc
rename to mojo/dart/embedder/snapshotter/vm.cc
index 97f9ace..3199e29 100644
--- a/mojo/dart/dart_snapshotter/vm.cc
+++ b/mojo/dart/embedder/snapshotter/vm.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "mojo/dart/dart_snapshotter/vm.h"
+#include "mojo/dart/embedder/snapshotter/vm.h"
 
 #include "base/logging.h"
 #include "tonic/dart_error.h"
diff --git a/mojo/dart/dart_snapshotter/vm.h b/mojo/dart/embedder/snapshotter/vm.h
similarity index 89%
rename from mojo/dart/dart_snapshotter/vm.h
rename to mojo/dart/embedder/snapshotter/vm.h
index f6330dc..a98c93e 100644
--- a/mojo/dart/dart_snapshotter/vm.h
+++ b/mojo/dart/embedder/snapshotter/vm.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef MOJO_DART_DART_SNAPSHOTTER_VM_H_
-#define MOJO_DART_DART_SNAPSHOTTER_VM_H_
+#ifndef MOJO_DART_EMBEDDER_SNAPSHOTTER_VM_H_
+#define MOJO_DART_EMBEDDER_SNAPSHOTTER_VM_H_
 
 #include "dart/runtime/include/dart_api.h"
 #include "tonic/dart_library_provider.h"
@@ -42,4 +42,4 @@
 void InitDartVM();
 Dart_Isolate CreateDartIsolate();
 
-#endif  // MOJO_DART_DART_SNAPSHOTTER_VM_H_
+#endif  // MOJO_DART_EMBEDDER_SNAPSHOTTER_VM_H_
diff --git a/mojo/dart/http_load_test/pubspec.lock b/mojo/dart/http_load_test/pubspec.lock
deleted file mode 100644
index e7b03b5..0000000
--- a/mojo/dart/http_load_test/pubspec.lock
+++ /dev/null
@@ -1,3 +0,0 @@
-# Generated by pub
-# See http://pub.dartlang.org/doc/glossary.html#lockfile
-packages: {}
diff --git a/mojo/dart/observatory_test/.gitignore b/mojo/dart/observatory_test/.gitignore
deleted file mode 100644
index 5cd143d..0000000
--- a/mojo/dart/observatory_test/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-packages
-pubspec.lock
diff --git a/mojo/dart/packages/.gitignore b/mojo/dart/packages/.gitignore
deleted file mode 100644
index 4f0cc2f..0000000
--- a/mojo/dart/packages/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.packages
-packages/
-pubspec.lock
diff --git a/mojo/dart/packages/mojom/.gitignore b/mojo/dart/packages/mojom/.gitignore
deleted file mode 100644
index f9ced93..0000000
--- a/mojo/dart/packages/mojom/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-packages
diff --git a/mojo/dart/tools/presubmit/check_mojom_dart.py b/mojo/dart/tools/presubmit/check_mojom_dart.py
index 8ef547f..5032f26 100755
--- a/mojo/dart/tools/presubmit/check_mojom_dart.py
+++ b/mojo/dart/tools/presubmit/check_mojom_dart.py
@@ -322,6 +322,7 @@
       mojom = _load_mojom(mojom_file)
     except Exception:
       # Could not load .mojom file
+      print("Could not load mojom file: %s" % mojom_file)
       return True
 
     package = _mojom_package(mojom)
diff --git a/mojo/dart/unittests/BUILD.gn b/mojo/dart/unittests/BUILD.gn
new file mode 100644
index 0000000..804bcb5
--- /dev/null
+++ b/mojo/dart/unittests/BUILD.gn
@@ -0,0 +1,12 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+group("unittests") {
+  testonly = true
+  deps = [
+    "//mojo/dart/unittests/embedder_tester",
+    "//mojo/dart/unittests/http_load_test",
+    "//mojo/dart/unittests/observatory_test",
+  ]
+}
diff --git a/mojo/dart/embedder/test/BUILD.gn b/mojo/dart/unittests/embedder_tester/BUILD.gn
similarity index 98%
rename from mojo/dart/embedder/test/BUILD.gn
rename to mojo/dart/unittests/embedder_tester/BUILD.gn
index 48cfc30..62a0048 100644
--- a/mojo/dart/embedder/test/BUILD.gn
+++ b/mojo/dart/unittests/embedder_tester/BUILD.gn
@@ -5,7 +5,7 @@
 import("//mojo/public/tools/bindings/mojom.gni")
 import("//testing/test.gni")
 
-group("test") {
+group("embedder_tester") {
   testonly = true
   deps = [
     ":dart_finalizer_unittests",
diff --git a/mojo/dart/embedder/test/dart_finalizer_test.cc b/mojo/dart/unittests/embedder_tester/dart_finalizer_test.cc
similarity index 90%
rename from mojo/dart/embedder/test/dart_finalizer_test.cc
rename to mojo/dart/unittests/embedder_tester/dart_finalizer_test.cc
index 2c987f8..0fa24af 100644
--- a/mojo/dart/embedder/test/dart_finalizer_test.cc
+++ b/mojo/dart/unittests/embedder_tester/dart_finalizer_test.cc
@@ -6,7 +6,7 @@
 #include "base/files/file_path.h"
 #include "base/path_service.h"
 #include "mojo/dart/embedder/dart_controller.h"
-#include "mojo/dart/embedder/test/dart_test.h"
+#include "mojo/dart/unittests/embedder_tester/dart_test.h"
 #include "mojo/public/c/system/types.h"
 #include "mojo/public/cpp/environment/environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -32,7 +32,8 @@
     PathService::Get(base::DIR_SOURCE_ROOT, &path);
     path = path.AppendASCII("mojo")
                .AppendASCII("dart")
-               .AppendASCII("test")
+               .AppendASCII("unittests")
+               .AppendASCII("embedder_tests")
                .AppendASCII(test);
     std::vector<std::string> script_arguments;
 
diff --git a/mojo/dart/embedder/test/dart_test.cc b/mojo/dart/unittests/embedder_tester/dart_test.cc
similarity index 97%
rename from mojo/dart/embedder/test/dart_test.cc
rename to mojo/dart/unittests/embedder_tester/dart_test.cc
index 4fe4651..4f1f837 100644
--- a/mojo/dart/embedder/test/dart_test.cc
+++ b/mojo/dart/unittests/embedder_tester/dart_test.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "mojo/dart/embedder/test/dart_test.h"
+#include "mojo/dart/unittests/embedder_tester/dart_test.h"
 
 #include "base/bind.h"
 #include "base/files/file_path.h"
diff --git a/mojo/dart/embedder/test/dart_test.h b/mojo/dart/unittests/embedder_tester/dart_test.h
similarity index 89%
rename from mojo/dart/embedder/test/dart_test.h
rename to mojo/dart/unittests/embedder_tester/dart_test.h
index 69bdc48..f2d9bdd 100644
--- a/mojo/dart/embedder/test/dart_test.h
+++ b/mojo/dart/unittests/embedder_tester/dart_test.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef MOJO_DART_EMBEDDER_TEST_DART_TEST_H_
-#define MOJO_DART_EMBEDDER_TEST_DART_TEST_H_
+#ifndef MOJO_DART_UNITTESTS_EMBEDDER_TESTER_DART_TEST_H_
+#define MOJO_DART_UNITTESTS_EMBEDDER_TESTER_DART_TEST_H_
 
 #include "base/bind.h"
 #include "base/files/file_path.h"
@@ -54,4 +54,4 @@
 }  // namespace dart
 }  // namespace mojo
 
-#endif  // MOJO_DART_EMBEDDER_TEST_DART_TEST_H_
+#endif  // MOJO_DART_UNITTESTS_EMBEDDER_TESTER_DART_TEST_H_
diff --git a/mojo/dart/embedder/test/dart_to_cpp.mojom b/mojo/dart/unittests/embedder_tester/dart_to_cpp.mojom
similarity index 100%
rename from mojo/dart/embedder/test/dart_to_cpp.mojom
rename to mojo/dart/unittests/embedder_tester/dart_to_cpp.mojom
diff --git a/mojo/dart/embedder/test/dart_to_cpp_tests.cc b/mojo/dart/unittests/embedder_tester/dart_to_cpp_tests.cc
similarity index 97%
rename from mojo/dart/embedder/test/dart_to_cpp_tests.cc
rename to mojo/dart/unittests/embedder_tester/dart_to_cpp_tests.cc
index 4b7a703..a5b7ee0 100644
--- a/mojo/dart/embedder/test/dart_to_cpp_tests.cc
+++ b/mojo/dart/unittests/embedder_tester/dart_to_cpp_tests.cc
@@ -13,8 +13,8 @@
 #include "base/run_loop.h"
 #include "base/threading/thread.h"
 #include "mojo/dart/embedder/dart_controller.h"
-#include "mojo/dart/embedder/test/dart_test.h"
-#include "mojo/dart/embedder/test/dart_to_cpp.mojom.h"
+#include "mojo/dart/unittests/embedder_tester/dart_test.h"
+#include "mojo/dart/unittests/embedder_tester/dart_to_cpp.mojom.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "mojo/public/cpp/system/core.h"
 #include "mojo/public/cpp/system/macros.h"
@@ -281,8 +281,8 @@
     PathService::Get(base::DIR_SOURCE_ROOT, &path);
     path = path.AppendASCII("mojo")
                .AppendASCII("dart")
-               .AppendASCII("embedder")
-               .AppendASCII("test")
+               .AppendASCII("unittests")
+               .AppendASCII("embedder_tests")
                .AppendASCII(test);
 
     // Setup the package root.
diff --git a/mojo/dart/embedder/test/run_dart_tests.cc b/mojo/dart/unittests/embedder_tester/run_dart_tests.cc
similarity index 94%
rename from mojo/dart/embedder/test/run_dart_tests.cc
rename to mojo/dart/unittests/embedder_tester/run_dart_tests.cc
index 2a29b0b..c9b2bd5 100644
--- a/mojo/dart/embedder/test/run_dart_tests.cc
+++ b/mojo/dart/unittests/embedder_tester/run_dart_tests.cc
@@ -7,7 +7,7 @@
 #include "base/path_service.h"
 #include "base/rand_util.h"
 #include "mojo/dart/embedder/dart_controller.h"
-#include "mojo/dart/embedder/test/dart_test.h"
+#include "mojo/dart/unittests/embedder_tester/dart_test.h"
 #include "mojo/public/c/system/types.h"
 #include "mojo/public/cpp/environment/environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -28,7 +28,8 @@
     PathService::Get(base::DIR_SOURCE_ROOT, &path);
     path = path.AppendASCII("mojo")
                .AppendASCII("dart")
-               .AppendASCII("test")
+               .AppendASCII("unittests")
+               .AppendASCII("embedder_tests")
                .AppendASCII(test);
     std::vector<std::string> script_arguments;
 
diff --git a/mojo/dart/embedder/test/validation_unittest.cc b/mojo/dart/unittests/embedder_tester/validation_unittest.cc
similarity index 95%
rename from mojo/dart/embedder/test/validation_unittest.cc
rename to mojo/dart/unittests/embedder_tester/validation_unittest.cc
index 2092494..1300ca9 100644
--- a/mojo/dart/embedder/test/validation_unittest.cc
+++ b/mojo/dart/unittests/embedder_tester/validation_unittest.cc
@@ -15,7 +15,7 @@
 #include "base/rand_util.h"
 #include "base/strings/string_util.h"
 #include "mojo/dart/embedder/dart_controller.h"
-#include "mojo/dart/embedder/test/dart_test.h"
+#include "mojo/dart/unittests/embedder_tester/dart_test.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace mojo {
@@ -46,7 +46,8 @@
     PathService::Get(base::DIR_SOURCE_ROOT, &path);
     path = path.AppendASCII("mojo")
                .AppendASCII("dart")
-               .AppendASCII("test")
+               .AppendASCII("unittests")
+               .AppendASCII("embedder_tests")
                .AppendASCII("validation_test.dart");
     std::vector<std::string> script_arguments =
         CollectTests(base::FilePath(test));
diff --git a/mojo/dart/test/async_await_test.dart b/mojo/dart/unittests/embedder_tests/async_await_test.dart
similarity index 100%
rename from mojo/dart/test/async_await_test.dart
rename to mojo/dart/unittests/embedder_tests/async_await_test.dart
diff --git a/mojo/dart/test/async_test.dart b/mojo/dart/unittests/embedder_tests/async_test.dart
similarity index 100%
rename from mojo/dart/test/async_test.dart
rename to mojo/dart/unittests/embedder_tests/async_test.dart
diff --git a/mojo/dart/test/bindings_generation_test.dart b/mojo/dart/unittests/embedder_tests/bindings_generation_test.dart
similarity index 100%
rename from mojo/dart/test/bindings_generation_test.dart
rename to mojo/dart/unittests/embedder_tests/bindings_generation_test.dart
diff --git a/mojo/dart/test/codec_test.dart b/mojo/dart/unittests/embedder_tests/codec_test.dart
similarity index 100%
rename from mojo/dart/test/codec_test.dart
rename to mojo/dart/unittests/embedder_tests/codec_test.dart
diff --git a/mojo/dart/test/compile_all_interfaces_test.dart b/mojo/dart/unittests/embedder_tests/compile_all_interfaces_test.dart
similarity index 100%
rename from mojo/dart/test/compile_all_interfaces_test.dart
rename to mojo/dart/unittests/embedder_tests/compile_all_interfaces_test.dart
diff --git a/mojo/dart/test/control_messages_test.dart b/mojo/dart/unittests/embedder_tests/control_messages_test.dart
similarity index 100%
rename from mojo/dart/test/control_messages_test.dart
rename to mojo/dart/unittests/embedder_tests/control_messages_test.dart
diff --git a/mojo/dart/test/core_test.dart b/mojo/dart/unittests/embedder_tests/core_test.dart
similarity index 100%
rename from mojo/dart/test/core_test.dart
rename to mojo/dart/unittests/embedder_tests/core_test.dart
diff --git a/mojo/dart/test/core_types_test.dart b/mojo/dart/unittests/embedder_tests/core_types_test.dart
similarity index 100%
rename from mojo/dart/test/core_types_test.dart
rename to mojo/dart/unittests/embedder_tests/core_types_test.dart
diff --git a/mojo/dart/embedder/test/dart_to_cpp_tests.dart b/mojo/dart/unittests/embedder_tests/dart_to_cpp_tests.dart
similarity index 100%
rename from mojo/dart/embedder/test/dart_to_cpp_tests.dart
rename to mojo/dart/unittests/embedder_tests/dart_to_cpp_tests.dart
diff --git a/mojo/dart/test/exception_test.dart b/mojo/dart/unittests/embedder_tests/exception_test.dart
similarity index 100%
rename from mojo/dart/test/exception_test.dart
rename to mojo/dart/unittests/embedder_tests/exception_test.dart
diff --git a/mojo/dart/test/handle_finalizer_test.dart b/mojo/dart/unittests/embedder_tests/handle_finalizer_test.dart
similarity index 100%
rename from mojo/dart/test/handle_finalizer_test.dart
rename to mojo/dart/unittests/embedder_tests/handle_finalizer_test.dart
diff --git a/mojo/dart/test/hello_mojo.dart b/mojo/dart/unittests/embedder_tests/hello_mojo.dart
similarity index 100%
rename from mojo/dart/test/hello_mojo.dart
rename to mojo/dart/unittests/embedder_tests/hello_mojo.dart
diff --git a/mojo/dart/test/import_mojo.dart b/mojo/dart/unittests/embedder_tests/import_mojo.dart
similarity index 100%
rename from mojo/dart/test/import_mojo.dart
rename to mojo/dart/unittests/embedder_tests/import_mojo.dart
diff --git a/mojo/dart/test/isolate_test.dart b/mojo/dart/unittests/embedder_tests/isolate_test.dart
similarity index 100%
rename from mojo/dart/test/isolate_test.dart
rename to mojo/dart/unittests/embedder_tests/isolate_test.dart
diff --git a/mojo/dart/test/ping_pong_test.dart b/mojo/dart/unittests/embedder_tests/ping_pong_test.dart
similarity index 100%
rename from mojo/dart/test/ping_pong_test.dart
rename to mojo/dart/unittests/embedder_tests/ping_pong_test.dart
diff --git a/mojo/dart/test/shared_buffer_finalizer_test.dart b/mojo/dart/unittests/embedder_tests/shared_buffer_finalizer_test.dart
similarity index 100%
rename from mojo/dart/test/shared_buffer_finalizer_test.dart
rename to mojo/dart/unittests/embedder_tests/shared_buffer_finalizer_test.dart
diff --git a/mojo/dart/test/simple_handle_watcher_test.dart b/mojo/dart/unittests/embedder_tests/simple_handle_watcher_test.dart
similarity index 100%
rename from mojo/dart/test/simple_handle_watcher_test.dart
rename to mojo/dart/unittests/embedder_tests/simple_handle_watcher_test.dart
diff --git a/mojo/dart/test/timer_test.dart b/mojo/dart/unittests/embedder_tests/timer_test.dart
similarity index 100%
rename from mojo/dart/test/timer_test.dart
rename to mojo/dart/unittests/embedder_tests/timer_test.dart
diff --git a/mojo/dart/test/unhandled_exception_test.dart b/mojo/dart/unittests/embedder_tests/unhandled_exception_test.dart
similarity index 100%
rename from mojo/dart/test/unhandled_exception_test.dart
rename to mojo/dart/unittests/embedder_tests/unhandled_exception_test.dart
diff --git a/mojo/dart/test/uri_base_test.dart b/mojo/dart/unittests/embedder_tests/uri_base_test.dart
similarity index 100%
rename from mojo/dart/test/uri_base_test.dart
rename to mojo/dart/unittests/embedder_tests/uri_base_test.dart
diff --git a/mojo/dart/test/validation_test.dart b/mojo/dart/unittests/embedder_tests/validation_test.dart
similarity index 100%
rename from mojo/dart/test/validation_test.dart
rename to mojo/dart/unittests/embedder_tests/validation_test.dart
diff --git a/mojo/dart/http_load_test/BUILD.gn b/mojo/dart/unittests/http_load_test/BUILD.gn
similarity index 100%
rename from mojo/dart/http_load_test/BUILD.gn
rename to mojo/dart/unittests/http_load_test/BUILD.gn
diff --git a/mojo/dart/http_load_test/bin/tester.dart b/mojo/dart/unittests/http_load_test/bin/tester.dart
similarity index 100%
rename from mojo/dart/http_load_test/bin/tester.dart
rename to mojo/dart/unittests/http_load_test/bin/tester.dart
diff --git a/mojo/dart/http_load_test/lib/main.dart b/mojo/dart/unittests/http_load_test/lib/main.dart
similarity index 100%
rename from mojo/dart/http_load_test/lib/main.dart
rename to mojo/dart/unittests/http_load_test/lib/main.dart
diff --git a/mojo/dart/http_load_test/lib/src/part0.dart b/mojo/dart/unittests/http_load_test/lib/src/part0.dart
similarity index 100%
rename from mojo/dart/http_load_test/lib/src/part0.dart
rename to mojo/dart/unittests/http_load_test/lib/src/part0.dart
diff --git a/mojo/dart/http_load_test/pubspec.yaml b/mojo/dart/unittests/http_load_test/pubspec.yaml
similarity index 100%
rename from mojo/dart/http_load_test/pubspec.yaml
rename to mojo/dart/unittests/http_load_test/pubspec.yaml
diff --git a/mojo/dart/http_load_test/runner.py b/mojo/dart/unittests/http_load_test/runner.py
similarity index 100%
rename from mojo/dart/http_load_test/runner.py
rename to mojo/dart/unittests/http_load_test/runner.py
diff --git a/mojo/dart/observatory_test/BUILD.gn b/mojo/dart/unittests/observatory_test/BUILD.gn
similarity index 100%
rename from mojo/dart/observatory_test/BUILD.gn
rename to mojo/dart/unittests/observatory_test/BUILD.gn
diff --git a/mojo/dart/observatory_test/lib/main.dart b/mojo/dart/unittests/observatory_test/lib/main.dart
similarity index 100%
rename from mojo/dart/observatory_test/lib/main.dart
rename to mojo/dart/unittests/observatory_test/lib/main.dart
diff --git a/mojo/dart/observatory_test/pubspec.yaml b/mojo/dart/unittests/observatory_test/pubspec.yaml
similarity index 100%
rename from mojo/dart/observatory_test/pubspec.yaml
rename to mojo/dart/unittests/observatory_test/pubspec.yaml
diff --git a/mojo/dart/observatory_tester/runner.py b/mojo/dart/unittests/observatory_tester/runner.py
similarity index 100%
rename from mojo/dart/observatory_tester/runner.py
rename to mojo/dart/unittests/observatory_tester/runner.py
diff --git a/mojo/dart/observatory_tester/tester.dart b/mojo/dart/unittests/observatory_tester/tester.dart
similarity index 100%
rename from mojo/dart/observatory_tester/tester.dart
rename to mojo/dart/unittests/observatory_tester/tester.dart
diff --git a/mojo/tools/get_test_list.py b/mojo/tools/get_test_list.py
index 0208f0f..53d93ec 100755
--- a/mojo/tools/get_test_list.py
+++ b/mojo/tools/get_test_list.py
@@ -166,12 +166,14 @@
   if target_os == Config.OS_LINUX and ShouldRunTest(Config.TEST_TYPE_DEFAULT):
     AddEntry("Dart Observatory tests",
              ["python",
-              os.path.join("mojo", "dart", "observatory_tester", "runner.py"),
+              os.path.join("mojo", "dart", "unittests", "observatory_tester",
+                           "runner.py"),
               "--build-dir=" + build_dir,
               "--dart-exe=third_party/dart-sdk/dart-sdk/bin/dart"])
     AddEntry("Dart HTTP Load test",
            ["python",
-            os.path.join("mojo", "dart", "http_load_test", "runner.py"),
+            os.path.join("mojo", "dart", "unittests", "http_load_test",
+                         "runner.py"),
             "--build-dir=" + build_dir,
             "--dart-exe=third_party/dart-sdk/dart-sdk/bin/dart"])
 
@@ -187,7 +189,7 @@
   if target_os == Config.OS_LINUX and ShouldRunTest(Config.TEST_TYPE_DEFAULT):
     AddEntry("Dart snapshotter test",
         ["python",
-         os.path.join("mojo", "dart", "dart_snapshotter", "test",
+         os.path.join("mojo", "dart", "embedder", "snapshotter", "test",
                       "dart_snapshotter_test.py"),
          "--build-dir=" + build_dir])
 
diff --git a/services/BUILD.gn b/services/BUILD.gn
index 919f3f0..cabed53 100644
--- a/services/BUILD.gn
+++ b/services/BUILD.gn
@@ -80,7 +80,6 @@
     "//services/asset_bundle:apptests",
     "//services/authenticating_url_loader_interceptor:apptests",
     "//services/clipboard:apptests",
-    "//services/dart/dart_apptests",
     "//services/http_server:apptests",
     "//services/native_support:apptests",
     "//services/prediction:apptests",
diff --git a/services/dart/dart_apptests/.gitignore b/services/dart/dart_apptests/.gitignore
deleted file mode 100644
index 53d75f1..0000000
--- a/services/dart/dart_apptests/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-packages/
-.packages
-pubspec.lock
diff --git a/services/dart/test/dart/service_test_interfaces/BUILD.gn b/services/dart/test/dart/service_test_interfaces/BUILD.gn
deleted file mode 100644
index 03ac77f..0000000
--- a/services/dart/test/dart/service_test_interfaces/BUILD.gn
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import("//mojo/public/dart/rules.gni")
-
-dart_pkg("service_test_interfaces") {
-  sources = [
-    "pubspec.yaml",
-  ]
-  deps = [
-    "//mojo/public/dart",
-    "//services/dart/test:pingpong_service_interface",
-    "//services/dart/test:echo_service_interface",
-  ]
-}
diff --git a/services/dart/test/dart/service_test_interfaces/pubspec.yaml b/services/dart/test/dart/service_test_interfaces/pubspec.yaml
deleted file mode 100644
index 92c47eb..0000000
--- a/services/dart/test/dart/service_test_interfaces/pubspec.yaml
+++ /dev/null
@@ -1 +0,0 @@
-name: service_test_interfaces
diff --git a/services/dart/test/echo/pubspec.lock b/services/dart/test/echo/pubspec.lock
deleted file mode 100644
index e7b03b5..0000000
--- a/services/dart/test/echo/pubspec.lock
+++ /dev/null
@@ -1,3 +0,0 @@
-# Generated by pub
-# See http://pub.dartlang.org/doc/glossary.html#lockfile
-packages: {}
diff --git a/services/dart/test/pingpong/pubspec.lock b/services/dart/test/pingpong/pubspec.lock
deleted file mode 100644
index e7b03b5..0000000
--- a/services/dart/test/pingpong/pubspec.lock
+++ /dev/null
@@ -1,3 +0,0 @@
-# Generated by pub
-# See http://pub.dartlang.org/doc/glossary.html#lockfile
-packages: {}
diff --git a/services/dart/test/pingpong_target/pubspec.lock b/services/dart/test/pingpong_target/pubspec.lock
deleted file mode 100644
index e7b03b5..0000000
--- a/services/dart/test/pingpong_target/pubspec.lock
+++ /dev/null
@@ -1,3 +0,0 @@
-# Generated by pub
-# See http://pub.dartlang.org/doc/glossary.html#lockfile
-packages: {}