From 24ec8ae3978d4c47b5b76eda58b9378e682a1622 Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Fri, 20 Jan 2023 17:22:16 +0100 Subject: [PATCH 01/21] implementation of checkLogin() --- src/LoginCustomer.c | 5 +++++ src/LoginCustomer.h | 3 +++ 2 files changed, 8 insertions(+) create mode 100644 src/LoginCustomer.c create mode 100644 src/LoginCustomer.h diff --git a/src/LoginCustomer.c b/src/LoginCustomer.c new file mode 100644 index 0000000..c9b956e --- /dev/null +++ b/src/LoginCustomer.c @@ -0,0 +1,5 @@ +#include "LoginCustomer.h" +bool checkLogin(bool loginSuccessful) +{ + return (loginSuccessful) ? true : false; +} diff --git a/src/LoginCustomer.h b/src/LoginCustomer.h new file mode 100644 index 0000000..7f0f8f9 --- /dev/null +++ b/src/LoginCustomer.h @@ -0,0 +1,3 @@ +#include +#include +bool checkLogin(bool); From 0155f61c652177b4aa808f297d5d4f32d67b23e6 Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Fri, 20 Jan 2023 17:41:54 +0100 Subject: [PATCH 02/21] implementation of unit tests for checkLogin() --- build-project.sh | 5 - src/main.c | 7 - team.md | 9 - tests/build/test/cache/defines_dependency.yml | 3 + tests/build/test/cache/input.yml | 242 ++++++++++++++ tests/build/test/cache/test_LoginCustomer.c | 297 ++++++++++++++++++ tests/build/test/dependencies/LoginCustomer.d | 3 + tests/build/test/dependencies/cmock.d | 6 + .../test/dependencies/test_LoginCustomer.d | 4 + .../dependencies/test_LoginCustomer_runner.d | 4 + tests/build/test/dependencies/unity.d | 4 + tests/build/test/out/c/LoginCustomer.o | Bin 0 -> 2804 bytes tests/build/test/out/c/cmock.o | Bin 0 -> 8152 bytes tests/build/test/out/c/test_LoginCustomer.o | Bin 0 -> 5684 bytes .../test/out/c/test_LoginCustomer_runner.o | Bin 0 -> 6640 bytes tests/build/test/out/c/unity.o | Bin 0 -> 39856 bytes tests/build/test/out/test_LoginCustomer.out | Bin 0 -> 57036 bytes .../preprocess/files/test_LoginCustomer.c | 297 ++++++++++++++++++ .../preprocess/includes/test_LoginCustomer.c | 3 + .../test/results/test_LoginCustomer.pass | 18 ++ .../test/runners/test_LoginCustomer_runner.c | 81 +++++ tests/project.yml | 101 ++++++ tests/test/support/.gitkeep | 0 tests/test/test_LoginCustomer.c | 63 ++++ 24 files changed, 1126 insertions(+), 21 deletions(-) delete mode 100755 build-project.sh delete mode 100644 src/main.c delete mode 100644 team.md create mode 100644 tests/build/test/cache/defines_dependency.yml create mode 100644 tests/build/test/cache/input.yml create mode 100644 tests/build/test/cache/test_LoginCustomer.c create mode 100644 tests/build/test/dependencies/LoginCustomer.d create mode 100644 tests/build/test/dependencies/cmock.d create mode 100644 tests/build/test/dependencies/test_LoginCustomer.d create mode 100644 tests/build/test/dependencies/test_LoginCustomer_runner.d create mode 100644 tests/build/test/dependencies/unity.d create mode 100644 tests/build/test/out/c/LoginCustomer.o create mode 100644 tests/build/test/out/c/cmock.o create mode 100644 tests/build/test/out/c/test_LoginCustomer.o create mode 100644 tests/build/test/out/c/test_LoginCustomer_runner.o create mode 100644 tests/build/test/out/c/unity.o create mode 100755 tests/build/test/out/test_LoginCustomer.out create mode 100644 tests/build/test/preprocess/files/test_LoginCustomer.c create mode 100644 tests/build/test/preprocess/includes/test_LoginCustomer.c create mode 100644 tests/build/test/results/test_LoginCustomer.pass create mode 100644 tests/build/test/runners/test_LoginCustomer_runner.c create mode 100644 tests/project.yml create mode 100644 tests/test/support/.gitkeep create mode 100644 tests/test/test_LoginCustomer.c diff --git a/build-project.sh b/build-project.sh deleted file mode 100755 index fbd6ce9..0000000 --- a/build-project.sh +++ /dev/null @@ -1,5 +0,0 @@ -clear -cd src/ -gcc main.c -./a.out -rm a.out diff --git a/src/main.c b/src/main.c deleted file mode 100644 index 2e0147f..0000000 --- a/src/main.c +++ /dev/null @@ -1,7 +0,0 @@ -#include - -int main() -{ - - return 0; -} diff --git a/team.md b/team.md deleted file mode 100644 index 02580e9..0000000 --- a/team.md +++ /dev/null @@ -1,9 +0,0 @@ -# Bankmanagement-System - -- Can Hacioglu, Fdlt3817 -- Atharva Kishor Naik, fdai7514 -- Julius Philipp Engel, fdai7057 -- Shivam Chaudhary, fdlt3781 -- Mohamed Yahya Dahi, fdai6618 -- Haytham Daoula, fdai7207 - diff --git a/tests/build/test/cache/defines_dependency.yml b/tests/build/test/cache/defines_dependency.yml new file mode 100644 index 0000000..9f4fffc --- /dev/null +++ b/tests/build/test/cache/defines_dependency.yml @@ -0,0 +1,3 @@ +--- +"/home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.c": +- TEST diff --git a/tests/build/test/cache/input.yml b/tests/build/test/cache/input.yml new file mode 100644 index 0000000..fb9e794 --- /dev/null +++ b/tests/build/test/cache/input.yml @@ -0,0 +1,242 @@ +--- +:project: + :use_exceptions: false + :use_mocks: true + :compile_threads: 1 + :test_threads: 1 + :use_test_preprocessor: true + :use_preprocessor_directives: false + :use_deep_dependencies: false + :generate_deep_dependencies: true + :auto_link_deep_dependencies: false + :test_file_prefix: test_ + :options_paths: [] + :release_build: false + :use_auxiliary_dependencies: true + :build_root: build + :which_ceedling: gem + :ceedling_version: 0.31.1 + :default_tasks: + - test:all +:release_build: + :use_assembly: false + :artifacts: [] +:paths: + :test: + - "+:test/**" + - "-:test/support" + :source: + - "/home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/**" + :support: + - test/support + :include: [] + :libraries: [] + :test_toolchain_include: [] + :release_toolchain_include: [] +:files: + :test: [] + :source: [] + :assembly: [] + :support: [] + :include: [] +:environment: +- :rake_columns: '120' +:defines: + :test: + - &1 [] + - TEST + :test_preprocess: + - *1 + - TEST + :release: [] + :release_preprocess: [] + :use_test_definition: false + :common: [] +:libraries: + :flag: "-l${1}" + :path_flag: "-L ${1}" + :test: [] + :test_preprocess: [] + :release: [] + :release_preprocess: [] + :placement: :end + :system: [] +:flags: {} +:extension: + :header: ".h" + :source: ".c" + :assembly: ".s" + :object: ".o" + :libraries: + - ".a" + - ".so" + :executable: ".out" + :map: ".map" + :list: ".lst" + :testpass: ".pass" + :testfail: ".fail" + :dependencies: ".d" +:unity: + :vendor_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor" + :defines: [] +:cmock: + :vendor_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor" + :defines: [] + :includes: [] + :mock_prefix: mock_ + :when_no_prototypes: :warn + :enforce_strict_ordering: true + :plugins: + - :ignore + - :callback + :treat_as: + uint8: HEX8 + uint16: HEX16 + uint32: UINT32 + int8: INT8 + bool: UINT8 + :mock_path: build/test/mocks + :verbosity: 3 + :unity_helper: false +:cexception: + :vendor_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor" + :defines: [] +:test_runner: + :includes: [] + :file_suffix: _runner +:tools: + :test_compiler: + :executable: gcc + :name: default_test_compiler + :stderr_redirect: :none + :background_exec: :none + :optional: false + :arguments: + - '' + - '' + - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR + - -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE + - "-D$": COLLECTION_DEFINES_TEST_AND_VENDOR + - "-DGNU_COMPILER" + - "-g" + - '' + - -c "${1}" + - -o "${2}" + - "-MMD" + - -MF "${4}" + :test_fixture: + :executable: "${1}" + :name: default_test_fixture + :stderr_redirect: :auto + :background_exec: :none + :optional: false + :arguments: [] + :test_linker: + :executable: gcc + :name: default_test_linker + :stderr_redirect: :none + :background_exec: :none + :optional: false + :arguments: + - '' + - '' + - '' + - '"${1}"' + - "${5}" + - -o "${2}" + - '' + - "${4}" + - '' + :test_file_preprocessor: + :executable: gcc + :name: default_test_file_preprocessor + :stderr_redirect: :none + :background_exec: :none + :optional: false + :arguments: + - '' + - '' + - "-E" + - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR + - -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE + - "-D$": COLLECTION_DEFINES_TEST_AND_VENDOR + - "-D$": DEFINES_TEST_PREPROCESS + - "-DGNU_COMPILER" + - '"${1}"' + - -o "${2}" + :test_file_preprocessor_directives: + :executable: gcc + :name: default_test_file_preprocessor_directives + :stderr_redirect: :none + :background_exec: :none + :optional: false + :arguments: + - "-E" + - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR + - -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE + - "-D$": COLLECTION_DEFINES_TEST_AND_VENDOR + - "-D$": DEFINES_TEST_PREPROCESS + - "-DGNU_COMPILER" + - "-fdirectives-only" + - '"${1}"' + - -o "${2}" + :test_includes_preprocessor: + :executable: gcc + :name: default_test_includes_preprocessor + :stderr_redirect: :none + :background_exec: :none + :optional: false + :arguments: + - '' + - '' + - "-E" + - "-MM" + - "-MG" + - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR + - -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE + - "-D$": COLLECTION_DEFINES_TEST_AND_VENDOR + - "-D$": DEFINES_TEST_PREPROCESS + - "-DGNU_COMPILER" + - '"${1}"' +:test_compiler: + :arguments: [] +:test_linker: + :arguments: [] +:test_fixture: + :arguments: [] + :link_objects: [] +:test_includes_preprocessor: + :arguments: [] +:test_file_preprocessor: + :arguments: [] +:test_file_preprocessor_directives: + :arguments: [] +:test_dependencies_generator: + :arguments: [] +:release_compiler: + :arguments: [] +:release_linker: + :arguments: [] +:release_assembler: + :arguments: [] +:release_dependencies_generator: + :arguments: [] +:plugins: + :load_paths: + - "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/lib/../plugins" + :enabled: + - stdout_pretty_tests_report + - module_generator + :display_raw_test_results: false + :stdout_pretty_tests_report_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/lib/../plugins/stdout_pretty_tests_report" + :module_generator_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/lib/../plugins/module_generator" +:gcov: + :reports: + - HtmlDetailed + :gcovr: + :html_medium_threshold: 75 + :html_high_threshold: 90 +:module_generator: + :project_root: "./" + :source_root: src/ + :test_root: test/ diff --git a/tests/build/test/cache/test_LoginCustomer.c b/tests/build/test/cache/test_LoginCustomer.c new file mode 100644 index 0000000..5149d92 --- /dev/null +++ b/tests/build/test/cache/test_LoginCustomer.c @@ -0,0 +1,297 @@ +#include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h" +#include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" + + +void setUp(){}; + +void tearDown(){}; + + + +void test_checkLogin() + +{ + + + + + + + +_Bool + + test_1_to_true = (4==4); + + + +_Bool + + test_2_to_true = ( + + 1 + + == + + 1 + + ); + + + +_Bool + + test_3_to_true = (1==1); + + + +_Bool + + test_4_to_true = ( + + 0 + + == + + 0 + + ); + + + +_Bool + + test_5_to_true = ('z'=='z'); + + + +_Bool + + test_6_to_true = ('='=='='); + + + +_Bool + + test_7_to_true = (0x1A==0x1A); + + + + + +_Bool + + test_1_to_false = (4!=4); + + + +_Bool + + test_2_to_false = ( + + 1 + + == + + 0 + + ); + + + +_Bool + + test_3_to_false = (1==0); + + + +_Bool + + test_4_to_false = ( + + 0 + + == + + 1 + + ); + + + +_Bool + + test_5_to_false = ('z'=='x'); + + + +_Bool + + test_6_to_false = ('!'==')'); + + + +_Bool + + test_7_to_false = (0x1A==0x2B); + + + + + + + + + +_Bool + + result_1 = checkLogin(test_1_to_true); + + + +_Bool + + result_2 = checkLogin(test_2_to_true); + + + +_Bool + + result_3 = checkLogin(test_3_to_true); + + + +_Bool + + result_4 = checkLogin(test_4_to_true); + + + +_Bool + + result_5 = checkLogin(test_5_to_true); + + + +_Bool + + result_6 = checkLogin(test_6_to_true); + + + +_Bool + + result_7 = checkLogin(test_7_to_true); + + + + + +_Bool + + result_8 = checkLogin(test_1_to_false); + + + +_Bool + + result_9 = checkLogin(test_2_to_false); + + + +_Bool + + result_10 = checkLogin(test_3_to_false); + + + +_Bool + + result_11 = checkLogin(test_4_to_false); + + + +_Bool + + result_12 = checkLogin(test_5_to_false); + + + +_Bool + + result_13 = checkLogin(test_6_to_false); + + + +_Bool + + result_14 = checkLogin(test_7_to_false); + + + + + + + + do {if ((result_1== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(47)));}} while(0); + + do {if ((result_2== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(48)));}} while(0); + + do {if ((result_3== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(49)));}} while(0); + + do {if ((result_4== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(50)));}} while(0); + + do {if ((result_5== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(51)));}} while(0); + + do {if ((result_6== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(52)));}} while(0); + + do {if ((result_7== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(53)));}} while(0); + + + + do {if (!(result_8)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(55)));}} while(0); + + do {if (!(result_9)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(56)));}} while(0); + + do {if (!(result_10)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(57)));}} while(0); + + do {if (!(result_11)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(58)));}} while(0); + + do {if (!(result_12)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(59)));}} while(0); + + do {if (!(result_13)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(60)));}} while(0); + + do {if (!(result_14)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(61)));}} while(0); + + + + + +} diff --git a/tests/build/test/dependencies/LoginCustomer.d b/tests/build/test/dependencies/LoginCustomer.d new file mode 100644 index 0000000..45e2415 --- /dev/null +++ b/tests/build/test/dependencies/LoginCustomer.d @@ -0,0 +1,3 @@ +build/test/out/c/LoginCustomer.o: \ + /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.c \ + /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h diff --git a/tests/build/test/dependencies/cmock.d b/tests/build/test/dependencies/cmock.d new file mode 100644 index 0000000..82b64c9 --- /dev/null +++ b/tests/build/test/dependencies/cmock.d @@ -0,0 +1,6 @@ +build/test/out/c/cmock.o: \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/src/cmock.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/src/cmock.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/src/cmock_internals.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h diff --git a/tests/build/test/dependencies/test_LoginCustomer.d b/tests/build/test/dependencies/test_LoginCustomer.d new file mode 100644 index 0000000..1a634fe --- /dev/null +++ b/tests/build/test/dependencies/test_LoginCustomer.d @@ -0,0 +1,4 @@ +build/test/out/c/test_LoginCustomer.o: test/test_LoginCustomer.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h \ + /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h diff --git a/tests/build/test/dependencies/test_LoginCustomer_runner.d b/tests/build/test/dependencies/test_LoginCustomer_runner.d new file mode 100644 index 0000000..1649170 --- /dev/null +++ b/tests/build/test/dependencies/test_LoginCustomer_runner.d @@ -0,0 +1,4 @@ +build/test/out/c/test_LoginCustomer_runner.o: \ + build/test/runners/test_LoginCustomer_runner.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h diff --git a/tests/build/test/dependencies/unity.d b/tests/build/test/dependencies/unity.d new file mode 100644 index 0000000..02f2997 --- /dev/null +++ b/tests/build/test/dependencies/unity.d @@ -0,0 +1,4 @@ +build/test/out/c/unity.o: \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h diff --git a/tests/build/test/out/c/LoginCustomer.o b/tests/build/test/out/c/LoginCustomer.o new file mode 100644 index 0000000000000000000000000000000000000000..8cb00aec5296a1fa79d354c6f99e9afe806a462d GIT binary patch literal 2804 zcmcgt+iM(E7(Zubce8fWZ7ywXjNm9OjmXaK28p#AO*Tnm=xR!nLIcV=JDJQ*vpZAf zQWL3)mqMi|2!cLDTA@!Of)Dy6_)rx51AO*H!3SRi-;BiHclMm_WEJ$OADsDp_wStV zT;`31`WenSQ^c9hdJ<#r40J7z3z%R>*%4vSLB8r`E_@1Z!b$RHx}~O7j_SQ zy|DYkog10scWyzK!N8Zl1&6_FV8?}mu?Hn;nSml$jpvr(qVfDJfi_?hWCrp=nY$vC z*&hLVChPez)ACu$pydZ15T4mpK;|!~xR%=?6NrlN9g?zDn7MY8c* zilYU+I9?p)Be|jbVLr|Zg=e5bEy?DQ+T_oU>BZB9rwUINPL3^&lKafDk7{Fl6zQ`} z*_KANV@OP;H4N1P;z+0HGcY=PA79S@EFQ#H>;lcQ+zL8Q`BKvMlBhf%*h$CnYFYKCu*S!@E||EV`*8M={92Zu)ilhl9r&&xKGgffk383R)(sNw#cX3N zF}f#}(3f(5TkMu&Zwe(7E!emGUT6B$Xzfa3+fEd1B<)_y?3NWW@wwa1MlA^1ENTT| zZ0t)SyDYpHU$|h*Ri7}b6?4+88k3dDYNcAO7^O~}_|CNJ_)h5A5UtQ|O?y+Pri_wn zls2qr+qYX`;0H-mO8i$mf4vl2&9)QCinNDpac=IkF){BnJh*a7sFvaEYB~0 z^*rNO^L%_TlevyVOGjHBZ-KML{57q1FnjSkcrZ2u`_nSE`zA;s1#}-3W!Ud~iYL_N zWl}m_zAQaiJO@gIKfO>r(wTh7q)KP^^^D+jcA!rl?33x0>X9y1l$M8k0yv!=>XSKB z9@L)^tVi{W97nVqn@mMezy5JQQwOop*g7?3x=!4sD+rvl&H9D9nHFoJj%ePBU>E9^O}k3EpZpL+1)hS*_6WU0j}&s_prX3P62k z+Chh&US|41?3lQ@r6{)S&2Eg-YHWm72N7-L1#dHg1Fo=FePpRjW4{a8?DE|oziqSEME_UJWSLJ&Q8uI@y zzY2WB{HO?s@}=JdmG2z%iYLDpF>VthN!jX<)9d&H>$n9St%Gho<)(R2yov!Ugf+o* zKguS~X-dBagOQSz-zDhMbw8A6mg>@LqUyd0Ud4cA+Yr7WMv}6<205MYHu9Ar< literal 0 HcmV?d00001 diff --git a/tests/build/test/out/c/cmock.o b/tests/build/test/out/c/cmock.o new file mode 100644 index 0000000000000000000000000000000000000000..162be594be8e993b0d9cd86d186661c8be1c8c4d GIT binary patch literal 8152 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 Cqqzpi9`7#Rokg>= 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 IKW^NA0Cv(lyZ`_I literal 0 HcmV?d00001 diff --git a/tests/build/test/out/c/test_LoginCustomer_runner.o b/tests/build/test/out/c/test_LoginCustomer_runner.o new file mode 100644 index 0000000000000000000000000000000000000000..1efa0098329f45793f30fa73f4997cbedd2b4014 GIT binary patch literal 6640 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 QoqTBr45LUBLDSLy1th;Nf&c&j literal 0 HcmV?d00001 diff --git a/tests/build/test/preprocess/files/test_LoginCustomer.c b/tests/build/test/preprocess/files/test_LoginCustomer.c new file mode 100644 index 0000000..5149d92 --- /dev/null +++ b/tests/build/test/preprocess/files/test_LoginCustomer.c @@ -0,0 +1,297 @@ +#include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h" +#include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" + + +void setUp(){}; + +void tearDown(){}; + + + +void test_checkLogin() + +{ + + + + + + + +_Bool + + test_1_to_true = (4==4); + + + +_Bool + + test_2_to_true = ( + + 1 + + == + + 1 + + ); + + + +_Bool + + test_3_to_true = (1==1); + + + +_Bool + + test_4_to_true = ( + + 0 + + == + + 0 + + ); + + + +_Bool + + test_5_to_true = ('z'=='z'); + + + +_Bool + + test_6_to_true = ('='=='='); + + + +_Bool + + test_7_to_true = (0x1A==0x1A); + + + + + +_Bool + + test_1_to_false = (4!=4); + + + +_Bool + + test_2_to_false = ( + + 1 + + == + + 0 + + ); + + + +_Bool + + test_3_to_false = (1==0); + + + +_Bool + + test_4_to_false = ( + + 0 + + == + + 1 + + ); + + + +_Bool + + test_5_to_false = ('z'=='x'); + + + +_Bool + + test_6_to_false = ('!'==')'); + + + +_Bool + + test_7_to_false = (0x1A==0x2B); + + + + + + + + + +_Bool + + result_1 = checkLogin(test_1_to_true); + + + +_Bool + + result_2 = checkLogin(test_2_to_true); + + + +_Bool + + result_3 = checkLogin(test_3_to_true); + + + +_Bool + + result_4 = checkLogin(test_4_to_true); + + + +_Bool + + result_5 = checkLogin(test_5_to_true); + + + +_Bool + + result_6 = checkLogin(test_6_to_true); + + + +_Bool + + result_7 = checkLogin(test_7_to_true); + + + + + +_Bool + + result_8 = checkLogin(test_1_to_false); + + + +_Bool + + result_9 = checkLogin(test_2_to_false); + + + +_Bool + + result_10 = checkLogin(test_3_to_false); + + + +_Bool + + result_11 = checkLogin(test_4_to_false); + + + +_Bool + + result_12 = checkLogin(test_5_to_false); + + + +_Bool + + result_13 = checkLogin(test_6_to_false); + + + +_Bool + + result_14 = checkLogin(test_7_to_false); + + + + + + + + do {if ((result_1== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(47)));}} while(0); + + do {if ((result_2== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(48)));}} while(0); + + do {if ((result_3== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(49)));}} while(0); + + do {if ((result_4== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(50)));}} while(0); + + do {if ((result_5== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(51)));}} while(0); + + do {if ((result_6== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(52)));}} while(0); + + do {if ((result_7== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(53)));}} while(0); + + + + do {if (!(result_8)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(55)));}} while(0); + + do {if (!(result_9)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(56)));}} while(0); + + do {if (!(result_10)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(57)));}} while(0); + + do {if (!(result_11)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(58)));}} while(0); + + do {if (!(result_12)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(59)));}} while(0); + + do {if (!(result_13)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(60)));}} while(0); + + do {if (!(result_14)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(61)));}} while(0); + + + + + +} diff --git a/tests/build/test/preprocess/includes/test_LoginCustomer.c b/tests/build/test/preprocess/includes/test_LoginCustomer.c new file mode 100644 index 0000000..8d24aa9 --- /dev/null +++ b/tests/build/test/preprocess/includes/test_LoginCustomer.c @@ -0,0 +1,3 @@ +--- +- "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" +- Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h diff --git a/tests/build/test/results/test_LoginCustomer.pass b/tests/build/test/results/test_LoginCustomer.pass new file mode 100644 index 0000000..bd31688 --- /dev/null +++ b/tests/build/test/results/test_LoginCustomer.pass @@ -0,0 +1,18 @@ +--- +:source: + :path: test + :file: test_LoginCustomer.c +:successes: +- :test: test_checkLogin + :line: 7 + :message: '' + :unity_test_time: 0 +:failures: [] +:ignores: [] +:counts: + :total: 1 + :passed: 1 + :failed: 0 + :ignored: 0 +:stdout: [] +:time: 0.0017807170006562956 diff --git a/tests/build/test/runners/test_LoginCustomer_runner.c b/tests/build/test/runners/test_LoginCustomer_runner.c new file mode 100644 index 0000000..f847d37 --- /dev/null +++ b/tests/build/test/runners/test_LoginCustomer_runner.c @@ -0,0 +1,81 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" + +int GlobalExpectCount; +int GlobalVerifyOrder; +char* GlobalOrderError; + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_checkLogin(); + + +/*=======Mock Management=====*/ +static void CMock_Init(void) +{ + GlobalExpectCount = 0; + GlobalVerifyOrder = 0; + GlobalOrderError = NULL; +} +static void CMock_Verify(void) +{ +} +static void CMock_Destroy(void) +{ +} + +/*=======Test Reset Options=====*/ +void resetTest(void); +void resetTest(void) +{ + tearDown(); + CMock_Verify(); + CMock_Destroy(); + CMock_Init(); + setUp(); +} +void verifyTest(void); +void verifyTest(void) +{ + CMock_Verify(); +} + +/*=======Test Runner Used To Run Each Test=====*/ +static void run_test(UnityTestFunction func, const char* name, UNITY_LINE_TYPE line_num) +{ + Unity.CurrentTestName = name; + Unity.CurrentTestLineNumber = line_num; +#ifdef UNITY_USE_COMMAND_LINE_ARGS + if (!UnityTestMatches()) + return; +#endif + Unity.NumberOfTests++; + UNITY_CLR_DETAILS(); + UNITY_EXEC_TIME_START(); + CMock_Init(); + if (TEST_PROTECT()) + { + setUp(); + func(); + } + if (TEST_PROTECT()) + { + tearDown(); + CMock_Verify(); + } + CMock_Destroy(); + UNITY_EXEC_TIME_STOP(); + UnityConcludeTest(); +} + +/*=======MAIN=====*/ +int main(void) +{ + UnityBegin("test_LoginCustomer.c"); + run_test(test_checkLogin, "test_checkLogin", 7); + + return UnityEnd(); +} diff --git a/tests/project.yml b/tests/project.yml new file mode 100644 index 0000000..7245e5e --- /dev/null +++ b/tests/project.yml @@ -0,0 +1,101 @@ +--- + +# Notes: +# Sample project C code is not presently written to produce a release artifact. +# As such, release build options are disabled. +# This sample, therefore, only demonstrates running a collection of unit tests. + +:project: + :use_exceptions: FALSE + :use_test_preprocessor: TRUE + :use_auxiliary_dependencies: TRUE + :build_root: build +# :release_build: TRUE + :test_file_prefix: test_ + :which_ceedling: gem + :ceedling_version: 0.31.1 + :default_tasks: + - test:all + +#:test_build: +# :use_assembly: TRUE + +#:release_build: +# :output: MyApp.out +# :use_assembly: FALSE + +:environment: + +:extension: + :executable: .out + +:paths: + :test: + - +:test/** + - -:test/support + :source: + - /home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/** + :support: + - test/support + :libraries: [] + +:defines: + # in order to add common defines: + # 1) remove the trailing [] from the :common: section + # 2) add entries to the :common: section (e.g. :test: has TEST defined) + :common: &common_defines [] + :test: + - *common_defines + - TEST + :test_preprocess: + - *common_defines + - TEST + +:cmock: + :mock_prefix: mock_ + :when_no_prototypes: :warn + :enforce_strict_ordering: TRUE + :plugins: + - :ignore + - :callback + :treat_as: + uint8: HEX8 + uint16: HEX16 + uint32: UINT32 + int8: INT8 + bool: UINT8 + +# Add -gcov to the plugins list to make sure of the gcov plugin +# You will need to have gcov and gcovr both installed to make it work. +# For more information on these options, see docs in plugins/gcov +:gcov: + :reports: + - HtmlDetailed + :gcovr: + :html_medium_threshold: 75 + :html_high_threshold: 90 + +#:tools: +# Ceedling defaults to using gcc for compiling, linking, etc. +# As [:tools] is blank, gcc will be used (so long as it's in your system path) +# See documentation to configure a given toolchain for use + +# LIBRARIES +# These libraries are automatically injected into the build process. Those specified as +# common will be used in all types of builds. Otherwise, libraries can be injected in just +# tests or releases. These options are MERGED with the options in supplemental yaml files. +:libraries: + :placement: :end + :flag: "-l${1}" + :path_flag: "-L ${1}" + :system: [] # for example, you might list 'm' to grab the math library + :test: [] + :release: [] + +:plugins: + :load_paths: + - "#{Ceedling.load_path}" + :enabled: + - stdout_pretty_tests_report + - module_generator +... diff --git a/tests/test/support/.gitkeep b/tests/test/support/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/tests/test/test_LoginCustomer.c b/tests/test/test_LoginCustomer.c new file mode 100644 index 0000000..fc23e10 --- /dev/null +++ b/tests/test/test_LoginCustomer.c @@ -0,0 +1,63 @@ +#include +#include "LoginCustomer.h" + +void setUp(){}; +void tearDown(){}; + +void test_checkLogin() +{ + /*arrange*/ + + bool test_1_to_true = (4==4); + bool test_2_to_true = (true==true); + bool test_3_to_true = (1==1); + bool test_4_to_true = (false==false); + bool test_5_to_true = ('z'=='z'); + bool test_6_to_true = ('='=='='); + bool test_7_to_true = (0x1A==0x1A); + + bool test_1_to_false = (4!=4); + bool test_2_to_false = (true==false); + bool test_3_to_false = (1==0); + bool test_4_to_false = (false==true); + bool test_5_to_false = ('z'=='x'); + bool test_6_to_false = ('!'==')'); + bool test_7_to_false = (0x1A==0x2B); + + /*act*/ + + bool result_1 = checkLogin(test_1_to_true); + bool result_2 = checkLogin(test_2_to_true); + bool result_3 = checkLogin(test_3_to_true); + bool result_4 = checkLogin(test_4_to_true); + bool result_5 = checkLogin(test_5_to_true); + bool result_6 = checkLogin(test_6_to_true); + bool result_7 = checkLogin(test_7_to_true); + + bool result_8 = checkLogin(test_1_to_false); + bool result_9 = checkLogin(test_2_to_false); + bool result_10 = checkLogin(test_3_to_false); + bool result_11 = checkLogin(test_4_to_false); + bool result_12 = checkLogin(test_5_to_false); + bool result_13 = checkLogin(test_6_to_false); + bool result_14 = checkLogin(test_7_to_false); + + /*assertions*/ + + TEST_ASSERT_TRUE(result_1); + TEST_ASSERT_TRUE(result_2); + TEST_ASSERT_TRUE(result_3); + TEST_ASSERT_TRUE(result_4); + TEST_ASSERT_TRUE(result_5); + TEST_ASSERT_TRUE(result_6); + TEST_ASSERT_TRUE(result_7); + + TEST_ASSERT_FALSE(result_8); + TEST_ASSERT_FALSE(result_9); + TEST_ASSERT_FALSE(result_10); + TEST_ASSERT_FALSE(result_11); + TEST_ASSERT_FALSE(result_12); + TEST_ASSERT_FALSE(result_13); + TEST_ASSERT_FALSE(result_14); + +} From d13b024635dbef37e247251cfec3121c08976352 Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Fri, 20 Jan 2023 19:08:26 +0100 Subject: [PATCH 03/21] refactoring: replaced variables with arrays and the consecutive use of assertions with for-loops --- tests/build/test/cache/test_LoginCustomer.c | 270 ++---------------- tests/build/test/out/c/LoginCustomer.o | Bin 2804 -> 3008 bytes tests/build/test/out/c/test_LoginCustomer.o | Bin 5684 -> 4140 bytes .../test/out/c/test_LoginCustomer_runner.o | Bin 6640 -> 6640 bytes tests/build/test/out/test_LoginCustomer.out | Bin 57036 -> 56560 bytes .../preprocess/files/test_LoginCustomer.c | 270 ++---------------- .../test/results/test_LoginCustomer.pass | 4 +- .../test/runners/test_LoginCustomer_runner.c | 2 +- tests/test/test_LoginCustomer.c | 64 +---- 9 files changed, 74 insertions(+), 536 deletions(-) diff --git a/tests/build/test/cache/test_LoginCustomer.c b/tests/build/test/cache/test_LoginCustomer.c index 5149d92..28f8ec8 100644 --- a/tests/build/test/cache/test_LoginCustomer.c +++ b/tests/build/test/cache/test_LoginCustomer.c @@ -1,297 +1,87 @@ #include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h" #include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" - - void setUp(){}; void tearDown(){}; - - void test_checkLogin() { - - - - -_Bool - - test_1_to_true = (4==4); - - - -_Bool - - test_2_to_true = ( - - 1 - - == - - 1 - - ); - - - -_Bool - - test_3_to_true = (1==1); - - - -_Bool - - test_4_to_true = ( - - 0 - - == - - 0 - - ); - - - -_Bool - - test_5_to_true = ('z'=='z'); - - - -_Bool - - test_6_to_true = ('='=='='); - - - -_Bool - - test_7_to_true = (0x1A==0x1A); - - - - - -_Bool - - test_1_to_false = (4!=4); - - - -_Bool - - test_2_to_false = ( - - 1 - - == - - 0 - - ); - - - -_Bool - - test_3_to_false = (1==0); - - - -_Bool - - test_4_to_false = ( - - 0 - - == - - 1 - - ); - - - -_Bool - - test_5_to_false = ('z'=='x'); - - - -_Bool - - test_6_to_false = ('!'==')'); - - - -_Bool - - test_7_to_false = (0x1A==0x2B); - - - - - - - - - -_Bool - - result_1 = checkLogin(test_1_to_true); - - - -_Bool - - result_2 = checkLogin(test_2_to_true); - - - -_Bool - - result_3 = checkLogin(test_3_to_true); - - - -_Bool - - result_4 = checkLogin(test_4_to_true); - - - -_Bool - - result_5 = checkLogin(test_5_to_true); - - - -_Bool - - result_6 = checkLogin(test_6_to_true); - _Bool - result_7 = checkLogin(test_7_to_true); + expected_test_values_compute_to_true[] = {4==4, + 1 + == - + 1 -_Bool + , 1==1, - result_8 = checkLogin(test_1_to_false); + 0 - + == -_Bool + 0 - result_9 = checkLogin(test_2_to_false); + , 'z'=='z', '='=='=',0x1A==0x1A}; - - -_Bool - - result_10 = checkLogin(test_3_to_false); - - - -_Bool - - result_11 = checkLogin(test_4_to_false); - - - -_Bool + int length_1 = sizeof(expected_test_values_compute_to_true)/sizeof( - result_12 = checkLogin(test_5_to_false); + _Bool - + ); -_Bool - result_13 = checkLogin(test_6_to_false); _Bool - result_14 = checkLogin(test_7_to_false); - - - - - - - - do {if ((result_1== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(47)));}} while(0); - - do {if ((result_2== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(48)));}} while(0); - - do {if ((result_3== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(49)));}} while(0); - - do {if ((result_4== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(50)));}} while(0); - - do {if ((result_5== + expected_test_values_compute_to_false[] = {4!=4, -1 + 1 -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(51)));}} while(0); + == - do {if ((result_6== + 0 -1 + ,1==0, -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(52)));}} while(0); + 0 - do {if ((result_7== + == -1 + 1 -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(53)));}} while(0); + ,'z'=='x','!'==')',0x1A==0x2B}; + int length_2 = sizeof(expected_test_values_compute_to_false)/sizeof( + _Bool - do {if (!(result_8)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(55)));}} while(0); + ); - do {if (!(result_9)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(56)));}} while(0); - do {if (!(result_10)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(57)));}} while(0); - do {if (!(result_11)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(58)));}} while(0); - do {if (!(result_12)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(59)));}} while(0); - do {if (!(result_13)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(60)));}} while(0); + for(int i=0;i<7;++i) { - do {if (!(result_14)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(61)));}} while(0); + do {if ((checkLogin(expected_test_values_compute_to_true[i]))) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(16)));}} while(0); + } + for(int i=0;i<7;++i){ + do {if (!(checkLogin(expected_test_values_compute_to_false[i]))) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(19)));}} while(0); + } } diff --git a/tests/build/test/out/c/LoginCustomer.o b/tests/build/test/out/c/LoginCustomer.o index 8cb00aec5296a1fa79d354c6f99e9afe806a462d..82cb77b53f1898426f37bd91e324cb4ef976af5c 100644 GIT binary patch delta 593 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 IKW^NA0Cv(lyZ`_I diff --git a/tests/build/test/out/c/test_LoginCustomer_runner.o b/tests/build/test/out/c/test_LoginCustomer_runner.o index 1efa0098329f45793f30fa73f4997cbedd2b4014..f839ac15db6dc490a724e363b3356e2a82b4c553 100644 GIT binary patch delta 14 Vcmexh{K0s`OGZZ4&94~QBmgtQ1)~4} delta 14 Vcmexh{K0s`OGZZa&94~QBmgtc1*HH0 diff --git a/tests/build/test/out/test_LoginCustomer.out b/tests/build/test/out/test_LoginCustomer.out index 8a1d6b840aca594c50b2cb8af06caf8d3c8f2c6a..3c7dca5801f8cdc804c4dffb9f5d46be60fb1cc1 100755 GIT binary patch delta 10958 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 G@qYlX7%#g3 diff --git a/tests/build/test/preprocess/files/test_LoginCustomer.c b/tests/build/test/preprocess/files/test_LoginCustomer.c index 5149d92..28f8ec8 100644 --- a/tests/build/test/preprocess/files/test_LoginCustomer.c +++ b/tests/build/test/preprocess/files/test_LoginCustomer.c @@ -1,297 +1,87 @@ #include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h" #include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" - - void setUp(){}; void tearDown(){}; - - void test_checkLogin() { - - - - -_Bool - - test_1_to_true = (4==4); - - - -_Bool - - test_2_to_true = ( - - 1 - - == - - 1 - - ); - - - -_Bool - - test_3_to_true = (1==1); - - - -_Bool - - test_4_to_true = ( - - 0 - - == - - 0 - - ); - - - -_Bool - - test_5_to_true = ('z'=='z'); - - - -_Bool - - test_6_to_true = ('='=='='); - - - -_Bool - - test_7_to_true = (0x1A==0x1A); - - - - - -_Bool - - test_1_to_false = (4!=4); - - - -_Bool - - test_2_to_false = ( - - 1 - - == - - 0 - - ); - - - -_Bool - - test_3_to_false = (1==0); - - - -_Bool - - test_4_to_false = ( - - 0 - - == - - 1 - - ); - - - -_Bool - - test_5_to_false = ('z'=='x'); - - - -_Bool - - test_6_to_false = ('!'==')'); - - - -_Bool - - test_7_to_false = (0x1A==0x2B); - - - - - - - - - -_Bool - - result_1 = checkLogin(test_1_to_true); - - - -_Bool - - result_2 = checkLogin(test_2_to_true); - - - -_Bool - - result_3 = checkLogin(test_3_to_true); - - - -_Bool - - result_4 = checkLogin(test_4_to_true); - - - -_Bool - - result_5 = checkLogin(test_5_to_true); - - - -_Bool - - result_6 = checkLogin(test_6_to_true); - _Bool - result_7 = checkLogin(test_7_to_true); + expected_test_values_compute_to_true[] = {4==4, + 1 + == - + 1 -_Bool + , 1==1, - result_8 = checkLogin(test_1_to_false); + 0 - + == -_Bool + 0 - result_9 = checkLogin(test_2_to_false); + , 'z'=='z', '='=='=',0x1A==0x1A}; - - -_Bool - - result_10 = checkLogin(test_3_to_false); - - - -_Bool - - result_11 = checkLogin(test_4_to_false); - - - -_Bool + int length_1 = sizeof(expected_test_values_compute_to_true)/sizeof( - result_12 = checkLogin(test_5_to_false); + _Bool - + ); -_Bool - result_13 = checkLogin(test_6_to_false); _Bool - result_14 = checkLogin(test_7_to_false); - - - - - - - - do {if ((result_1== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(47)));}} while(0); - - do {if ((result_2== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(48)));}} while(0); - - do {if ((result_3== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(49)));}} while(0); - - do {if ((result_4== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(50)));}} while(0); - - do {if ((result_5== + expected_test_values_compute_to_false[] = {4!=4, -1 + 1 -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(51)));}} while(0); + == - do {if ((result_6== + 0 -1 + ,1==0, -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(52)));}} while(0); + 0 - do {if ((result_7== + == -1 + 1 -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(53)));}} while(0); + ,'z'=='x','!'==')',0x1A==0x2B}; + int length_2 = sizeof(expected_test_values_compute_to_false)/sizeof( + _Bool - do {if (!(result_8)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(55)));}} while(0); + ); - do {if (!(result_9)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(56)));}} while(0); - do {if (!(result_10)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(57)));}} while(0); - do {if (!(result_11)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(58)));}} while(0); - do {if (!(result_12)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(59)));}} while(0); - do {if (!(result_13)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(60)));}} while(0); + for(int i=0;i<7;++i) { - do {if (!(result_14)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(61)));}} while(0); + do {if ((checkLogin(expected_test_values_compute_to_true[i]))) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(16)));}} while(0); + } + for(int i=0;i<7;++i){ + do {if (!(checkLogin(expected_test_values_compute_to_false[i]))) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(19)));}} while(0); + } } diff --git a/tests/build/test/results/test_LoginCustomer.pass b/tests/build/test/results/test_LoginCustomer.pass index bd31688..730ed0b 100644 --- a/tests/build/test/results/test_LoginCustomer.pass +++ b/tests/build/test/results/test_LoginCustomer.pass @@ -4,7 +4,7 @@ :file: test_LoginCustomer.c :successes: - :test: test_checkLogin - :line: 7 + :line: 5 :message: '' :unity_test_time: 0 :failures: [] @@ -15,4 +15,4 @@ :failed: 0 :ignored: 0 :stdout: [] -:time: 0.0017807170006562956 +:time: 0.001912861000164412 diff --git a/tests/build/test/runners/test_LoginCustomer_runner.c b/tests/build/test/runners/test_LoginCustomer_runner.c index f847d37..f061ca9 100644 --- a/tests/build/test/runners/test_LoginCustomer_runner.c +++ b/tests/build/test/runners/test_LoginCustomer_runner.c @@ -75,7 +75,7 @@ static void run_test(UnityTestFunction func, const char* name, UNITY_LINE_TYPE l int main(void) { UnityBegin("test_LoginCustomer.c"); - run_test(test_checkLogin, "test_checkLogin", 7); + run_test(test_checkLogin, "test_checkLogin", 5); return UnityEnd(); } diff --git a/tests/test/test_LoginCustomer.c b/tests/test/test_LoginCustomer.c index fc23e10..610a847 100644 --- a/tests/test/test_LoginCustomer.c +++ b/tests/test/test_LoginCustomer.c @@ -1,63 +1,21 @@ #include #include "LoginCustomer.h" - void setUp(){}; void tearDown(){}; - void test_checkLogin() { /*arrange*/ - - bool test_1_to_true = (4==4); - bool test_2_to_true = (true==true); - bool test_3_to_true = (1==1); - bool test_4_to_true = (false==false); - bool test_5_to_true = ('z'=='z'); - bool test_6_to_true = ('='=='='); - bool test_7_to_true = (0x1A==0x1A); - - bool test_1_to_false = (4!=4); - bool test_2_to_false = (true==false); - bool test_3_to_false = (1==0); - bool test_4_to_false = (false==true); - bool test_5_to_false = ('z'=='x'); - bool test_6_to_false = ('!'==')'); - bool test_7_to_false = (0x1A==0x2B); + bool expected_test_values_compute_to_true[] = {4==4,true==true, 1==1, false==false, 'z'=='z', '='=='=',0x1A==0x1A}; + int length_1 = sizeof(expected_test_values_compute_to_true)/sizeof(bool); - /*act*/ - - bool result_1 = checkLogin(test_1_to_true); - bool result_2 = checkLogin(test_2_to_true); - bool result_3 = checkLogin(test_3_to_true); - bool result_4 = checkLogin(test_4_to_true); - bool result_5 = checkLogin(test_5_to_true); - bool result_6 = checkLogin(test_6_to_true); - bool result_7 = checkLogin(test_7_to_true); - - bool result_8 = checkLogin(test_1_to_false); - bool result_9 = checkLogin(test_2_to_false); - bool result_10 = checkLogin(test_3_to_false); - bool result_11 = checkLogin(test_4_to_false); - bool result_12 = checkLogin(test_5_to_false); - bool result_13 = checkLogin(test_6_to_false); - bool result_14 = checkLogin(test_7_to_false); - - /*assertions*/ - - TEST_ASSERT_TRUE(result_1); - TEST_ASSERT_TRUE(result_2); - TEST_ASSERT_TRUE(result_3); - TEST_ASSERT_TRUE(result_4); - TEST_ASSERT_TRUE(result_5); - TEST_ASSERT_TRUE(result_6); - TEST_ASSERT_TRUE(result_7); - - TEST_ASSERT_FALSE(result_8); - TEST_ASSERT_FALSE(result_9); - TEST_ASSERT_FALSE(result_10); - TEST_ASSERT_FALSE(result_11); - TEST_ASSERT_FALSE(result_12); - TEST_ASSERT_FALSE(result_13); - TEST_ASSERT_FALSE(result_14); + bool expected_test_values_compute_to_false[] = {4!=4,true==false,1==0,false==true,'z'=='x','!'==')',0x1A==0x2B}; + int length_2 = sizeof(expected_test_values_compute_to_false)/sizeof(bool); + /*act and assertions*/ + for(int i=0;i<7;++i) { + TEST_ASSERT_TRUE(checkLogin(expected_test_values_compute_to_true[i])); + } + for(int i=0;i<7;++i){ + TEST_ASSERT_FALSE(checkLogin(expected_test_values_compute_to_false[i])); + } } From 3e7a7d3c89873307b7cf5bc02f28bae148a24956 Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Sat, 21 Jan 2023 15:02:45 +0100 Subject: [PATCH 04/21] Implementation of functions LoginAsCustomer() and Login() --- src/CustomerData.txt | 6 +++ src/CustomerProperties.h | 4 ++ src/LoginCustomer.c | 92 ++++++++++++++++++++++++++++++++++++++++ src/LoginCustomer.h | 7 +++ 4 files changed, 109 insertions(+) create mode 100644 src/CustomerData.txt create mode 100644 src/CustomerProperties.h diff --git a/src/CustomerData.txt b/src/CustomerData.txt new file mode 100644 index 0000000..3ac070f --- /dev/null +++ b/src/CustomerData.txt @@ -0,0 +1,6 @@ +1234=example +ID=1234 +forename=Max +Surname=Mustermann +password=example +balance=0 diff --git a/src/CustomerProperties.h b/src/CustomerProperties.h new file mode 100644 index 0000000..2bbab62 --- /dev/null +++ b/src/CustomerProperties.h @@ -0,0 +1,4 @@ +typedef struct Customer{ + char *ID, *forename, *surname, *password; + float balance; +}customer_t; diff --git a/src/LoginCustomer.c b/src/LoginCustomer.c index c9b956e..5c2a7a4 100644 --- a/src/LoginCustomer.c +++ b/src/LoginCustomer.c @@ -1,5 +1,97 @@ #include "LoginCustomer.h" + bool checkLogin(bool loginSuccessful) { return (loginSuccessful) ? true : false; } + +void collectCustomerDataForLogin(int attempts) +{ + customer_t c; + c.ID = calloc(15+1,sizeof(char)); + c.password = calloc(15+1, sizeof(char)); + char digitCharacterFromUser, passwordCharacterFromUser; + int IDLengthCounter = 0, passwordLengthCounter = 0; + const int IDMaxLength = 16, passwordMaxLength = 16; + + printf("Enter ID:\n"); + while(((digitCharacterFromUser=getchar()) != '\n')&&IDLengthCounter='0'&&digitCharacterFromUser<='9'){ + *(c.ID+IDLengthCounter) = digitCharacterFromUser; + } + else{ + printf("Character entered is not a digit. Aborting.\n"); + exit(-1); + } + ++IDLengthCounter; + } + *(c.ID+IDLengthCounter) = '\0'; + + if(IDLengthCounter>=IDMaxLength){ + printf("ID entered is too long. Aborting.\n"); + exit(-1); + } + + printf("Enter password:\n"); + while((passwordCharacterFromUser=getchar())!='\n'&&passwordLengthCounter=passwordMaxLength){ + printf("Password entered is too long. Aborting.\n"); + exit(-1); + } + customer_t *ptr = &c; + bool loginSuccessful = loginCustomer(ptr); + if(loginSuccessful ) { + printf("Welcome to the menu!\n"); + //call menu() + }else if(!loginSuccessful && attempts < MAX_LOGIN_ATTEMPTS){ + printf("You have %d attempts left.\n", MAX_LOGIN_ATTEMPTS - attempts); + collectCustomerDataForLogin(++attempts); + }else{ + printf("Maximum number of attempts reached. Program terminates.\n"); + exit(-1); + //call error() + } + +} + +bool loginCustomer(customer_t *c) +{ + bool foundCustomerEntryInFile = false; + char *searchForThisString = generateCheckString(c->ID,c->password); + char *lineFromCustomerFile = calloc(40,sizeof(char)); + FILE *readCustomerFile = fopen("CustomerData.txt", "r"); + if(readCustomerFile==NULL){ + printf("Could not find file. Aborting.\n"); + exit(-1); + //call error() + } + while((fscanf(readCustomerFile,"%s",lineFromCustomerFile)!=EOF)){ + if(strcmp(searchForThisString,lineFromCustomerFile)==0){ + foundCustomerEntryInFile = true; + break; + } + } + + if(checkLogin(foundCustomerEntryInFile)){ + printf("Login successful.\n"); + return foundCustomerEntryInFile; + }else{ + printf("Login not successful.\n"); + } + fclose(readCustomerFile); + return foundCustomerEntryInFile; +} + +char *generateCheckString(char *ID, char *password){ + int checkStringLength = strlen(ID) + 1 + strlen(password) + 1; + char *checkString = calloc(checkStringLength, sizeof(char)); + checkString = strcat(ID,"="); + checkString = strcat(checkString,password); + *(checkString+checkStringLength) = '\0'; + return checkString; +} diff --git a/src/LoginCustomer.h b/src/LoginCustomer.h index 7f0f8f9..809765b 100644 --- a/src/LoginCustomer.h +++ b/src/LoginCustomer.h @@ -1,3 +1,10 @@ #include +#include #include +#include +#include "CustomerProperties.h" +#define MAX_LOGIN_ATTEMPTS 3 +char *generateCheckString(char *, char*); bool checkLogin(bool); +void collectCustomerDataForLogin(int); +bool loginCustomer(customer_t *); From 4375112d6cdfb25f577586081f0ca82606bbf35b Mon Sep 17 00:00:00 2001 From: Shivam Chaudhary Date: Fri, 27 Jan 2023 11:13:51 +0100 Subject: [PATCH 05/21] Remove unnecessary and duplicate files/folders --- tests/build/test/cache/defines_dependency.yml | 3 - tests/build/test/cache/input.yml | 242 ------------------ tests/build/test/cache/test_LoginCustomer.c | 87 ------- tests/build/test/dependencies/LoginCustomer.d | 3 - tests/build/test/dependencies/cmock.d | 6 - .../test/dependencies/test_LoginCustomer.d | 4 - .../dependencies/test_LoginCustomer_runner.d | 4 - tests/build/test/dependencies/unity.d | 4 - tests/build/test/out/c/LoginCustomer.o | Bin 3008 -> 0 bytes tests/build/test/out/c/cmock.o | Bin 8152 -> 0 bytes tests/build/test/out/c/test_LoginCustomer.o | Bin 4140 -> 0 bytes .../test/out/c/test_LoginCustomer_runner.o | Bin 6640 -> 0 bytes tests/build/test/out/c/unity.o | Bin 39856 -> 0 bytes tests/build/test/out/test_LoginCustomer.out | Bin 56560 -> 0 bytes .../preprocess/files/test_LoginCustomer.c | 87 ------- .../preprocess/includes/test_LoginCustomer.c | 3 - .../test/results/test_LoginCustomer.pass | 18 -- .../test/runners/test_LoginCustomer_runner.c | 81 ------ tests/project.yml | 101 -------- tests/test/support/.gitkeep | 0 tests/{test => }/test_LoginCustomer.c | 0 21 files changed, 643 deletions(-) delete mode 100644 tests/build/test/cache/defines_dependency.yml delete mode 100644 tests/build/test/cache/input.yml delete mode 100644 tests/build/test/cache/test_LoginCustomer.c delete mode 100644 tests/build/test/dependencies/LoginCustomer.d delete mode 100644 tests/build/test/dependencies/cmock.d delete mode 100644 tests/build/test/dependencies/test_LoginCustomer.d delete mode 100644 tests/build/test/dependencies/test_LoginCustomer_runner.d delete mode 100644 tests/build/test/dependencies/unity.d delete mode 100644 tests/build/test/out/c/LoginCustomer.o delete mode 100644 tests/build/test/out/c/cmock.o delete mode 100644 tests/build/test/out/c/test_LoginCustomer.o delete mode 100644 tests/build/test/out/c/test_LoginCustomer_runner.o delete mode 100644 tests/build/test/out/c/unity.o delete mode 100755 tests/build/test/out/test_LoginCustomer.out delete mode 100644 tests/build/test/preprocess/files/test_LoginCustomer.c delete mode 100644 tests/build/test/preprocess/includes/test_LoginCustomer.c delete mode 100644 tests/build/test/results/test_LoginCustomer.pass delete mode 100644 tests/build/test/runners/test_LoginCustomer_runner.c delete mode 100644 tests/project.yml delete mode 100644 tests/test/support/.gitkeep rename tests/{test => }/test_LoginCustomer.c (100%) diff --git a/tests/build/test/cache/defines_dependency.yml b/tests/build/test/cache/defines_dependency.yml deleted file mode 100644 index 9f4fffc..0000000 --- a/tests/build/test/cache/defines_dependency.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -"/home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.c": -- TEST diff --git a/tests/build/test/cache/input.yml b/tests/build/test/cache/input.yml deleted file mode 100644 index fb9e794..0000000 --- a/tests/build/test/cache/input.yml +++ /dev/null @@ -1,242 +0,0 @@ ---- -:project: - :use_exceptions: false - :use_mocks: true - :compile_threads: 1 - :test_threads: 1 - :use_test_preprocessor: true - :use_preprocessor_directives: false - :use_deep_dependencies: false - :generate_deep_dependencies: true - :auto_link_deep_dependencies: false - :test_file_prefix: test_ - :options_paths: [] - :release_build: false - :use_auxiliary_dependencies: true - :build_root: build - :which_ceedling: gem - :ceedling_version: 0.31.1 - :default_tasks: - - test:all -:release_build: - :use_assembly: false - :artifacts: [] -:paths: - :test: - - "+:test/**" - - "-:test/support" - :source: - - "/home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/**" - :support: - - test/support - :include: [] - :libraries: [] - :test_toolchain_include: [] - :release_toolchain_include: [] -:files: - :test: [] - :source: [] - :assembly: [] - :support: [] - :include: [] -:environment: -- :rake_columns: '120' -:defines: - :test: - - &1 [] - - TEST - :test_preprocess: - - *1 - - TEST - :release: [] - :release_preprocess: [] - :use_test_definition: false - :common: [] -:libraries: - :flag: "-l${1}" - :path_flag: "-L ${1}" - :test: [] - :test_preprocess: [] - :release: [] - :release_preprocess: [] - :placement: :end - :system: [] -:flags: {} -:extension: - :header: ".h" - :source: ".c" - :assembly: ".s" - :object: ".o" - :libraries: - - ".a" - - ".so" - :executable: ".out" - :map: ".map" - :list: ".lst" - :testpass: ".pass" - :testfail: ".fail" - :dependencies: ".d" -:unity: - :vendor_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor" - :defines: [] -:cmock: - :vendor_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor" - :defines: [] - :includes: [] - :mock_prefix: mock_ - :when_no_prototypes: :warn - :enforce_strict_ordering: true - :plugins: - - :ignore - - :callback - :treat_as: - uint8: HEX8 - uint16: HEX16 - uint32: UINT32 - int8: INT8 - bool: UINT8 - :mock_path: build/test/mocks - :verbosity: 3 - :unity_helper: false -:cexception: - :vendor_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor" - :defines: [] -:test_runner: - :includes: [] - :file_suffix: _runner -:tools: - :test_compiler: - :executable: gcc - :name: default_test_compiler - :stderr_redirect: :none - :background_exec: :none - :optional: false - :arguments: - - '' - - '' - - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR - - -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE - - "-D$": COLLECTION_DEFINES_TEST_AND_VENDOR - - "-DGNU_COMPILER" - - "-g" - - '' - - -c "${1}" - - -o "${2}" - - "-MMD" - - -MF "${4}" - :test_fixture: - :executable: "${1}" - :name: default_test_fixture - :stderr_redirect: :auto - :background_exec: :none - :optional: false - :arguments: [] - :test_linker: - :executable: gcc - :name: default_test_linker - :stderr_redirect: :none - :background_exec: :none - :optional: false - :arguments: - - '' - - '' - - '' - - '"${1}"' - - "${5}" - - -o "${2}" - - '' - - "${4}" - - '' - :test_file_preprocessor: - :executable: gcc - :name: default_test_file_preprocessor - :stderr_redirect: :none - :background_exec: :none - :optional: false - :arguments: - - '' - - '' - - "-E" - - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR - - -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE - - "-D$": COLLECTION_DEFINES_TEST_AND_VENDOR - - "-D$": DEFINES_TEST_PREPROCESS - - "-DGNU_COMPILER" - - '"${1}"' - - -o "${2}" - :test_file_preprocessor_directives: - :executable: gcc - :name: default_test_file_preprocessor_directives - :stderr_redirect: :none - :background_exec: :none - :optional: false - :arguments: - - "-E" - - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR - - -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE - - "-D$": COLLECTION_DEFINES_TEST_AND_VENDOR - - "-D$": DEFINES_TEST_PREPROCESS - - "-DGNU_COMPILER" - - "-fdirectives-only" - - '"${1}"' - - -o "${2}" - :test_includes_preprocessor: - :executable: gcc - :name: default_test_includes_preprocessor - :stderr_redirect: :none - :background_exec: :none - :optional: false - :arguments: - - '' - - '' - - "-E" - - "-MM" - - "-MG" - - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR - - -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE - - "-D$": COLLECTION_DEFINES_TEST_AND_VENDOR - - "-D$": DEFINES_TEST_PREPROCESS - - "-DGNU_COMPILER" - - '"${1}"' -:test_compiler: - :arguments: [] -:test_linker: - :arguments: [] -:test_fixture: - :arguments: [] - :link_objects: [] -:test_includes_preprocessor: - :arguments: [] -:test_file_preprocessor: - :arguments: [] -:test_file_preprocessor_directives: - :arguments: [] -:test_dependencies_generator: - :arguments: [] -:release_compiler: - :arguments: [] -:release_linker: - :arguments: [] -:release_assembler: - :arguments: [] -:release_dependencies_generator: - :arguments: [] -:plugins: - :load_paths: - - "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/lib/../plugins" - :enabled: - - stdout_pretty_tests_report - - module_generator - :display_raw_test_results: false - :stdout_pretty_tests_report_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/lib/../plugins/stdout_pretty_tests_report" - :module_generator_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/lib/../plugins/module_generator" -:gcov: - :reports: - - HtmlDetailed - :gcovr: - :html_medium_threshold: 75 - :html_high_threshold: 90 -:module_generator: - :project_root: "./" - :source_root: src/ - :test_root: test/ diff --git a/tests/build/test/cache/test_LoginCustomer.c b/tests/build/test/cache/test_LoginCustomer.c deleted file mode 100644 index 28f8ec8..0000000 --- a/tests/build/test/cache/test_LoginCustomer.c +++ /dev/null @@ -1,87 +0,0 @@ -#include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h" -#include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" -void setUp(){}; - -void tearDown(){}; - -void test_checkLogin() - -{ - - - - - -_Bool - - expected_test_values_compute_to_true[] = {4==4, - - 1 - - == - - 1 - - , 1==1, - - 0 - - == - - 0 - - , 'z'=='z', '='=='=',0x1A==0x1A}; - - int length_1 = sizeof(expected_test_values_compute_to_true)/sizeof( - - _Bool - - ); - - - - - -_Bool - - expected_test_values_compute_to_false[] = {4!=4, - - 1 - - == - - 0 - - ,1==0, - - 0 - - == - - 1 - - ,'z'=='x','!'==')',0x1A==0x2B}; - - int length_2 = sizeof(expected_test_values_compute_to_false)/sizeof( - - _Bool - - ); - - - - - - for(int i=0;i<7;++i) { - - do {if ((checkLogin(expected_test_values_compute_to_true[i]))) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(16)));}} while(0); - - } - - for(int i=0;i<7;++i){ - - do {if (!(checkLogin(expected_test_values_compute_to_false[i]))) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(19)));}} while(0); - - } - -} diff --git a/tests/build/test/dependencies/LoginCustomer.d b/tests/build/test/dependencies/LoginCustomer.d deleted file mode 100644 index 45e2415..0000000 --- a/tests/build/test/dependencies/LoginCustomer.d +++ /dev/null @@ -1,3 +0,0 @@ -build/test/out/c/LoginCustomer.o: \ - /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.c \ - /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h diff --git a/tests/build/test/dependencies/cmock.d b/tests/build/test/dependencies/cmock.d deleted file mode 100644 index 82b64c9..0000000 --- a/tests/build/test/dependencies/cmock.d +++ /dev/null @@ -1,6 +0,0 @@ -build/test/out/c/cmock.o: \ - /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/src/cmock.c \ - /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/src/cmock.h \ - /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/src/cmock_internals.h \ - /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ - /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h diff --git a/tests/build/test/dependencies/test_LoginCustomer.d b/tests/build/test/dependencies/test_LoginCustomer.d deleted file mode 100644 index 1a634fe..0000000 --- a/tests/build/test/dependencies/test_LoginCustomer.d +++ /dev/null @@ -1,4 +0,0 @@ -build/test/out/c/test_LoginCustomer.o: test/test_LoginCustomer.c \ - /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ - /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h \ - /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h diff --git a/tests/build/test/dependencies/test_LoginCustomer_runner.d b/tests/build/test/dependencies/test_LoginCustomer_runner.d deleted file mode 100644 index 1649170..0000000 --- a/tests/build/test/dependencies/test_LoginCustomer_runner.d +++ /dev/null @@ -1,4 +0,0 @@ -build/test/out/c/test_LoginCustomer_runner.o: \ - build/test/runners/test_LoginCustomer_runner.c \ - /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ - /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h diff --git a/tests/build/test/dependencies/unity.d b/tests/build/test/dependencies/unity.d deleted file mode 100644 index 02f2997..0000000 --- a/tests/build/test/dependencies/unity.d +++ /dev/null @@ -1,4 +0,0 @@ -build/test/out/c/unity.o: \ - /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.c \ - /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ - /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h diff --git a/tests/build/test/out/c/LoginCustomer.o b/tests/build/test/out/c/LoginCustomer.o deleted file mode 100644 index 82cb77b53f1898426f37bd91e324cb4ef976af5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3008 zcmcgu%WoS+7@yhoi#m0iq%93WVyRLQM7_2n6iR6zab835f z-iEDfxOI8^W@2RfTlgfRJPH0O0{U)17>*Q-of4=d(mAjSPc6bl;h8A{C2bNU(wRt^ zx)v#ucL8c5*>nP?WRjFY$)q2OJd-Pc#9Mgqbn0PP4rB1!$v+8{)K>r^vhdp^rAp+h z93x)&013Hr85+j>`N`a1R?Q9P`uRZW@Pjaqux$2Os8C(7Xj4LG&kd=$GudadPiM(> z^7u#PA;ywA@9G~LS{U53@j;YLG8wZls2oQ@nv#Mcn?;=L4)I@NsO)__Ilq@Xh-dWv zX!Zr$ZCiz_VXGPXg&Efj+m;jfh2uO%tNwnf63;{Peh%Z)o{d!{2mF+jAW^ z^z)(fYSXFb1Ebcmd@&n(zifVb`iwR@W7V35BTD4QAMY)Ot$YN7h+jX?_-h$H+?Pmf zVN26tpg|PjR4#KvDIZK;{1F}<-C1Fy6V9Z)(y^2766rymyQjm)pLEJ4CD`3v$rGyL zC`z5$lSO6GwIj{&r<<`$Dob|-a4LJCM?TOa_w~rQWMZU7_gGhbhAC?9f@$jSW_vuPm0Q zD%Higx#iiF>dI8PGFxTlzidP5l7fP?`U6;!CghVsrmk{0k)5Muv}(em0&&mc@@DK& zLbP~P=nDeJ1x^T@5qM7Ed4X31HUv5XeSy~rQHMTVRR5NcKNIpd0;BojK|Lh@PXuZ} z1@ff8D}=O#bbqsr^8*aL4%(9Qtd<^F8v)bnIJr!(`96yj`agGHr+~Uu3merYZhVAA zyiu!p)-@Kh8lK@aaA0GqR@1R$0O~W{bldbXV7lW5mX6yZ?+1pt)`_v~>Z)h75z+A6 za2?C|zw`qf<2#rBFX&eTU&N?qbXI9Rf=wwX_!xjQG@RSej zj&f0c+D{atVi4IK*n7%+Pe4Qd|K(SN55=UY2#E50;S)}NH7YW zB^l(z2$FJ2qlf*-vTNivMib9^1^SO@*2(K=}Vk{_*$^2%Ib*&i?z np``B`-N@ue{iIxSPl074c)xXG1j+eP?zrC;>i#61fYR?Tlt#Mv diff --git a/tests/build/test/out/c/cmock.o b/tests/build/test/out/c/cmock.o deleted file mode 100644 index 162be594be8e993b0d9cd86d186661c8be1c8c4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8152 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 Cqqzc3qmQSrGh+|D&i%T%y(w) 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 Y>2T~z=gTadbQ6Dxf77Fp!0E^T3A7N^asU7T diff --git a/tests/build/test/preprocess/files/test_LoginCustomer.c b/tests/build/test/preprocess/files/test_LoginCustomer.c deleted file mode 100644 index 28f8ec8..0000000 --- a/tests/build/test/preprocess/files/test_LoginCustomer.c +++ /dev/null @@ -1,87 +0,0 @@ -#include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h" -#include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" -void setUp(){}; - -void tearDown(){}; - -void test_checkLogin() - -{ - - - - - -_Bool - - expected_test_values_compute_to_true[] = {4==4, - - 1 - - == - - 1 - - , 1==1, - - 0 - - == - - 0 - - , 'z'=='z', '='=='=',0x1A==0x1A}; - - int length_1 = sizeof(expected_test_values_compute_to_true)/sizeof( - - _Bool - - ); - - - - - -_Bool - - expected_test_values_compute_to_false[] = {4!=4, - - 1 - - == - - 0 - - ,1==0, - - 0 - - == - - 1 - - ,'z'=='x','!'==')',0x1A==0x2B}; - - int length_2 = sizeof(expected_test_values_compute_to_false)/sizeof( - - _Bool - - ); - - - - - - for(int i=0;i<7;++i) { - - do {if ((checkLogin(expected_test_values_compute_to_true[i]))) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(16)));}} while(0); - - } - - for(int i=0;i<7;++i){ - - do {if (!(checkLogin(expected_test_values_compute_to_false[i]))) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(19)));}} while(0); - - } - -} diff --git a/tests/build/test/preprocess/includes/test_LoginCustomer.c b/tests/build/test/preprocess/includes/test_LoginCustomer.c deleted file mode 100644 index 8d24aa9..0000000 --- a/tests/build/test/preprocess/includes/test_LoginCustomer.c +++ /dev/null @@ -1,3 +0,0 @@ ---- -- "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" -- Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h diff --git a/tests/build/test/results/test_LoginCustomer.pass b/tests/build/test/results/test_LoginCustomer.pass deleted file mode 100644 index 730ed0b..0000000 --- a/tests/build/test/results/test_LoginCustomer.pass +++ /dev/null @@ -1,18 +0,0 @@ ---- -:source: - :path: test - :file: test_LoginCustomer.c -:successes: -- :test: test_checkLogin - :line: 5 - :message: '' - :unity_test_time: 0 -:failures: [] -:ignores: [] -:counts: - :total: 1 - :passed: 1 - :failed: 0 - :ignored: 0 -:stdout: [] -:time: 0.001912861000164412 diff --git a/tests/build/test/runners/test_LoginCustomer_runner.c b/tests/build/test/runners/test_LoginCustomer_runner.c deleted file mode 100644 index f061ca9..0000000 --- a/tests/build/test/runners/test_LoginCustomer_runner.c +++ /dev/null @@ -1,81 +0,0 @@ -/* AUTOGENERATED FILE. DO NOT EDIT. */ - -/*=======Automagically Detected Files To Include=====*/ -#include "unity.h" - -int GlobalExpectCount; -int GlobalVerifyOrder; -char* GlobalOrderError; - -/*=======External Functions This Runner Calls=====*/ -extern void setUp(void); -extern void tearDown(void); -extern void test_checkLogin(); - - -/*=======Mock Management=====*/ -static void CMock_Init(void) -{ - GlobalExpectCount = 0; - GlobalVerifyOrder = 0; - GlobalOrderError = NULL; -} -static void CMock_Verify(void) -{ -} -static void CMock_Destroy(void) -{ -} - -/*=======Test Reset Options=====*/ -void resetTest(void); -void resetTest(void) -{ - tearDown(); - CMock_Verify(); - CMock_Destroy(); - CMock_Init(); - setUp(); -} -void verifyTest(void); -void verifyTest(void) -{ - CMock_Verify(); -} - -/*=======Test Runner Used To Run Each Test=====*/ -static void run_test(UnityTestFunction func, const char* name, UNITY_LINE_TYPE line_num) -{ - Unity.CurrentTestName = name; - Unity.CurrentTestLineNumber = line_num; -#ifdef UNITY_USE_COMMAND_LINE_ARGS - if (!UnityTestMatches()) - return; -#endif - Unity.NumberOfTests++; - UNITY_CLR_DETAILS(); - UNITY_EXEC_TIME_START(); - CMock_Init(); - if (TEST_PROTECT()) - { - setUp(); - func(); - } - if (TEST_PROTECT()) - { - tearDown(); - CMock_Verify(); - } - CMock_Destroy(); - UNITY_EXEC_TIME_STOP(); - UnityConcludeTest(); -} - -/*=======MAIN=====*/ -int main(void) -{ - UnityBegin("test_LoginCustomer.c"); - run_test(test_checkLogin, "test_checkLogin", 5); - - return UnityEnd(); -} diff --git a/tests/project.yml b/tests/project.yml deleted file mode 100644 index 7245e5e..0000000 --- a/tests/project.yml +++ /dev/null @@ -1,101 +0,0 @@ ---- - -# Notes: -# Sample project C code is not presently written to produce a release artifact. -# As such, release build options are disabled. -# This sample, therefore, only demonstrates running a collection of unit tests. - -:project: - :use_exceptions: FALSE - :use_test_preprocessor: TRUE - :use_auxiliary_dependencies: TRUE - :build_root: build -# :release_build: TRUE - :test_file_prefix: test_ - :which_ceedling: gem - :ceedling_version: 0.31.1 - :default_tasks: - - test:all - -#:test_build: -# :use_assembly: TRUE - -#:release_build: -# :output: MyApp.out -# :use_assembly: FALSE - -:environment: - -:extension: - :executable: .out - -:paths: - :test: - - +:test/** - - -:test/support - :source: - - /home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/** - :support: - - test/support - :libraries: [] - -:defines: - # in order to add common defines: - # 1) remove the trailing [] from the :common: section - # 2) add entries to the :common: section (e.g. :test: has TEST defined) - :common: &common_defines [] - :test: - - *common_defines - - TEST - :test_preprocess: - - *common_defines - - TEST - -:cmock: - :mock_prefix: mock_ - :when_no_prototypes: :warn - :enforce_strict_ordering: TRUE - :plugins: - - :ignore - - :callback - :treat_as: - uint8: HEX8 - uint16: HEX16 - uint32: UINT32 - int8: INT8 - bool: UINT8 - -# Add -gcov to the plugins list to make sure of the gcov plugin -# You will need to have gcov and gcovr both installed to make it work. -# For more information on these options, see docs in plugins/gcov -:gcov: - :reports: - - HtmlDetailed - :gcovr: - :html_medium_threshold: 75 - :html_high_threshold: 90 - -#:tools: -# Ceedling defaults to using gcc for compiling, linking, etc. -# As [:tools] is blank, gcc will be used (so long as it's in your system path) -# See documentation to configure a given toolchain for use - -# LIBRARIES -# These libraries are automatically injected into the build process. Those specified as -# common will be used in all types of builds. Otherwise, libraries can be injected in just -# tests or releases. These options are MERGED with the options in supplemental yaml files. -:libraries: - :placement: :end - :flag: "-l${1}" - :path_flag: "-L ${1}" - :system: [] # for example, you might list 'm' to grab the math library - :test: [] - :release: [] - -:plugins: - :load_paths: - - "#{Ceedling.load_path}" - :enabled: - - stdout_pretty_tests_report - - module_generator -... diff --git a/tests/test/support/.gitkeep b/tests/test/support/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/tests/test/test_LoginCustomer.c b/tests/test_LoginCustomer.c similarity index 100% rename from tests/test/test_LoginCustomer.c rename to tests/test_LoginCustomer.c From 2349682970fe5bd7e11905fdf8030ef8761458be Mon Sep 17 00:00:00 2001 From: Shivam Chaudhary Date: Fri, 27 Jan 2023 12:02:39 +0100 Subject: [PATCH 06/21] Create file with function getAvailableAccountBalance --- src/currentCustomerAccountBalance.c | 45 +++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/currentCustomerAccountBalance.c diff --git a/src/currentCustomerAccountBalance.c b/src/currentCustomerAccountBalance.c new file mode 100644 index 0000000..f11ea54 --- /dev/null +++ b/src/currentCustomerAccountBalance.c @@ -0,0 +1,45 @@ +#include "currentCustomerAccountBalance.h" + +float getAvailableAccountBalance(int user_id) { + bool keep_reading = true; + float balance = 0; + + char buffer[MAX_LENGTH]; + char stringID[MAX_LENGTH] = "ID="; + char user_id_as_string[MAX_LENGTH]; + char balance_String[MAX_LENGTH]; + + sprintf(user_id_as_string, "%d", user_id); + strcat(stringID, user_id_as_string); + + FILE *file = fopen("CustomerData.txt", "r"); + + while(keep_reading) { + fgets(buffer, MAX_LENGTH, file); + if (feof(file)) { + keep_reading = false; + } + else if(strstr(buffer, stringID)) { + fgets(buffer, MAX_LENGTH, file); + fgets(buffer, MAX_LENGTH, file); + fgets(buffer, MAX_LENGTH, file); + fgets(buffer, MAX_LENGTH, file); + strcpy(balance_String, buffer); + + char *token = strtok(balance_String, "="); + while (token != NULL) { + if (atoi(token) != 0) { + balance = atof(token); + break; + } + token = strtok(NULL, "="); + } + keep_reading = false; + } + + } + fclose(file); + + return balance; + +} \ No newline at end of file From 8d0693c329ba5b76e9d30a292e1b81c350e6edf1 Mon Sep 17 00:00:00 2001 From: Shivam Chaudhary Date: Fri, 27 Jan 2023 12:03:06 +0100 Subject: [PATCH 07/21] Create currentCustomerAccountBalance.h --- src/currentCustomerAccountBalance.h | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/currentCustomerAccountBalance.h diff --git a/src/currentCustomerAccountBalance.h b/src/currentCustomerAccountBalance.h new file mode 100644 index 0000000..76725fe --- /dev/null +++ b/src/currentCustomerAccountBalance.h @@ -0,0 +1,7 @@ +#include +#include +#include +#include + +#define MAX_LENGTH 100 +float getAvailableAccountBalance(int user_id); \ No newline at end of file From 73cd6f96219d7366e073ad760b92c586c68c08dc Mon Sep 17 00:00:00 2001 From: Shivam Chaudhary Date: Fri, 27 Jan 2023 12:20:03 +0100 Subject: [PATCH 08/21] Create function fetchBalanceFromBalanceString --- src/currentCustomerAccountBalance.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/currentCustomerAccountBalance.c b/src/currentCustomerAccountBalance.c index f11ea54..1f87d76 100644 --- a/src/currentCustomerAccountBalance.c +++ b/src/currentCustomerAccountBalance.c @@ -1,15 +1,28 @@ #include "currentCustomerAccountBalance.h" +float fetchBalanceFromBalanceString(char balance_String[MAX_LENGTH]) { + float balance = 0; + char *token = strtok(balance_String, "="); // separates string to two parts + while (token != NULL) { + if (atoi(token) != 0) { + balance = atof(token); // converts string to float + break; + } + token = strtok(NULL, "="); + } + return balance; +} + float getAvailableAccountBalance(int user_id) { bool keep_reading = true; - float balance = 0; + float availableBalance = 0; char buffer[MAX_LENGTH]; char stringID[MAX_LENGTH] = "ID="; char user_id_as_string[MAX_LENGTH]; char balance_String[MAX_LENGTH]; - sprintf(user_id_as_string, "%d", user_id); + sprintf(user_id_as_string, "%d", user_id); // converts user_id to string strcat(stringID, user_id_as_string); FILE *file = fopen("CustomerData.txt", "r"); @@ -25,21 +38,13 @@ float getAvailableAccountBalance(int user_id) { fgets(buffer, MAX_LENGTH, file); fgets(buffer, MAX_LENGTH, file); strcpy(balance_String, buffer); - - char *token = strtok(balance_String, "="); - while (token != NULL) { - if (atoi(token) != 0) { - balance = atof(token); - break; - } - token = strtok(NULL, "="); - } + availableBalance = fetchBalanceFromBalanceString(balance_String); keep_reading = false; } } fclose(file); - return balance; + return availableBalance; } \ No newline at end of file From 0abe0442747c81de05a334b05718c627ec552457 Mon Sep 17 00:00:00 2001 From: Shivam Chaudhary Date: Fri, 27 Jan 2023 15:54:10 +0100 Subject: [PATCH 09/21] Refactoring: add function for making code readable --- src/currentCustomerAccountBalance.c | 36 ++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/src/currentCustomerAccountBalance.c b/src/currentCustomerAccountBalance.c index 1f87d76..9d2e365 100644 --- a/src/currentCustomerAccountBalance.c +++ b/src/currentCustomerAccountBalance.c @@ -13,20 +13,12 @@ float fetchBalanceFromBalanceString(char balance_String[MAX_LENGTH]) { return balance; } -float getAvailableAccountBalance(int user_id) { +float readFileAndGetAvailableBalance(FILE *file, char stringID[MAX_LENGTH]) { + float balance = 0; bool keep_reading = true; - float availableBalance = 0; - char buffer[MAX_LENGTH]; - char stringID[MAX_LENGTH] = "ID="; - char user_id_as_string[MAX_LENGTH]; char balance_String[MAX_LENGTH]; - sprintf(user_id_as_string, "%d", user_id); // converts user_id to string - strcat(stringID, user_id_as_string); - - FILE *file = fopen("CustomerData.txt", "r"); - while(keep_reading) { fgets(buffer, MAX_LENGTH, file); if (feof(file)) { @@ -38,11 +30,33 @@ float getAvailableAccountBalance(int user_id) { fgets(buffer, MAX_LENGTH, file); fgets(buffer, MAX_LENGTH, file); strcpy(balance_String, buffer); - availableBalance = fetchBalanceFromBalanceString(balance_String); + balance = fetchBalanceFromBalanceString(balance_String); keep_reading = false; } } + return balance; +} + +float getAvailableAccountBalance(int user_id) { + float availableBalance = 0; + char stringID[MAX_LENGTH] = "ID="; + char user_id_as_string[MAX_LENGTH]; + + sprintf(user_id_as_string, "%d", user_id); // converts user_id to string + strcat(stringID, user_id_as_string); + // Now stringID is "ID=user_id" + + FILE *file = fopen("CustomerData.txt", "r"); + if(file == 0) { + printf("Erro: file cannot be opened!"); + return 0; + } + else { + availableBalance = readFileAndGetAvailableBalance(file, stringID); + } + + fclose(file); return availableBalance; From 54ca0a053d09bac8fecef8e5f63426cc113ad7b2 Mon Sep 17 00:00:00 2001 From: fdlt3817 Date: Fri, 27 Jan 2023 16:14:46 +0100 Subject: [PATCH 10/21] Line delete function --- src/CustomerData.txt | 7 +-- src/TempData.txt | 5 ++ src/a.exe | Bin 0 -> 269557 bytes src/updateCustomerAccountBalance.c | 95 +++++++++++++++++++++++++++++ src/updateCustomerAccountBalance.h | 9 +++ 5 files changed, 110 insertions(+), 6 deletions(-) create mode 100644 src/TempData.txt create mode 100644 src/a.exe create mode 100644 src/updateCustomerAccountBalance.c create mode 100644 src/updateCustomerAccountBalance.h diff --git a/src/CustomerData.txt b/src/CustomerData.txt index 3ac070f..782579a 100644 --- a/src/CustomerData.txt +++ b/src/CustomerData.txt @@ -1,6 +1 @@ -1234=example -ID=1234 -forename=Max -Surname=Mustermann -password=example -balance=0 +balance=500 \ No newline at end of file diff --git a/src/TempData.txt b/src/TempData.txt new file mode 100644 index 0000000..f81d5a8 --- /dev/null +++ b/src/TempData.txt @@ -0,0 +1,5 @@ +1234=example +ID=1234 +forename=Max +Surname=Mustermann +balance=0 diff --git a/src/a.exe b/src/a.exe new file mode 100644 index 0000000000000000000000000000000000000000..25d0c588eaca7bdbf95cbee6f46f9623fe60a8f9 GIT binary patch literal 269557 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

