note description: "[ Tests for {BASE64_STRING_ENCODER}. ]" author: "EiffelStudio test wizard" date: "$Date$" revision: "$Revision$" testing: "type/manual" class TEST_BASE64_STRING_ENCODER inherit EQA_TEST_SET feature -- Test routines test_encoder -- Tests encoding from an Eiffel {STRING_8} note testing: "covers/{BASE64_ENCODER}.encode64" testing: "covers/{BASE64_STRING_ENCODER}.encode64" local l_encoder: BASE64_STRING_ENCODER l_value: STRING do create l_encoder l_value := l_encoder.encode64 ("A") assert ("correct_encoding_1", l_value ~ "QQ==") l_value := l_encoder.encode64 ("AB") assert ("correct_encoding_2", l_value ~ "QUI=") l_value := l_encoder.encode64 ("ABC") assert ("correct_encoding_3", l_value ~ "QUJD") l_value := l_encoder.encode64 ("ABCD") assert ("correct_encoding_4", l_value ~ "QUJDRA==") l_value := l_encoder.encode64 ("ABCDE") assert ("correct_encoding_5", l_value ~ "QUJDREU=") l_value := l_encoder.encode64 ("ABCDEF") assert ("correct_encoding_6", l_value ~ "QUJDREVG") end test_decoder -- Tests decoding to an Eiffel {STRING_8} note testing: "covers/{BASE64_STRING_ENCODER}.decode64" local l_encoder: BASE64_STRING_ENCODER l_value: STRING do create l_encoder l_value := l_encoder.decode64 ("QQ==") assert ("correct_decoding_1", l_value ~ "A") l_value := l_encoder.decode64 ("QUI=") assert ("correct_decoding_2", l_value ~ "AB") l_value := l_encoder.decode64 ("QUJD") assert ("correct_decoding_3", l_value ~ "ABC") l_value := l_encoder.decode64 ("QUJDRA==") assert ("correct_decoding_4", l_value ~ "ABCD") l_value := l_encoder.decode64 ("QUJDREU=") assert ("correct_decoding_5", l_value ~ "ABCDE") l_value := l_encoder.decode64 ("QUJDREVG") assert ("correct_decoding_6", l_value ~ "ABCDEF") end test_encode_decode -- Tests encoding and decoding process. note testing: "covers/{BASE64_ENCODER}.encode64" testing: "covers/{BASE64_STRING_ENCODER}.encode64" testing: "covers/{BASE64_STRING_ENCODER}.decode64" local l_encoder: BASE64_STRING_ENCODER l_strings: like strings l_string: STRING_8 l_encoded: STRING_8 l_decoded: STRING_8 do create l_encoder l_strings := strings from l_strings.start until l_strings.after loop l_string := l_strings.item l_encoded := l_encoder.encode64 (l_string) l_decoded := l_encoder.decode64 (l_encoded) assert ("symmetric_decoding_" + l_strings.index.out, l_string ~ l_decoded) l_strings.forth end end feature {NONE} -- Implementation strings: ARRAYED_LIST [STRING] -- List of random strings. local i: INTEGER l_rnd: RANDOM once create Result.make (100) create l_rnd.set_seed (2130498) from i := 1 until i > 100 loop Result.extend (random_string (i, l_rnd)) i := i + 1 end end random_string (a_len: INTEGER; a_rnd: RANDOM): STRING -- Generates a random series of characters. local l_next: INTEGER i, j: INTEGER do create Result.make (a_len) from i := 1 until i > a_len loop l_next := (a_rnd.next_random (i + j) & 0xFF) if l_next.is_valid_character_8_code then Result.append_code (l_next.as_natural_32) i := i + 1 else j := j + 1 end end ensure result_attached: attached Result not_result_is_empty: not Result.is_empty end end