Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5815ece2 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Make aconfig c++ generate only one header and only one .cc file" into...

Merge "Make aconfig c++ generate only one header and only one .cc file" into main am: 289fdf21 am: c943f4c1

Original change: https://android-review.googlesource.com/c/platform/build/+/2662943



Change-Id: I36b282a8ad6a22c265fa061d914cf6b3601d0a87
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 0bb97847 c943f4c1
Loading
Loading
Loading
Loading
+150 −220
Original line number Diff line number Diff line
@@ -57,26 +57,6 @@ where
            template: include_str!("../templates/cpp_source_file.template"),
            dir: "",
        },
        FileSpec {
            name: &format!("{}_flag_provider.h", header),
            template: match codegen_mode {
                CodegenMode::Production => {
                    include_str!("../templates/cpp_prod_flag_provider.template")
                }
                CodegenMode::Test => include_str!("../templates/cpp_test_flag_provider.template"),
            },
            dir: "",
        },
        FileSpec {
            name: &format!("{}_c.h", header),
            template: include_str!("../templates/c_exported_header.template"),
            dir: "include",
        },
        FileSpec {
            name: &format!("{}_c.cc", header),
            template: include_str!("../templates/c_source_file.template"),
            dir: "",
        },
    ];
    files.iter().map(|file| generate_file(file, &context)).collect()
}
@@ -138,12 +118,13 @@ mod tests {
    const EXPORTED_PROD_HEADER_EXPECTED: &str = r#"
#pragma once

#ifdef __cplusplus

#include <memory>

namespace com::android::aconfig::test {
class flag_provider_interface {
public:

    virtual ~flag_provider_interface() = default;

    virtual bool disabled_ro() = 0;
@@ -174,14 +155,32 @@ inline bool enabled_rw() {
}

}

extern "C" {
#endif // __cplusplus

bool com_android_aconfig_test_disabled_ro();

bool com_android_aconfig_test_disabled_rw();

bool com_android_aconfig_test_enabled_ro();

bool com_android_aconfig_test_enabled_rw();

#ifdef __cplusplus
} // extern "C"
#endif
"#;

    const EXPORTED_TEST_HEADER_EXPECTED: &str = r#"
#pragma once

#ifdef __cplusplus

#include <memory>

namespace com::android::aconfig::test {

class flag_provider_interface {
public:

@@ -245,15 +244,42 @@ inline void reset_flags() {
}

}
"#;

    const PROD_FLAG_PROVIDER_HEADER_EXPECTED: &str = r#"
#pragma once
extern "C" {
#endif // __cplusplus

bool com_android_aconfig_test_disabled_ro();

void set_com_android_aconfig_test_disabled_ro(bool val);

bool com_android_aconfig_test_disabled_rw();

void set_com_android_aconfig_test_disabled_rw(bool val);

bool com_android_aconfig_test_enabled_ro();

void set_com_android_aconfig_test_enabled_ro(bool val);

bool com_android_aconfig_test_enabled_rw();

void set_com_android_aconfig_test_enabled_rw(bool val);

void com_android_aconfig_test_reset_flags();


#ifdef __cplusplus
} // extern "C"
#endif


"#;

    const PROD_SOURCE_FILE_EXPECTED: &str = r#"
#include "com_android_aconfig_test.h"
#include <server_configurable_flags/get_flags.h>

namespace com::android::aconfig::test {

    class flag_provider : public flag_provider_interface {
        public:

@@ -278,26 +304,42 @@ public:
                    "com.android.aconfig.test.enabled_rw",
                    "true") == "true";
            }

    };

    std::unique_ptr<flag_provider_interface> provider_ =
        std::make_unique<flag_provider>();
}
"#;

    const TEST_FLAG_PROVIDER_HEADER_EXPECTED: &str = r#"
#pragma once
bool com_android_aconfig_test_disabled_ro() {
    return false;
}

bool com_android_aconfig_test_disabled_rw() {
    return com::android::aconfig::test::disabled_rw();
}

bool com_android_aconfig_test_enabled_ro() {
    return true;
}

bool com_android_aconfig_test_enabled_rw() {
    return com::android::aconfig::test::enabled_rw();
}

"#;

    const TEST_SOURCE_FILE_EXPECTED: &str = r#"
#include "com_android_aconfig_test.h"
#include <server_configurable_flags/get_flags.h>

#include <unordered_map>
#include <string>

namespace com::android::aconfig::test {

    class flag_provider : public flag_provider_interface {
        private:
            std::unordered_map<std::string, bool> overrides_;

        public:

            flag_provider()
                : overrides_()
            {}
@@ -360,102 +402,21 @@ public:
                overrides_["enabled_rw"] = val;
            }


            virtual void reset_flags() override {
                overrides_.clear();
            }
    };
}
"#;

    const SOURCE_FILE_EXPECTED: &str = r#"