XP@11vk-?txH=`4yE&0~vtXR8>&J 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 +#include +#include +#include + +#define MAX_LENGTH 100 +bool updateAvailableAccountBalance(int user_id, float changeInBalance); +void deleteLineFromFile(int lineNumber); +void replaceBalanceInString(float replacementBalance, int currentLine); \ No newline at end of file From 59cc6670da4ea2223b859a518f4d99218a60db0b Mon Sep 17 00:00:00 2001 From: fdlt3817 Date: Fri, 27 Jan 2023 16:45:53 +0100 Subject: [PATCH 11/21] Functionality of the updateCustomerAccountBalance has been completed --- src/CustomerData.txt | 7 ++- src/TempData.txt | 5 -- src/a.exe | Bin 269557 -> 269211 bytes src/updateCustomerAccountBalance.c | 71 ++++++++++++++--------------- src/updateCustomerAccountBalance.h | 2 +- 5 files changed, 40 insertions(+), 45 deletions(-) delete mode 100644 src/TempData.txt diff --git a/src/CustomerData.txt b/src/CustomerData.txt index 782579a..05ec80e 100644 --- a/src/CustomerData.txt +++ b/src/CustomerData.txt @@ -1 +1,6 @@ -balance=500 \ No newline at end of file +1234=example +ID=1234 +forename=Max +Surname=Mustermann +password=example +balance=1000 \ No newline at end of file diff --git a/src/TempData.txt b/src/TempData.txt deleted file mode 100644 index f81d5a8..0000000 --- a/src/TempData.txt +++ /dev/null @@ -1,5 +0,0 @@ -1234=example -ID=1234 -forename=Max -Surname=Mustermann -balance=0 diff --git a/src/a.exe b/src/a.exe index 25d0c588eaca7bdbf95cbee6f46f9623fe60a8f9..4083994a33269e5e2e3ac93d883afcbc797f6ad3 100644 GIT binary patch delta 23329 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 delta 23466 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 U*NXp5X;D&&!H`tA*pM##FMse1IRF3v diff --git a/src/updateCustomerAccountBalance.c b/src/updateCustomerAccountBalance.c index 48ad5e8..6ee64e9 100644 --- a/src/updateCustomerAccountBalance.c +++ b/src/updateCustomerAccountBalance.c @@ -1,51 +1,45 @@ #include "updateCustomerAccountBalance.h" #include "currentCustomerAccountBalance.c" -void deleteLineFromFile(int line){ - FILE *fptr1, *fptr2; - char file1[] ="CustomerData.txt"; - char file2[] ="TempData.txt"; - char curr; - int del=line, line_number = 0; - fptr1 = fopen(file1,"r"); - fptr2 = fopen(file2, "w"); - curr = getc(fptr1); - if(curr!=EOF) {line_number =1;} - while(1){ - if(del != line_number){ - putc(curr, fptr2); - curr = getc(fptr1); - if(curr =='\n') line_number++; - if(curr == EOF) break; - }else{ - - } - +void deleteLineFromFile(const char* file_name, int line, const char* new_line){ + FILE* file = fopen(file_name, "r"); + if (file == NULL) { + printf("Error opening file!\n"); + return; + } + char current_string[1024]; + int current_line = 1; + char *temp_file_name = "temp.txt"; + FILE* temp_file = fopen(temp_file_name, "w"); + if (temp_file == NULL) { + printf("Error creating temp file!\n"); + fclose(file); + return; + } + while (fgets(current_string, sizeof(current_string), file) != NULL) { + if (current_line == line) { + fprintf(temp_file, "%s", new_line); + } else { + fprintf(temp_file, "%s", current_string); + } + current_line++; } - fclose(fptr1); - remove(file1); - fclose(fptr2); - rename(file2,"CustomerData.txt"); - + fclose(file); + fclose(temp_file); + if(remove(file_name)!=0){ + printf("could not remove the original file!"); + } // Remove the original file + if(rename(temp_file_name, file_name)!=0){ + printf("could not rename!"); + } // Rename the temp file to the original file } void replaceBalanceInString(float replacementBalance, int currentLine) { - deleteLineFromFile(currentLine-1); - printf("deleting from line %i. balance will be replaced with %f", currentLine, replacementBalance); char newBalanceLine[MAX_LENGTH] = "balance="; char balance_as_string[MAX_LENGTH]; sprintf(balance_as_string, "%g", replacementBalance); //converts replacement balance to string strcat(newBalanceLine, balance_as_string); - printf(newBalanceLine); - - char buffer[MAX_LENGTH]; - FILE *file = fopen("CustomerData.txt", "w"); - - for(int i=0;i Date: Sat, 28 Jan 2023 12:15:17 +0100 Subject: [PATCH 12/21] Refactoring: minimize code lines for easy understanding --- src/currentCustomerAccountBalance.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/currentCustomerAccountBalance.c b/src/currentCustomerAccountBalance.c index 9d2e365..9f415f9 100644 --- a/src/currentCustomerAccountBalance.c +++ b/src/currentCustomerAccountBalance.c @@ -25,10 +25,9 @@ float readFileAndGetAvailableBalance(FILE *file, char stringID[MAX_LENGTH]) { keep_reading = false; } else if(strstr(buffer, stringID)) { - fgets(buffer, MAX_LENGTH, file); - fgets(buffer, MAX_LENGTH, file); - fgets(buffer, MAX_LENGTH, file); - fgets(buffer, MAX_LENGTH, file); + for (int i = 0; i < 4; i++) { + fgets(buffer, MAX_LENGTH, file); + } strcpy(balance_String, buffer); balance = fetchBalanceFromBalanceString(balance_String); keep_reading = false; @@ -49,7 +48,7 @@ float getAvailableAccountBalance(int user_id) { FILE *file = fopen("CustomerData.txt", "r"); if(file == 0) { - printf("Erro: file cannot be opened!"); + printf("Error: customer data file cannot be opened!"); return 0; } else { From 09f153678101862aee97403481e6ac5b6f7cb6ab Mon Sep 17 00:00:00 2001 From: Shivam Chaudhary Date: Sat, 28 Jan 2023 12:32:02 +0100 Subject: [PATCH 13/21] Add missing headers in currentCustomerAccountBalance.h --- src/currentCustomerAccountBalance.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/currentCustomerAccountBalance.h b/src/currentCustomerAccountBalance.h index 76725fe..0b4a148 100644 --- a/src/currentCustomerAccountBalance.h +++ b/src/currentCustomerAccountBalance.h @@ -4,4 +4,7 @@ #include #define MAX_LENGTH 100 -float getAvailableAccountBalance(int user_id); \ No newline at end of file + +float getAvailableAccountBalance(int user_id); +float fetchBalanceFromBalanceString(char balance_String[MAX_LENGTH]); +float readFileAndGetAvailableBalance(FILE *file, char stringID[MAX_LENGTH]); \ No newline at end of file From d9925a3a948531bddc70e48efd8451fda91b4f8d Mon Sep 17 00:00:00 2001 From: fdlt3817 Date: Sat, 28 Jan 2023 16:28:55 +0100 Subject: [PATCH 14/21] Expanded the function to work with negative balance changes. --- src/CustomerData.txt | 2 +- src/a.exe | Bin 269211 -> 269210 bytes src/lineReplacer.h | 6 ++++++ src/updateCustomerAccountBalance.c | 15 ++++++++------- src/updateCustomerAccountBalance.h | 6 ++++-- 5 files changed, 19 insertions(+), 10 deletions(-) create mode 100644 src/lineReplacer.h diff --git a/src/CustomerData.txt b/src/CustomerData.txt index 05ec80e..d5c417b 100644 --- a/src/CustomerData.txt +++ b/src/CustomerData.txt @@ -3,4 +3,4 @@ ID=1234 forename=Max Surname=Mustermann password=example -balance=1000 \ No newline at end of file +balance=2000 \ No newline at end of file diff --git a/src/a.exe b/src/a.exe index 4083994a33269e5e2e3ac93d883afcbc797f6ad3..f28e6b38fe554253bb67e09ed3c5a78bb7a8dba4 100644 GIT binary patch delta 19365 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 E07b-3B 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 diff --git a/src/lineReplacer.h b/src/lineReplacer.h new file mode 100644 index 0000000..999855c --- /dev/null +++ b/src/lineReplacer.h @@ -0,0 +1,6 @@ +#include +#include +#include +#include + +void replaceLineInFile(const char* file_name, int line, const char* new_line); //replaces the line at "line" on the file "file_name", with the new line "new_line". \ No newline at end of file diff --git a/src/updateCustomerAccountBalance.c b/src/updateCustomerAccountBalance.c index 6ee64e9..764c317 100644 --- a/src/updateCustomerAccountBalance.c +++ b/src/updateCustomerAccountBalance.c @@ -1,7 +1,8 @@ #include "updateCustomerAccountBalance.h" #include "currentCustomerAccountBalance.c" +#include "lineReplacer.h" -void deleteLineFromFile(const char* file_name, int line, const char* new_line){ +void replaceLineInFile(const char* file_name, int line, const char* new_line){ FILE* file = fopen(file_name, "r"); if (file == NULL) { printf("Error opening file!\n"); @@ -39,10 +40,10 @@ void replaceBalanceInString(float replacementBalance, int currentLine) { char balance_as_string[MAX_LENGTH]; sprintf(balance_as_string, "%g", replacementBalance); //converts replacement balance to string strcat(newBalanceLine, balance_as_string); - deleteLineFromFile("CustomerData.txt",currentLine,newBalanceLine); + replaceLineInFile("CustomerData.txt",currentLine,newBalanceLine); } -bool updateAvailableAccountBalance(int user_id, float changeInBalance){ +bool updateAvailableAccountBalance(int user_id, float changeInBalance, bool positive){ bool keep_reading = true; float availableBalance = 0; @@ -71,19 +72,19 @@ bool updateAvailableAccountBalance(int user_id, float changeInBalance){ fgets(buffer, MAX_LENGTH, file); strcpy(balance_String, buffer); currentLine+=4; - availableBalance = fetchBalanceFromBalanceString(balance_String); - + availableBalance = fetchBalanceFromBalanceString(balance_String); keep_reading = false; } } fclose(file); - replaceBalanceInString(availableBalance+changeInBalance,currentLine); + float newBalance = (positive) ? availableBalance+changeInBalance : availableBalance-changeInBalance; + replaceBalanceInString(newBalance,currentLine); } int main(){ - updateAvailableAccountBalance(1234,500); + updateAvailableAccountBalance(1234,500, true); return 0; } diff --git a/src/updateCustomerAccountBalance.h b/src/updateCustomerAccountBalance.h index 3a4d6da..4af3f89 100644 --- a/src/updateCustomerAccountBalance.h +++ b/src/updateCustomerAccountBalance.h @@ -4,6 +4,8 @@ #include #define MAX_LENGTH 100 -bool updateAvailableAccountBalance(int user_id, float changeInBalance); -void deleteLineFromFile(const char* file_name, int line, const char* new_line); + + +bool updateAvailableAccountBalance(int user_id, float changeInBalance, bool positive); + void replaceBalanceInString(float replacementBalance, int currentLine); \ No newline at end of file From bbc6c7557faa882a28ec76c29401d7f838597977 Mon Sep 17 00:00:00 2001 From: fdlt3817 Date: Sat, 28 Jan 2023 16:34:16 +0100 Subject: [PATCH 15/21] Refactoring: Removed main function --- src/CustomerData.txt | 16 +++++++++++++++- src/a.exe | Bin 269210 -> 269210 bytes src/updateCustomerAccountBalance.c | 10 +--------- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/CustomerData.txt b/src/CustomerData.txt index d5c417b..f847b08 100644 --- a/src/CustomerData.txt +++ b/src/CustomerData.txt @@ -3,4 +3,18 @@ ID=1234 forename=Max Surname=Mustermann password=example -balance=2000 \ No newline at end of file +balance=2000 + +1327=example +ID=1327 +forename=Max +Surname=Mustermann +password=example +balance=1500 + +1666=example +ID=1666 +forename=Max +Surname=Mustermann +password=example +balance=240 \ No newline at end of file diff --git a/src/a.exe b/src/a.exe index f28e6b38fe554253bb67e09ed3c5a78bb7a8dba4..cdc9794dc47303e7a5866bd11fad42ff524ceecb 100644 GIT binary patch delta 16720 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 VJX>cxH9G}4z{S!bFPF8U{|Doarknr( delta 16617 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 Date: Sat, 28 Jan 2023 17:41:48 +0100 Subject: [PATCH 16/21] Bug fix: A line would get removed after the replaced line. --- src/CustomerData.txt | 2 +- src/a.exe | Bin 269210 -> 269210 bytes src/updateCustomerAccountBalance.c | 7 +++++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/CustomerData.txt b/src/CustomerData.txt index f847b08..911b18e 100644 --- a/src/CustomerData.txt +++ b/src/CustomerData.txt @@ -3,7 +3,7 @@ ID=1234 forename=Max Surname=Mustermann password=example -balance=2000 +balance=5000 1327=example ID=1327 diff --git a/src/a.exe b/src/a.exe index cdc9794dc47303e7a5866bd11fad42ff524ceecb..7bbd2e2b2e539e9c09675796307396823a7f961f 100644 GIT binary patch delta 17702 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 Date: Wed, 1 Feb 2023 21:20:10 +0100 Subject: [PATCH 17/21] Add file to save information about customerData.txt --- src/_file_information.h | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 src/_file_information.h diff --git a/src/_file_information.h b/src/_file_information.h new file mode 100644 index 0000000..1cb5200 --- /dev/null +++ b/src/_file_information.h @@ -0,0 +1,2 @@ +#define MAX_LENGTH 100 +#define CUSTOMER_DATA_FILE "CustomerData.txt" \ No newline at end of file From 33ea6b25e75876cc8e15355c4661b39568076c61 Mon Sep 17 00:00:00 2001 From: Shivam Chaudhary Date: Wed, 1 Feb 2023 21:22:37 +0100 Subject: [PATCH 18/21] Update header files --- src/currentCustomerAccountBalance.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/currentCustomerAccountBalance.h b/src/currentCustomerAccountBalance.h index 0b4a148..2795450 100644 --- a/src/currentCustomerAccountBalance.h +++ b/src/currentCustomerAccountBalance.h @@ -3,7 +3,7 @@ #include #include -#define MAX_LENGTH 100 +#include "_file_information.h" float getAvailableAccountBalance(int user_id); float fetchBalanceFromBalanceString(char balance_String[MAX_LENGTH]); From 2f729d8ff0500162c77bd1248d54528366d87ae9 Mon Sep 17 00:00:00 2001 From: Shivam Chaudhary Date: Wed, 1 Feb 2023 21:23:43 +0100 Subject: [PATCH 19/21] Refactoring: Use created constant name for file --- src/currentCustomerAccountBalance.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/currentCustomerAccountBalance.c b/src/currentCustomerAccountBalance.c index 9f415f9..a91e306 100644 --- a/src/currentCustomerAccountBalance.c +++ b/src/currentCustomerAccountBalance.c @@ -46,9 +46,9 @@ float getAvailableAccountBalance(int user_id) { strcat(stringID, user_id_as_string); // Now stringID is "ID=user_id" - FILE *file = fopen("CustomerData.txt", "r"); + FILE *file = fopen(CUSTOMER_DATA_FILE, "r"); if(file == 0) { - printf("Error: customer data file cannot be opened!"); + printf("Error: customer data file cannot be opened!\n"); return 0; } else { From b3688bbd1c3391bd76420fa5ea6ef1af85a7148d Mon Sep 17 00:00:00 2001 From: Shivam Chaudhary Date: Wed, 1 Feb 2023 21:24:02 +0100 Subject: [PATCH 20/21] Update .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 496ee2c..2608ec2 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -.DS_Store \ No newline at end of file +.DS_Store +.vscode \ No newline at end of file From 87a32f9bf6fb620f2ad8c3595ef63f76bd46a1d5 Mon Sep 17 00:00:00 2001 From: fdlt3817 Date: Thu, 2 Feb 2023 14:30:26 +0100 Subject: [PATCH 21/21] Function functionality change updateAvailabeAccountBalance no longer increases or decreases the balance but rather sets the balance to the input value. --- src/updateCustomerAccountBalance.c | 13 ++----------- src/updateCustomerAccountBalance.h | 4 ++-- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/updateCustomerAccountBalance.c b/src/updateCustomerAccountBalance.c index 566f2fd..2040a6d 100644 --- a/src/updateCustomerAccountBalance.c +++ b/src/updateCustomerAccountBalance.c @@ -44,10 +44,9 @@ void replaceBalanceInString(float replacementBalance, int currentLine) { replaceLineInFile("CustomerData.txt",currentLine,newBalanceLine); } -bool updateAvailableAccountBalance(int user_id, float changeInBalance, bool positive){ +bool updateAvailableAccountBalance(int user_id, float newBalance){ bool keep_reading = true; - float availableBalance = 0; char buffer[MAX_LENGTH]; char stringID[MAX_LENGTH] = "ID="; @@ -73,18 +72,10 @@ bool updateAvailableAccountBalance(int user_id, float changeInBalance, bool posi fgets(buffer, MAX_LENGTH, file); strcpy(balance_String, buffer); currentLine+=4; - availableBalance = fetchBalanceFromBalanceString(balance_String); keep_reading = false; } } - fclose(file); - float newBalance = (positive) ? availableBalance+changeInBalance : availableBalance-changeInBalance; + fclose(file);; replaceBalanceInString(newBalance,currentLine); } -int main(){ - - updateAvailableAccountBalance(1234,500,true); - - return 0; -} \ No newline at end of file diff --git a/src/updateCustomerAccountBalance.h b/src/updateCustomerAccountBalance.h index 4af3f89..29f5b75 100644 --- a/src/updateCustomerAccountBalance.h +++ b/src/updateCustomerAccountBalance.h @@ -6,6 +6,6 @@ #define MAX_LENGTH 100 -bool updateAvailableAccountBalance(int user_id, float changeInBalance, bool positive); +bool updateAvailableAccountBalance(int user_id, float newBalance); -void replaceBalanceInString(float replacementBalance, int currentLine); \ No newline at end of file +void replaceBalanceInString(float replacementBalance, int currentLine);