Make service_account_email public, read-only (#76)

diff --git a/tests/compute_engine/test_credentials.py b/tests/compute_engine/test_credentials.py
index daa61fe..87f7472 100644
--- a/tests/compute_engine/test_credentials.py
+++ b/tests/compute_engine/test_credentials.py
@@ -34,6 +34,8 @@
         assert not self.credentials.expired
         # Scopes aren't needed
         assert not self.credentials.requires_scopes
+        # Service account email hasn't been populated
+        assert self.credentials.service_account_email == 'default'
 
     @mock.patch(
         'google.auth._helpers.utcnow', return_value=datetime.datetime.min)
@@ -58,7 +60,7 @@
             datetime.datetime.min + datetime.timedelta(seconds=500))
 
         # Check the credential info
-        assert (self.credentials._service_account_email ==
+        assert (self.credentials.service_account_email ==
                 'service-account@example.com')
         assert self.credentials._scopes == ['one', 'two']
 
diff --git a/tests/oauth2/test_service_account.py b/tests/oauth2/test_service_account.py
index 01234b5..f07f79d 100644
--- a/tests/oauth2/test_service_account.py
+++ b/tests/oauth2/test_service_account.py
@@ -63,7 +63,7 @@
 
         assert (credentials._signer.key_id ==
                 SERVICE_ACCOUNT_INFO['private_key_id'])
-        assert (credentials._service_account_email ==
+        assert (credentials.service_account_email ==
                 SERVICE_ACCOUNT_INFO['client_email'])
         assert credentials._token_uri == SERVICE_ACCOUNT_INFO['token_uri']
 
@@ -77,8 +77,8 @@
             info, scopes=scopes, subject=subject,
             additional_claims=additional_claims)
 
+        assert credentials.service_account_email == info['client_email']
         assert credentials._signer.key_id == info['private_key_id']
-        assert credentials._service_account_email == info['client_email']
         assert credentials._token_uri == info['token_uri']
         assert credentials._scopes == scopes
         assert credentials._subject == subject
@@ -90,8 +90,8 @@
         credentials = service_account.Credentials.from_service_account_file(
             SERVICE_ACCOUNT_JSON_FILE)
 
+        assert credentials.service_account_email == info['client_email']
         assert credentials._signer.key_id == info['private_key_id']
-        assert credentials._service_account_email == info['client_email']
         assert credentials._token_uri == info['token_uri']
 
     def test_from_service_account_file_args(self):
@@ -104,8 +104,8 @@
             SERVICE_ACCOUNT_JSON_FILE, subject=subject,
             scopes=scopes, additional_claims=additional_claims)
 
+        assert credentials.service_account_email == info['client_email']
         assert credentials._signer.key_id == info['private_key_id']
-        assert credentials._service_account_email == info['client_email']
         assert credentials._token_uri == info['token_uri']
         assert credentials._scopes == scopes
         assert credentials._subject == subject
diff --git a/tests/test__oauth2client.py b/tests/test__oauth2client.py
index 9478406..1d7a4a8 100644
--- a/tests/test__oauth2client.py
+++ b/tests/test__oauth2client.py
@@ -54,7 +54,7 @@
     new_credentials = _oauth2client._convert_service_account_credentials(
         old_credentials)
 
-    assert (new_credentials._service_account_email ==
+    assert (new_credentials.service_account_email ==
             old_credentials.service_account_email)
     assert new_credentials._signer.key_id == old_credentials._private_key_id
     assert new_credentials._token_uri == old_credentials.token_uri
@@ -68,7 +68,7 @@
     new_credentials = _oauth2client._convert_service_account_credentials(
         old_credentials)
 
-    assert (new_credentials._service_account_email ==
+    assert (new_credentials.service_account_email ==
             old_credentials.service_account_email)
     assert new_credentials._signer.key_id == old_credentials._private_key_id
     assert new_credentials._token_uri == old_credentials.token_uri
@@ -81,7 +81,7 @@
     new_credentials = _oauth2client._convert_gce_app_assertion_credentials(
         old_credentials)
 
-    assert (new_credentials._service_account_email ==
+    assert (new_credentials.service_account_email ==
             old_credentials.service_account_email)
 
 
diff --git a/tests/test_app_engine.py b/tests/test_app_engine.py
index e1189ed..94f528d 100644
--- a/tests/test_app_engine.py
+++ b/tests/test_app_engine.py
@@ -70,6 +70,23 @@
         assert scoped_credentials.has_scopes(['email'])
         assert not scoped_credentials.requires_scopes
 
+    def test_service_account_email_implicit(self, app_identity_mock):
+        app_identity_mock.get_service_account_name.return_value = (
+            mock.sentinel.service_account_email)
+        credentials = app_engine.Credentials()
+
+        assert (credentials.service_account_email ==
+                mock.sentinel.service_account_email)
+        assert app_identity_mock.get_service_account_name.called
+
+    def test_service_account_email_explicit(self, app_identity_mock):
+        credentials = app_engine.Credentials(
+            service_account_id=mock.sentinel.service_account_email)
+
+        assert (credentials.service_account_email ==
+                mock.sentinel.service_account_email)
+        assert not app_identity_mock.get_service_account_name.called
+
     @mock.patch(
         'google.auth._helpers.utcnow',
         return_value=datetime.datetime.min)