#include "com_android_aconfig_test.h"
#include "com_android_aconfig_test_flag_provider.h"

namespace com::android::aconfig::test {
    std::unique_ptr<flag_provider_interface> provider_ =
        std::make_unique<flag_provider>();
}
"#;

    const C_EXPORTED_PROD_HEADER_EXPECTED: &str = r#"
#pragma once

#ifdef __cplusplus
extern "C" {
#endif

bool com_android_aconfig_test_disabled_ro();

bool com_android_aconfig_test_disabled_rw();

bool com_android_aconfig_test_enabled_ro();

bool com_android_aconfig_test_enabled_rw();

#ifdef __cplusplus
}
#endif
"#;

    const C_EXPORTED_TEST_HEADER_EXPECTED: &str = r#"
#pragma once

#ifdef __cplusplus
extern "C" {
#endif

bool com_android_aconfig_test_disabled_ro();

void set_com_android_aconfig_test_disabled_ro(bool val);

bool com_android_aconfig_test_disabled_rw();

void set_com_android_aconfig_test_disabled_rw(bool val);

bool com_android_aconfig_test_enabled_ro();

void set_com_android_aconfig_test_enabled_ro(bool val);

bool com_android_aconfig_test_enabled_rw();

void set_com_android_aconfig_test_enabled_rw(bool val);

void com_android_aconfig_test_reset_flags();

#ifdef __cplusplus
}
#endif
"#;

    const C_PROD_SOURCE_FILE_EXPECTED: &str = r#"
#include "com_android_aconfig_test_c.h"
#include "com_android_aconfig_test.h"

bool com_android_aconfig_test_disabled_ro() {
    return false;
}

bool com_android_aconfig_test_disabled_rw() {
    return com::android::aconfig::test::disabled_rw();
}

bool com_android_aconfig_test_enabled_ro() {
    return true;
}

bool com_android_aconfig_test_enabled_rw() {
    return com::android::aconfig::test::enabled_rw();
}
"#;

    const C_TEST_SOURCE_FILE_EXPECTED: &str = r#"
#include "com_android_aconfig_test_c.h"
#include "com_android_aconfig_test.h"

bool com_android_aconfig_test_disabled_ro() {
    return com::android::aconfig::test::disabled_ro();
}


void set_com_android_aconfig_test_disabled_ro(bool val) {
    com::android::aconfig::test::disabled_ro(val);
}
@@ -464,6 +425,7 @@ bool com_android_aconfig_test_disabled_rw() {
    return com::android::aconfig::test::disabled_rw();
}


void set_com_android_aconfig_test_disabled_rw(bool val) {
    com::android::aconfig::test::disabled_rw(val);
}
@@ -472,6 +434,7 @@ bool com_android_aconfig_test_enabled_ro() {
    return com::android::aconfig::test::enabled_ro();
}


void set_com_android_aconfig_test_enabled_ro(bool val) {
    com::android::aconfig::test::enabled_ro(val);
}
@@ -480,6 +443,7 @@ bool com_android_aconfig_test_enabled_rw() {
    return com::android::aconfig::test::enabled_rw();
}


