aconfig: add dump --format=textproto

Teach `aconfig dump` to print its as text protobuf.

Bug: 288713733
Test: atest aconfig.test aconfig.test.java
Change-Id: Id31ce53226162a563fbe2d4841a8f6cf96c22436
diff --git a/tools/aconfig/src/commands.rs b/tools/aconfig/src/commands.rs
index bd5b49c..58831cc 100644
--- a/tools/aconfig/src/commands.rs
+++ b/tools/aconfig/src/commands.rs
@@ -203,6 +203,7 @@
     Text,
     Debug,
     Protobuf,
+    Textproto,
 }
 
 pub fn dump_parsed_flags(mut input: Vec<Input>, format: DumpFormat) -> Result<Vec<u8>> {
@@ -234,6 +235,10 @@
         DumpFormat::Protobuf => {
             parsed_flags.write_to_vec(&mut output)?;
         }
+        DumpFormat::Textproto => {
+            let s = protobuf::text_format::print_to_string_pretty(&parsed_flags);
+            output.extend_from_slice(s.as_bytes());
+        }
     }
     Ok(output)
 }
@@ -314,88 +319,12 @@
 
     #[test]
     fn test_dump_protobuf_format() {
-        let text_proto = r#"
-parsed_flag {
-  package: "com.android.aconfig.test"
-  name: "disabled_ro"
-  namespace: "aconfig_test"
-  description: "This flag is DISABLED + READ_ONLY"
-  state: DISABLED
-  permission: READ_ONLY
-  trace {
-    source: "tests/test.aconfig"
-    state: DISABLED
-    permission: READ_WRITE
-  }
-  trace {
-    source: "tests/first.values"
-    state: DISABLED
-    permission: READ_ONLY
-  }
-  bug: "123"
-}
-parsed_flag {
-  package: "com.android.aconfig.test"
-  name: "disabled_rw"
-  namespace: "aconfig_test"
-  description: "This flag is DISABLED + READ_WRITE"
-  state: DISABLED
-  permission: READ_WRITE
-  trace {
-    source: "tests/test.aconfig"
-    state: DISABLED
-    permission: READ_WRITE
-  }
-  bug: "456"
-}
-parsed_flag {
-  package: "com.android.aconfig.test"
-  name: "enabled_ro"
-  namespace: "aconfig_test"
-  description: "This flag is ENABLED + READ_ONLY"
-  state: ENABLED
-  permission: READ_ONLY
-  trace {
-    source: "tests/test.aconfig"
-    state: DISABLED
-    permission: READ_WRITE
-  }
-  trace {
-    source: "tests/first.values"
-    state: DISABLED
-    permission: READ_WRITE
-  }
-  trace {
-    source: "tests/second.values"
-    state: ENABLED
-    permission: READ_ONLY
-  }
-  bug: "789"
-  bug: "abc"
-}
-parsed_flag {
-  package: "com.android.aconfig.test"
-  name: "enabled_rw"
-  namespace: "aconfig_test"
-  description: "This flag is ENABLED + READ_WRITE"
-  state: ENABLED
-  permission: READ_WRITE
-  trace {
-    source: "tests/test.aconfig"
-    state: DISABLED
-    permission: READ_WRITE
-  }
-  trace {
-    source: "tests/first.values"
-    state: ENABLED
-    permission: READ_WRITE
-  }
-}
-"#;
-        let expected = protobuf::text_format::parse_from_str::<ProtoParsedFlags>(text_proto)
-            .unwrap()
-            .write_to_bytes()
-            .unwrap();
+        let expected = protobuf::text_format::parse_from_str::<ProtoParsedFlags>(
+            crate::test::TEST_FLAGS_TEXTPROTO,
+        )
+        .unwrap()
+        .write_to_bytes()
+        .unwrap();
 
         let input = parse_test_flags_as_input();
         let actual = dump_parsed_flags(vec![input], DumpFormat::Protobuf).unwrap();
@@ -403,6 +332,14 @@
         assert_eq!(expected, actual);
     }
 
+    #[test]
+    fn test_dump_textproto_format() {
+        let input = parse_test_flags_as_input();
+        let bytes = dump_parsed_flags(vec![input], DumpFormat::Textproto).unwrap();
+        let text = std::str::from_utf8(&bytes).unwrap();
+        assert_eq!(crate::test::TEST_FLAGS_TEXTPROTO.trim(), text.trim());
+    }
+
     fn parse_test_flags_as_input() -> Input {
         let parsed_flags = crate::test::parse_test_flags();
         let binary_proto = parsed_flags.write_to_bytes().unwrap();
diff --git a/tools/aconfig/src/test.rs b/tools/aconfig/src/test.rs
index abe9015..04bbe28 100644
--- a/tools/aconfig/src/test.rs
+++ b/tools/aconfig/src/test.rs
@@ -22,6 +22,85 @@
 
     pub const TEST_PACKAGE: &str = "com.android.aconfig.test";
 
+    pub const TEST_FLAGS_TEXTPROTO: &str = r#"
+parsed_flag {
+  package: "com.android.aconfig.test"
+  name: "disabled_ro"
+  namespace: "aconfig_test"
+  description: "This flag is DISABLED + READ_ONLY"
+  bug: "123"
+  state: DISABLED
+  permission: READ_ONLY
+  trace {
+    source: "tests/test.aconfig"
+    state: DISABLED
+    permission: READ_WRITE
+  }
+  trace {
+    source: "tests/first.values"
+    state: DISABLED
+    permission: READ_ONLY
+  }
+}
+parsed_flag {
+  package: "com.android.aconfig.test"
+  name: "disabled_rw"
+  namespace: "aconfig_test"
+  description: "This flag is DISABLED + READ_WRITE"
+  bug: "456"
+  state: DISABLED
+  permission: READ_WRITE
+  trace {
+    source: "tests/test.aconfig"
+    state: DISABLED
+    permission: READ_WRITE
+  }
+}
+parsed_flag {
+  package: "com.android.aconfig.test"
+  name: "enabled_ro"
+  namespace: "aconfig_test"
+  description: "This flag is ENABLED + READ_ONLY"
+  bug: "789"
+  bug: "abc"
+  state: ENABLED
+  permission: READ_ONLY
+  trace {
+    source: "tests/test.aconfig"
+    state: DISABLED
+    permission: READ_WRITE
+  }
+  trace {
+    source: "tests/first.values"
+    state: DISABLED
+    permission: READ_WRITE
+  }
+  trace {
+    source: "tests/second.values"
+    state: ENABLED
+    permission: READ_ONLY
+  }
+}
+parsed_flag {
+  package: "com.android.aconfig.test"
+  name: "enabled_rw"
+  namespace: "aconfig_test"
+  description: "This flag is ENABLED + READ_WRITE"
+  state: ENABLED
+  permission: READ_WRITE
+  trace {
+    source: "tests/test.aconfig"
+    state: DISABLED
+    permission: READ_WRITE
+  }
+  trace {
+    source: "tests/first.values"
+    state: ENABLED
+    permission: READ_WRITE
+  }
+}
+"#;
+
     pub fn parse_test_flags() -> ProtoParsedFlags {
         let bytes = crate::commands::parse_flags(
             "com.android.aconfig.test",