diff --git a/android/src/androidTest/AndroidManifest.xml b/android/src/androidTest/AndroidManifest.xml
index ca8e292..e0bd048 100644
--- a/android/src/androidTest/AndroidManifest.xml
+++ b/android/src/androidTest/AndroidManifest.xml
@@ -11,18 +11,11 @@
     <!-- Gradle generates an <instrumentation> block during the build process,
          but in order to work with other build systems, that don't do that,
          there must be such a block declared here. -->
-    <instrumentation
-        android:name="android.test.InstrumentationTestRunner"
-        android:targetPackage="com.android.i18n.addressinput.test" />
-
-    <uses-permission android:name="android.permission.INTERNET" />
-
-    <application
-        android:allowBackup="false"
-        android:icon="@android:drawable/sym_def_app_icon" >
-        <uses-library android:name="android.test.runner" />
-        <activity
-            android:name="com.android.i18n.addressinput.testing.TestActivity" />
-    </application>
-
+  <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.android.i18n.addressinput.test"/>
+  <instrumentation android:name="com.google.android.apps.common.testing.testrunner.Google3InstrumentationTestRunner" android:targetPackage="com.android.i18n.addressinput.test"/>
+  <uses-permission android:name="android.permission.INTERNET"/>
+  <application android:allowBackup="false" android:icon="@android:drawable/sym_def_app_icon">
+    <uses-library android:name="android.test.runner"/>
+    <activity android:name="com.android.i18n.addressinput.testing.TestActivity"/>
+  </application>
 </manifest>
diff --git a/cpp/src/address_ui.cc b/cpp/src/address_ui.cc
index 4afafef..89cf586 100644
--- a/cpp/src/address_ui.cc
+++ b/cpp/src/address_ui.cc
@@ -42,39 +42,39 @@
                              int postal_code_name_message_id,
                              int locality_name_message_id,
                              int sublocality_name_message_id) {
-  int messageId;
+  int message_id;
   switch (field) {
     case SORTING_CODE:
       // This needs no translation as it's used only in one locale.
       return "CEDEX";
     case COUNTRY:
-      messageId = IDS_LIBADDRESSINPUT_COUNTRY_OR_REGION_LABEL;
+      message_id = IDS_LIBADDRESSINPUT_COUNTRY_OR_REGION_LABEL;
       break;
     case ADMIN_AREA:
-      messageId = admin_area_name_message_id;
+      message_id = admin_area_name_message_id;
       break;
     case LOCALITY:
-      messageId = locality_name_message_id;
+      message_id = locality_name_message_id;
       break;
     case DEPENDENT_LOCALITY:
-      messageId = sublocality_name_message_id;
+      message_id = sublocality_name_message_id;
       break;
     case POSTAL_CODE:
-      messageId = postal_code_name_message_id;
+      message_id = postal_code_name_message_id;
       break;
     case STREET_ADDRESS:
-      messageId = IDS_LIBADDRESSINPUT_ADDRESS_LINE_1_LABEL;
+      message_id = IDS_LIBADDRESSINPUT_ADDRESS_LINE_1_LABEL;
       break;
     case ORGANIZATION:
-      messageId = IDS_LIBADDRESSINPUT_ORGANIZATION_LABEL;
+      message_id = IDS_LIBADDRESSINPUT_ORGANIZATION_LABEL;
       break;
     case RECIPIENT:
-      messageId = IDS_LIBADDRESSINPUT_RECIPIENT_LABEL;
+      message_id = IDS_LIBADDRESSINPUT_RECIPIENT_LABEL;
       break;
     default:
-      messageId = INVALID_MESSAGE_ID;
+      message_id = INVALID_MESSAGE_ID;
   }
-  return localization.GetString(messageId);
+  return localization.GetString(message_id);
 }
 
 }  // namespace