void set_com_android_aconfig_test_enabled_rw(bool val) {
    com::android::aconfig::test::enabled_rw(val);
}
@@ -487,7 +451,9 @@ void set_com_android_aconfig_test_enabled_rw(bool val) {
void com_android_aconfig_test_reset_flags() {
     com::android::aconfig::test::reset_flags();
}

"#;

    fn test_generate_cpp_code(mode: CodegenMode) {
        let parsed_flags = crate::test::parse_test_flags();
        let generated =
@@ -514,50 +480,14 @@ void com_android_aconfig_test_reset_flags() {
            )
        );

        target_file_path = String::from("com_android_aconfig_test_flag_provider.h");
        assert!(generated_files_map.contains_key(&target_file_path));
        assert_eq!(
            None,
            crate::test::first_significant_code_diff(
                match mode {
                    CodegenMode::Production => PROD_FLAG_PROVIDER_HEADER_EXPECTED,
                    CodegenMode::Test => TEST_FLAG_PROVIDER_HEADER_EXPECTED,
                },
                generated_files_map.get(&target_file_path).unwrap()
            )
        );

        target_file_path = String::from("com_android_aconfig_test.cc");
        assert!(generated_files_map.contains_key(&target_file_path));
        assert_eq!(
            None,
            crate::test::first_significant_code_diff(
                SOURCE_FILE_EXPECTED,
                generated_files_map.get(&target_file_path).unwrap()
            )
        );

        target_file_path = String::from("include/com_android_aconfig_test_c.h");
        assert!(generated_files_map.contains_key(&target_file_path));
        assert_eq!(
            None,
            crate::test::first_significant_code_diff(
                match mode {
                    CodegenMode::Production => C_EXPORTED_PROD_HEADER_EXPECTED,
                    CodegenMode::Test => C_EXPORTED_TEST_HEADER_EXPECTED,
                },
                generated_files_map.get(&target_file_path).unwrap()
            )
        );

        target_file_path = String::from("com_android_aconfig_test_c.cc");
        assert!(generated_files_map.contains_key(&target_file_path));
        assert_eq!(
            None,
            crate::test::first_significant_code_diff(
                match mode {
                    CodegenMode::Production => C_PROD_SOURCE_FILE_EXPECTED,
                    CodegenMode::Test => C_TEST_SOURCE_FILE_EXPECTED,
                    CodegenMode::Production => PROD_SOURCE_FILE_EXPECTED,
                    CodegenMode::Test => TEST_SOURCE_FILE_EXPECTED,
                },
                generated_files_map.get(&target_file_path).unwrap()
            )
+0 −21
Original line number Diff line number Diff line
#pragma once

#ifdef __cplusplus
extern "C" \{
#endif

{{ for item in class_elements }}
bool {header}_{item.flag_name}();

{{ if for_test }}
void set_{header}_{item.flag_name}(bool val);
{{ -endif }}
{{ endfor - }}

{{ if for_test }}
void {header}_reset_flags();
{{ -endif }}

#ifdef __cplusplus
}
#endif
+0 −28
Original line number Diff line number Diff line
#include "{header}_c.h"
#include "{header}.h"

{{ for item in class_elements}}
bool {header}_{item.flag_name}() \{
    {{ if for_test }}
    return {cpp_namespace}::{item.flag_name}();
    {{ -else- }}
    {{ if not item.readwrite- }}
    return {item.default_value};
    {{ -else- }}
    return {cpp_namespace}::{item.flag_name}();
    {{ -endif }}
    {{ -endif }}
}

{{ if for_test }}
void set_{header}_{item.flag_name}(bool val) \{
    {cpp_namespace}::{item.flag_name}(val);
}
{{ -endif }}
{{ endfor -}}

{{ if for_test }}
void {header}_reset_flags() \{
     {cpp_namespace}::reset_flags();
}
{{ -endif }}
+23 −0
Original line number Diff line number Diff line
#pragma once

#ifdef __cplusplus

#include <memory>

namespace {cpp_namespace} \{
@@ -47,4 +49,25 @@ inline void reset_flags() \{
    return provider_->reset_flags();
}
{{ -endif }}

}

extern "C" \{
#endif // __cplusplus

{{ for item in class_elements }}
bool {header}_{item.flag_name}();

{{ if for_test }}
void set_{header}_{item.flag_name}(bool val);
{{ -endif }}
{{ endfor - }}

{{ if for_test }}
void {header}_reset_flags();
{{ -endif }}

#ifdef __cplusplus
} // extern "C"
#endif
+0 −24
Original line number Diff line number Diff line
#pragma once

#include "{header}.h"
{{ if readwrite }}
#include <server_configurable_flags/get_flags.h>
{{ endif }}

namespace {cpp_namespace} \{
class flag_provider : public flag_provider_interface \{
public:
    {{ for item in class_elements}}
    virtual bool {item.flag_name}() override \{
        {{ if item.readwrite- }}
        return server_configurable_flags::GetServerConfigurableFlag(
            "{item.device_config_namespace}",
            "{item.device_config_flag}",
            "{item.default_value}") == "true";
        {{ -else- }}
            return {item.default_value};
        {{ -endif }}
    }
    {{ endfor }}
};
}
Loading