1 // Copyright 2015-present 650 Industries. All rights reserved.
2 package host.exp.exponent.utils
3 
4 import android.util.Log
5 import org.junit.rules.TestRule
6 import org.junit.runner.Description
7 import org.junit.runners.model.Statement
8 import java.lang.Exception
9 
10 class TestReporterRule : TestRule {
11   private var logs = ""
logTestInfonull12   fun logTestInfo(log: String) {
13     logs += log + "\n"
14   }
15 
reportResultnull16   private fun reportResult(success: Boolean, testName: String) {
17     try {
18       TestServerUtils.reportTestResult(success, testName, logs)
19     } catch (e: Exception) {
20       e.printStackTrace()
21     }
22   }
23 
applynull24   override fun apply(base: Statement, description: Description): Statement {
25     return statement(base, description)
26   }
27 
statementnull28   private fun statement(base: Statement, description: Description): Statement {
29     return object : Statement() {
30       @Throws(Throwable::class)
31       override fun evaluate() {
32         Log.d(TAG, "start_test_" + description.displayName)
33         try {
34           logs = ""
35           base.evaluate()
36           Log.d(TAG, "end_test_" + description.displayName)
37           reportResult(true, description.displayName)
38           return
39         } catch (t: Throwable) {
40           Log.d(TAG, "end_test_" + description.displayName)
41           reportResult(false, description.displayName)
42           throw t
43         }
44       }
45     }
46   }
47 
48   companion object {
49     private const val TAG = "EXPO_TEST_REPORTER"
50   }
51 }
52