WORKS
Dependencies: MAX44000 PWM_Tone_Library nexpaq_mdk
Fork of LED_Demo by
main.cpp
00001 00002 /* mbed Microcontroller Library 00003 * Copyright (c) 2013-2015 ARM Limited 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); 00006 * you may not use this file except in compliance with the License. 00007 * You may obtain a copy of the License at 00008 * 00009 * http://www.apache.org/licenses/LICENSE-2.0 00010 * 00011 * Unless required by applicable law or agreed to in writing, software 00012 * distributed under the License is distributed on an "AS IS" BASIS, 00013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00014 * See the License for the specific language governing permissions and 00015 * limitations under the License. 00016 */ 00017 #include "mbed.h" 00018 #include "greentea-client/test_env.h" 00019 #include "utest/utest.h" 00020 #include "unity/unity.h" 00021 00022 #include <stdio.h> 00023 00024 using namespace utest::v1; 00025 00026 static int call_counter(0); 00027 00028 static Timeout utest_to; 00029 00030 // Validate: Simple Validation ---------------------------------------------------------------------------------------- 00031 void simple_validation() 00032 { 00033 TEST_ASSERT_EQUAL(1, call_counter++); 00034 Harness::validate_callback(); 00035 } 00036 00037 control_t simple_validation_case() 00038 { 00039 TEST_ASSERT_EQUAL(0, call_counter++); 00040 utest_to.attach_us(simple_validation, 100); // Fire after 100 us 00041 00042 return CaseAwait; 00043 } 00044 00045 // Validate: Multiple Validation -------------------------------------------------------------------------------------- 00046 void multiple_validation() 00047 { 00048 // make sure validation is side-effect free 00049 TEST_ASSERT_EQUAL(3, call_counter++); 00050 Harness::validate_callback(); 00051 TEST_ASSERT_EQUAL(4, call_counter++); 00052 Harness::validate_callback(); 00053 TEST_ASSERT_EQUAL(5, call_counter++); 00054 Harness::validate_callback(); 00055 TEST_ASSERT_EQUAL(6, call_counter++); 00056 Harness::validate_callback(); 00057 TEST_ASSERT_EQUAL(7, call_counter++); 00058 Harness::validate_callback(); 00059 TEST_ASSERT_EQUAL(8, call_counter++); 00060 00061 } 00062 00063 control_t multiple_validation_case() 00064 { 00065 TEST_ASSERT_EQUAL(2, call_counter++); 00066 utest_to.attach_us(multiple_validation, 100000); // Fire after 100 ms 00067 return CaseAwait; 00068 } 00069 00070 utest::v1::status_t multiple_validation_case_teardown(const Case *const source, const size_t passed, const size_t failed, const failure_t failure) 00071 { 00072 TEST_ASSERT_EQUAL(1, passed); 00073 TEST_ASSERT_EQUAL(0, failed); 00074 TEST_ASSERT_EQUAL(REASON_NONE, failure.reason); 00075 TEST_ASSERT_EQUAL(LOCATION_NONE, failure.location); 00076 TEST_ASSERT_EQUAL(9, call_counter++); 00077 return greentea_case_teardown_handler(source, passed, failed, failure); 00078 } 00079 00080 // Validate: Premature Validation ------------------------------------------------------------------------------------- 00081 control_t premature_validation_case() 00082 { 00083 TEST_ASSERT_EQUAL(10, call_counter++); 00084 /* Prematurely validate the callback. 00085 * This can happen, when you set up a callback that occurs in an interrupt 00086 * and it fires and validates the callback before this function completes. 00087 * The harness only knows whether to expect a callback after the case Handler 00088 * completes (obviously), so the callback validations are logged. 00089 */ 00090 Harness::validate_callback(); 00091 return CaseAwait; 00092 } 00093 00094 utest::v1::status_t premature_validation_case_teardown(const Case *const source, const size_t passed, const size_t failed, const failure_t failure) 00095 { 00096 TEST_ASSERT_EQUAL(1, passed); 00097 TEST_ASSERT_EQUAL(0, failed); 00098 TEST_ASSERT_EQUAL(REASON_NONE, failure.reason); 00099 TEST_ASSERT_EQUAL(LOCATION_NONE, failure.location); 00100 TEST_ASSERT_EQUAL(11, call_counter++); 00101 return greentea_case_teardown_handler(source, passed, failed, failure); 00102 } 00103 00104 // Validate: Multiple Premature Validation ---------------------------------------------------------------------------- 00105 control_t multiple_premature_validation_case() 00106 { 00107 TEST_ASSERT_EQUAL(12, call_counter++); 00108 Harness::validate_callback(); 00109 TEST_ASSERT_EQUAL(13, call_counter++); 00110 Harness::validate_callback(); 00111 TEST_ASSERT_EQUAL(14, call_counter++); 00112 Harness::validate_callback(); 00113 TEST_ASSERT_EQUAL(15, call_counter++); 00114 Harness::validate_callback(); 00115 TEST_ASSERT_EQUAL(16, call_counter++); 00116 return CaseAwait; 00117 } 00118 00119 utest::v1::status_t multiple_premature_validation_case_teardown(const Case *const source, const size_t passed, const size_t failed, const failure_t failure) 00120 { 00121 TEST_ASSERT_EQUAL(1, passed); 00122 TEST_ASSERT_EQUAL(0, failed); 00123 TEST_ASSERT_EQUAL(REASON_NONE, failure.reason); 00124 TEST_ASSERT_EQUAL(LOCATION_NONE, failure.location); 00125 TEST_ASSERT_EQUAL(17, call_counter++); 00126 return greentea_case_teardown_handler(source, passed, failed, failure); 00127 } 00128 00129 // Validate: Attributed Validation: Cancel Repeat --------------------------------------------------------------------- 00130 void attributed_validation_cancel_repeat() 00131 { 00132 TEST_ASSERT_EQUAL(19, call_counter++); 00133 // cancel all repeats 00134 Harness::validate_callback(CaseNoRepeat); 00135 } 00136 00137 control_t attributed_validation_cancel_repeat_case() 00138 { 00139 TEST_ASSERT_EQUAL(18, call_counter++); 00140 00141 utest_to.attach_us(attributed_validation_cancel_repeat, 100000); // Fire after 100 ms 00142 // the RepeatAll will be cancelled during callback validation 00143 return CaseRepeatAll + CaseAwait; 00144 } 00145 00146 utest::v1::status_t attributed_validation_cancel_repeat_case_teardown(const Case *const source, const size_t passed, const size_t failed, const failure_t failure) 00147 { 00148 TEST_ASSERT_EQUAL(1, passed); 00149 TEST_ASSERT_EQUAL(0, failed); 00150 TEST_ASSERT_EQUAL(REASON_NONE, failure.reason); 00151 TEST_ASSERT_EQUAL(LOCATION_NONE, failure.location); 00152 TEST_ASSERT_EQUAL(20, call_counter++); 00153 return greentea_case_teardown_handler(source, passed, failed, failure); 00154 } 00155 00156 // Validate: Attributed Validation: Enable Repeat Handler ------------------------------------------------------------- 00157 void attributed_validation_enable_repeat() 00158 { 00159 TEST_ASSERT_EQUAL(22, call_counter++); 00160 // cancel all repeats 00161 Harness::validate_callback(CaseRepeatHandler); 00162 TEST_ASSERT_EQUAL(23, call_counter++); 00163 // only the first validation counts 00164 Harness::validate_callback(CaseNoRepeat); 00165 TEST_ASSERT_EQUAL(24, call_counter++); 00166 } 00167 00168 control_t attributed_validation_enable_repeat_case(const size_t call_count) 00169 { 00170 if (call_count == 1) { 00171 TEST_ASSERT_EQUAL(21, call_counter++); 00172 utest_to.attach_us(attributed_validation_enable_repeat, 100000); // Fire after 100 ms 00173 // the RepeatAll will be cancelled during callback validation 00174 return CaseAwait; 00175 } 00176 TEST_ASSERT_EQUAL(25, call_counter++); 00177 return CaseNext; 00178 } 00179 00180 utest::v1::status_t attributed_validation_enable_repeat_case_teardown(const Case *const source, const size_t passed, const size_t failed, const failure_t failure) 00181 { 00182 TEST_ASSERT_EQUAL(2, passed); 00183 TEST_ASSERT_EQUAL(0, failed); 00184 TEST_ASSERT_EQUAL(REASON_NONE, failure.reason); 00185 TEST_ASSERT_EQUAL(LOCATION_NONE, failure.location); 00186 TEST_ASSERT_EQUAL(26, call_counter++); 00187 return greentea_case_teardown_handler(source, passed, failed, failure); 00188 } 00189 00190 // Cases -------------------------------------------------------------------------------------------------------------- 00191 Case cases[] = { 00192 Case("Validate: Simple Validation", simple_validation_case), 00193 Case("Validate: Multiple Validation", multiple_validation_case, multiple_validation_case_teardown), 00194 Case("Validate: Premature Validation", premature_validation_case, premature_validation_case_teardown), 00195 Case("Validate: Multiple Premature Validation", multiple_premature_validation_case, multiple_premature_validation_case_teardown), 00196 Case("Validate: Attributed Validation: Cancel Repeat", attributed_validation_cancel_repeat_case, attributed_validation_cancel_repeat_case_teardown), 00197 Case("Validate: Attributed Validation: Enable Repeat Handler", attributed_validation_enable_repeat_case, attributed_validation_enable_repeat_case_teardown) 00198 }; 00199 00200 utest::v1::status_t greentea_setup(const size_t number_of_cases) 00201 { 00202 GREENTEA_SETUP(15, "default_auto"); 00203 00204 return greentea_test_setup_handler(number_of_cases); 00205 } 00206 00207 void greentea_teardown(const size_t passed, const size_t failed, const failure_t failure) 00208 { 00209 TEST_ASSERT_EQUAL(27, call_counter++); 00210 TEST_ASSERT_EQUAL(6, passed); 00211 TEST_ASSERT_EQUAL(0, failed); 00212 TEST_ASSERT_EQUAL(REASON_NONE, failure.reason); 00213 TEST_ASSERT_EQUAL(LOCATION_NONE, failure.location); 00214 greentea_test_teardown_handler(passed, failed, failure); 00215 } 00216 00217 Specification specification(greentea_setup, cases, greentea_teardown, selftest_handlers); 00218 extern void utest_run(const Specification& specification); 00219 00220 int main() 00221 { 00222 // Run the specification only AFTER setting the custom scheduler. 00223 Harness::run(specification); 00224 }
Generated on Tue Jul 12 2022 12:28:40 by
1.7.2
