From 550af25ccc0fc0537a5039e502952dbf2a73d0a0 Mon Sep 17 00:00:00 2001 From: AYA Date: Fri, 14 Jun 2024 18:44:50 +0200 Subject: [PATCH 1/2] pw_unit_test logs on Android --- examples/android/CHIPTest/BUILD.gn | 1 - .../app/src/main/cpp/CHIPTest-JNI.cpp | 122 ++++++++++++------ 2 files changed, 81 insertions(+), 42 deletions(-) diff --git a/examples/android/CHIPTest/BUILD.gn b/examples/android/CHIPTest/BUILD.gn index 673a8c416f3260..ad6ce1d9820afe 100644 --- a/examples/android/CHIPTest/BUILD.gn +++ b/examples/android/CHIPTest/BUILD.gn @@ -33,7 +33,6 @@ shared_library("jni") { "${chip_root}/src/lib/support", "${chip_root}/src/lib/support:pw_tests_wrapper", "${chip_root}/src/lib/support:test_utils", - "${chip_root}/src/lib/support:testing_nlunit", "${chip_root}/src/lib/support/jsontlv", "${chip_root}/src/platform", "${chip_root}/src/platform/android", diff --git a/examples/android/CHIPTest/app/src/main/cpp/CHIPTest-JNI.cpp b/examples/android/CHIPTest/app/src/main/cpp/CHIPTest-JNI.cpp index 9f663b4afad8d7..e2d52a14096d45 100644 --- a/examples/android/CHIPTest/app/src/main/cpp/CHIPTest-JNI.cpp +++ b/examples/android/CHIPTest/app/src/main/cpp/CHIPTest-JNI.cpp @@ -29,12 +29,12 @@ #include #include #include -#include -#include #include #include -#include +#include "pw_unit_test/framework.h" +#include "pw_unit_test/googletest_style_event_handler.h" +#include "pw_unit_test/logging_event_handler.h" using namespace chip; @@ -146,57 +146,97 @@ static void onLog(const char * fmt, ...) VerifyOrReturn(err != CHIP_NO_ERROR, ReportError(env, err, __FUNCTION__)); } -static void jni_log_name(struct _nlTestSuite * inSuite) -{ - onLog("[ %s ]\n", inSuite->name); -} +namespace pw::unit_test { -static void jni_log_initialize(struct _nlTestSuite * inSuite, int inResult, int inWidth) -{ - onLog("[ %s : %-*s ] : %s\n", inSuite->name, inWidth, "Initialize", inResult == FAILURE ? "FAILED" : "PASSED"); -} -static void jni_log_terminate(struct _nlTestSuite * inSuite, int inResult, int inWidth) +// This Class allows us to redirect +class AndroidLoggingEventHandler : public pw::unit_test::LoggingEventHandler { - onLog("[ %s : %-*s ] : %s\n", inSuite->name, inWidth, "Terminate", inResult == FAILURE ? "FAILED" : "PASSED"); -} +public: + void TestProgramStart(const ProgramSummary & program_summary) override + { + onLog(PW_UNIT_TEST_GOOGLETEST_TEST_PROGRAM_START, program_summary.tests_to_run, program_summary.test_suites, + program_summary.test_suites != 1 ? "s" : ""); + } -static void jni_log_setup(struct _nlTestSuite * inSuite, int inResult, int inWidth) -{ - onLog("[ %s : %-*s ] : %s\n", inSuite->name, inWidth, "Setup", inResult == FAILURE ? "FAILED" : "PASSED"); -} + void TestSuiteStart(const TestSuite & test_suite) override + { + onLog(PW_UNIT_TEST_GOOGLETEST_TEST_SUITE_START, test_suite.test_to_run_count, test_suite.name); + } -static void jni_log_test(struct _nlTestSuite * inSuite, int inWidth, int inIndex) -{ - onLog("[ %s : %-*s ] : %s\n", inSuite->name, inWidth, inSuite->tests[inIndex].name, inSuite->flagError ? "FAILED" : "PASSED"); -} + void TestSuiteEnd(const TestSuite & test_suite) override + { + onLog(PW_UNIT_TEST_GOOGLETEST_TEST_SUITE_END, test_suite.test_to_run_count, test_suite.name); + } -static void jni_log_teardown(struct _nlTestSuite * inSuite, int inResult, int inWidth) -{ - onLog("[ %s : %-*s ] : %s\n", inSuite->name, inWidth, "TearDown", inResult == FAILURE ? "FAILED" : "PASSED"); -} + void EnvironmentsTearDownEnd() override { onLog(PW_UNIT_TEST_GOOGLETEST_ENVIRONMENTS_TEAR_DOWN_END); } -static void jni_log_statTest(struct _nlTestSuite * inSuite) -{ - onLog("Failed Tests: %d / %d\n", inSuite->failedTests, inSuite->runTests); -} + void TestProgramEnd(const ProgramSummary & program_summary) override + { + onLog(PW_UNIT_TEST_GOOGLETEST_TEST_PROGRAM_END, + program_summary.tests_to_run - program_summary.tests_summary.skipped_tests - + program_summary.tests_summary.disabled_tests, + program_summary.tests_to_run, program_summary.test_suites, program_summary.test_suites != 1 ? "s" : ""); + onLog(PW_UNIT_TEST_GOOGLETEST_PASSED_SUMMARY, program_summary.tests_summary.passed_tests); + if (program_summary.tests_summary.skipped_tests || program_summary.tests_summary.disabled_tests) + { + onLog(PW_UNIT_TEST_GOOGLETEST_DISABLED_SUMMARY, + program_summary.tests_summary.skipped_tests + program_summary.tests_summary.disabled_tests); + } + if (program_summary.tests_summary.failed_tests) + { + onLog(PW_UNIT_TEST_GOOGLETEST_FAILED_SUMMARY, program_summary.tests_summary.failed_tests); + } + } -static void jni_log_statAssert(struct _nlTestSuite * inSuite) -{ - onLog("Failed Asserts: %d / %d\n", inSuite->failedAssertions, inSuite->performedAssertions); -} + void RunAllTestsStart() override { onLog(PW_UNIT_TEST_GOOGLETEST_RUN_ALL_TESTS_START); } + + void RunAllTestsEnd(const RunTestsSummary & run_tests_summary) override + { + onLog(PW_UNIT_TEST_GOOGLETEST_RUN_ALL_TESTS_END); + onLog(PW_UNIT_TEST_GOOGLETEST_PASSED_SUMMARY, run_tests_summary.passed_tests); + if (run_tests_summary.skipped_tests) + { + onLog(PW_UNIT_TEST_GOOGLETEST_DISABLED_SUMMARY, run_tests_summary.skipped_tests); + } + if (run_tests_summary.failed_tests) + { + onLog(PW_UNIT_TEST_GOOGLETEST_FAILED_SUMMARY, run_tests_summary.failed_tests); + } + } -static nl_test_output_logger_t jni_test_logger = { - jni_log_name, jni_log_initialize, jni_log_terminate, jni_log_setup, - jni_log_test, jni_log_teardown, jni_log_statTest, jni_log_statAssert, + void TestCaseStart(const TestCase & test_case) override + { + onLog(PW_UNIT_TEST_GOOGLETEST_CASE_START, test_case.suite_name, test_case.test_name); + } + + void TestCaseEnd(const TestCase & test_case, TestResult result) override + { + // Use a switch with no default to detect changes in the test result enum. + switch (result) + { + case TestResult::kSuccess: + onLog(PW_UNIT_TEST_GOOGLETEST_CASE_OK, test_case.suite_name, test_case.test_name); + break; + case TestResult::kFailure: + onLog(PW_UNIT_TEST_GOOGLETEST_CASE_FAILED, test_case.suite_name, test_case.test_name); + break; + case TestResult::kSkipped: + onLog(PW_UNIT_TEST_GOOGLETEST_CASE_DISABLED, test_case.suite_name, test_case.test_name); + break; + } + } }; +}; // namespace pw::unit_test extern "C" JNIEXPORT jint Java_com_tcl_chip_chiptest_TestEngine_runTest(JNIEnv * env, jclass clazz) { - nlTestSetLogger(&jni_test_logger); chip::DeviceLayer::StackLock lock; - // TODO [PW_MIGRATION] Remove NLUnit tests call after migration - jint ret = RunRegisteredUnitTests(); - ret += chip::test::RunAllTests(); + + // Running Pigweed Tests + testing::InitGoogleTest(nullptr, static_cast(nullptr)); + pw::unit_test::AndroidLoggingEventHandler handler; + pw::unit_test::RegisterEventHandler(&handler); + jint ret = RUN_ALL_TESTS(); return ret; } From 6437c93658fb21adf5bbe4090b8010d51f36a1be Mon Sep 17 00:00:00 2001 From: AYA Date: Mon, 17 Jun 2024 11:49:30 +0200 Subject: [PATCH 2/2] putting less logs --- .../app/src/main/cpp/CHIPTest-JNI.cpp | 37 ------------------- 1 file changed, 37 deletions(-) diff --git a/examples/android/CHIPTest/app/src/main/cpp/CHIPTest-JNI.cpp b/examples/android/CHIPTest/app/src/main/cpp/CHIPTest-JNI.cpp index e2d52a14096d45..e24e6098cdd17a 100644 --- a/examples/android/CHIPTest/app/src/main/cpp/CHIPTest-JNI.cpp +++ b/examples/android/CHIPTest/app/src/main/cpp/CHIPTest-JNI.cpp @@ -148,46 +148,9 @@ static void onLog(const char * fmt, ...) namespace pw::unit_test { -// This Class allows us to redirect class AndroidLoggingEventHandler : public pw::unit_test::LoggingEventHandler { public: - void TestProgramStart(const ProgramSummary & program_summary) override - { - onLog(PW_UNIT_TEST_GOOGLETEST_TEST_PROGRAM_START, program_summary.tests_to_run, program_summary.test_suites, - program_summary.test_suites != 1 ? "s" : ""); - } - - void TestSuiteStart(const TestSuite & test_suite) override - { - onLog(PW_UNIT_TEST_GOOGLETEST_TEST_SUITE_START, test_suite.test_to_run_count, test_suite.name); - } - - void TestSuiteEnd(const TestSuite & test_suite) override - { - onLog(PW_UNIT_TEST_GOOGLETEST_TEST_SUITE_END, test_suite.test_to_run_count, test_suite.name); - } - - void EnvironmentsTearDownEnd() override { onLog(PW_UNIT_TEST_GOOGLETEST_ENVIRONMENTS_TEAR_DOWN_END); } - - void TestProgramEnd(const ProgramSummary & program_summary) override - { - onLog(PW_UNIT_TEST_GOOGLETEST_TEST_PROGRAM_END, - program_summary.tests_to_run - program_summary.tests_summary.skipped_tests - - program_summary.tests_summary.disabled_tests, - program_summary.tests_to_run, program_summary.test_suites, program_summary.test_suites != 1 ? "s" : ""); - onLog(PW_UNIT_TEST_GOOGLETEST_PASSED_SUMMARY, program_summary.tests_summary.passed_tests); - if (program_summary.tests_summary.skipped_tests || program_summary.tests_summary.disabled_tests) - { - onLog(PW_UNIT_TEST_GOOGLETEST_DISABLED_SUMMARY, - program_summary.tests_summary.skipped_tests + program_summary.tests_summary.disabled_tests); - } - if (program_summary.tests_summary.failed_tests) - { - onLog(PW_UNIT_TEST_GOOGLETEST_FAILED_SUMMARY, program_summary.tests_summary.failed_tests); - } - } - void RunAllTestsStart() override { onLog(PW_UNIT_TEST_GOOGLETEST_RUN_ALL_TESTS_START); } void RunAllTestsEnd(const RunTestsSummary & run_tests_summary) override