diff --git a/cpp/test/testdata_source.cc b/cpp/test/testdata_source.cc
index cd28568..9325c12 100644
--- a/cpp/test/testdata_source.cc
+++ b/cpp/test/testdata_source.cc
@@ -26,6 +26,8 @@
 namespace i18n {
 namespace addressinput {
 
+const char kDataFileName[] = TEST_DATA_DIR "/countryinfo.txt";
+
 namespace {
 
 // For historical reasons, normal and aggregated data is here stored in the
@@ -34,9 +36,6 @@
 const char kNormalPrefix = '-';
 const char kAggregatePrefix = '+';
 
-// The name of the test data file.
-const char kDataFileName[] = TEST_DATA_DIR "/countryinfo.txt";
-
 // Each data key begins with this string. Example of a data key:
 //     data/CH/AG
 const char kDataKeyPrefix[] = "data/";
@@ -53,10 +52,9 @@
 
 std::map<std::string, std::string> InitData(const std::string& src_path) {
   std::map<std::string, std::string> data;
-  std::string data_file_name = src_path + kDataFileName;
-  std::ifstream file(data_file_name);
+  std::ifstream file(src_path);
   if (!file.is_open()) {
-    std::cerr << "Error opening \"" << data_file_name << "\"." << std::endl;
+    std::cerr << "Error opening \"" << src_path << "\"." << std::endl;
     std::exit(EXIT_FAILURE);
   }
 
@@ -150,7 +148,7 @@
     : aggregate_(aggregate), src_path_(src_path) {}
 
 TestdataSource::TestdataSource(bool aggregate)
-    : aggregate_(aggregate) {}
+    : aggregate_(aggregate), src_path_(kDataFileName) {}
 
 TestdataSource::~TestdataSource() {}
 
diff --git a/cpp/test/testdata_source.h b/cpp/test/testdata_source.h
index e945e1f..3c8e76b 100644
--- a/cpp/test/testdata_source.h
+++ b/cpp/test/testdata_source.h
@@ -25,20 +25,20 @@
 namespace i18n {
 namespace addressinput {
 
+// The name of the test data file.
+extern const char kDataFileName[];
+
 // Gets address metadata from a text file. Sample usage:
 //    class MyClass {
 //     public:
 //      MyClass(const MyClass&) = delete;
 //      MyClass& operator=(const MyClass&) = delete;
 //
-//      MyClass() : data_ready_(BuildCallback(this, &MyClass::OnDataReady)) {
-//        base::FilePath src_path;
-//        CHECK(PathService::Get(base::DIR_SOURCE_ROOT, &src_path));
-//        source_ = new TestdataSource(/*aggregate=*/true,
-//                                     src_path.value() + '/');
-//      }
+//      MyClass() : data_ready_(BuildCallback(this, &MyClass::OnDataReady)),
+//                  source_(/*aggregate=*/true,
+//                          "path/to/test/data/file") {}
 //
-//      ~MyClass() { delete source_; }
+//      ~MyClass() {}
 //
 //      void GetData(const std::string& key) {
 //        source_->Get(key, *data_ready_);
@@ -53,7 +53,7 @@
 //      }
 //
 //      const std::unique_ptr<const Source::Callback> data_ready_;
-//      const TestdataSource* source_;
+//      const TestdataSource source_;
 //    };
 class TestdataSource : public Source {
  public:
@@ -61,8 +61,10 @@
   TestdataSource& operator=(const TestdataSource&) = delete;
 
   // Will return aggregate data if |aggregate| is set to true.
+  // This constructor uses a relative path to the test file.
   explicit TestdataSource(bool aggregate);
-  // |src_path| is the root of the source tree.
+
+  // |src_path| is a path to the test data file.
   TestdataSource(bool aggregate, const std::string& src_path);
 
   virtual ~TestdataSource();
diff --git a/cpp/test/testdata_source_test.cc b/cpp/test/testdata_source_test.cc
index 4a8cf4a..dfaf965 100644
--- a/cpp/test/testdata_source_test.cc
+++ b/cpp/test/testdata_source_test.cc
@@ -31,6 +31,7 @@
 using i18n::addressinput::RegionDataConstants;
 using i18n::addressinput::Source;
 using i18n::addressinput::TestdataSource;
+using i18n::addressinput::kDataFileName;
 
 // Tests for TestdataSource object.
 class TestdataSourceTest : public testing::TestWithParam<std::string> {
@@ -41,9 +42,9 @@
  protected:
   TestdataSourceTest()
       : source_(false),
-        source_with_path_(false, ""),
+        source_with_path_(false, kDataFileName),
         aggregate_source_(true),
-        aggregate_source_with_path_(true, ""),
+        aggregate_source_with_path_(true, kDataFileName),
         success_(false),
         key_(),
         data_(),
