annotate tests/automated/base64-tests.el @ 4981:4aebb0131297

Cleanups/renaming of EXTERNAL_TO_C_STRING and friends -------------------- ChangeLog entries follow: -------------------- modules/ChangeLog addition: 2010-02-05 Ben Wing <ben@xemacs.org> * postgresql/postgresql.c: * postgresql/postgresql.c (CHECK_LIVE_CONNECTION): * postgresql/postgresql.c (Fpq_connectdb): * postgresql/postgresql.c (Fpq_connect_start): * postgresql/postgresql.c (Fpq_lo_import): * postgresql/postgresql.c (Fpq_lo_export): * ldap/eldap.c (Fldap_open): * ldap/eldap.c (Fldap_search_basic): * ldap/eldap.c (Fldap_add): * ldap/eldap.c (Fldap_modify): * ldap/eldap.c (Fldap_delete): * canna/canna_api.c (Fcanna_initialize): * canna/canna_api.c (Fcanna_store_yomi): * canna/canna_api.c (Fcanna_parse): * canna/canna_api.c (Fcanna_henkan_begin): EXTERNAL_TO_C_STRING returns its argument instead of storing it in a parameter, and is renamed to EXTERNAL_TO_ITEXT. Similar things happen to related macros. See entry in src/ChangeLog. More Mule-izing of postgresql.c. Extract out common code between `pq-connectdb' and `pq-connect-start'. Fix places that signal an error string using a formatted string to instead follow the standard and have a fixed reason followed by the particular error message stored as one of the frobs. src/ChangeLog addition: 2010-02-05 Ben Wing <ben@xemacs.org> * console-msw.c (write_string_to_mswindows_debugging_output): * console-msw.c (Fmswindows_message_box): * console-x.c (x_perhaps_init_unseen_key_defaults): * console.c: * database.c (dbm_get): * database.c (dbm_put): * database.c (dbm_remove): * database.c (berkdb_get): * database.c (berkdb_put): * database.c (berkdb_remove): * database.c (Fopen_database): * device-gtk.c (gtk_init_device): * device-msw.c (msprinter_init_device_internal): * device-msw.c (msprinter_default_printer): * device-msw.c (msprinter_init_device): * device-msw.c (sync_printer_with_devmode): * device-msw.c (Fmsprinter_select_settings): * device-x.c (sanity_check_geometry_resource): * device-x.c (Dynarr_add_validified_lisp_string): * device-x.c (x_init_device): * device-x.c (Fx_put_resource): * device-x.c (Fx_valid_keysym_name_p): * device-x.c (Fx_set_font_path): * dialog-msw.c (push_lisp_string_as_unicode): * dialog-msw.c (handle_directory_dialog_box): * dialog-msw.c (handle_file_dialog_box): * dialog-x.c (dbox_descriptor_to_widget_value): * editfns.c (Fformat_time_string): * editfns.c (Fencode_time): * editfns.c (Fset_time_zone_rule): * emacs.c (make_argc_argv): * emacs.c (Fdump_emacs): * emodules.c (emodules_load): * eval.c: * eval.c (maybe_signal_error_1): * event-msw.c (Fdde_alloc_advise_item): * event-msw.c (mswindows_dde_callback): * event-msw.c (mswindows_wnd_proc): * fileio.c (report_error_with_errno): * fileio.c (Fsysnetunam): * fileio.c (Fdo_auto_save): * font-mgr.c (extract_fcapi_string): * font-mgr.c (Ffc_config_app_font_add_file): * font-mgr.c (Ffc_config_app_font_add_dir): * font-mgr.c (Ffc_config_filename): * frame-gtk.c (gtk_set_frame_text_value): * frame-gtk.c (gtk_create_widgets): * frame-msw.c (mswindows_init_frame_1): * frame-msw.c (mswindows_set_title_from_ibyte): * frame-msw.c (msprinter_init_frame_3): * frame-x.c (x_set_frame_text_value): * frame-x.c (x_set_frame_properties): * frame-x.c (start_drag_internal_1): * frame-x.c (x_cde_transfer_callback): * frame-x.c (x_create_widgets): * glyphs-eimage.c (my_jpeg_output_message): * glyphs-eimage.c (jpeg_instantiate): * glyphs-eimage.c (gif_instantiate): * glyphs-eimage.c (png_instantiate): * glyphs-eimage.c (tiff_instantiate): * glyphs-gtk.c (xbm_instantiate_1): * glyphs-gtk.c (gtk_xbm_instantiate): * glyphs-gtk.c (gtk_xpm_instantiate): * glyphs-gtk.c (gtk_xface_instantiate): * glyphs-gtk.c (cursor_font_instantiate): * glyphs-gtk.c (gtk_redisplay_widget): * glyphs-gtk.c (gtk_widget_instantiate_1): * glyphs-gtk.c (gtk_add_tab_item): * glyphs-msw.c (mswindows_xpm_instantiate): * glyphs-msw.c (bmp_instantiate): * glyphs-msw.c (mswindows_resource_instantiate): * glyphs-msw.c (xbm_instantiate_1): * glyphs-msw.c (mswindows_xbm_instantiate): * glyphs-msw.c (mswindows_xface_instantiate): * glyphs-msw.c (mswindows_redisplay_widget): * glyphs-msw.c (mswindows_widget_instantiate): * glyphs-msw.c (add_tree_item): * glyphs-msw.c (add_tab_item): * glyphs-msw.c (mswindows_combo_box_instantiate): * glyphs-msw.c (mswindows_widget_query_string_geometry): * glyphs-x.c (x_locate_pixmap_file): * glyphs-x.c (xbm_instantiate_1): * glyphs-x.c (x_xbm_instantiate): * glyphs-x.c (extract_xpm_color_names): * glyphs-x.c (x_xpm_instantiate): * glyphs-x.c (x_xface_instantiate): * glyphs-x.c (autodetect_instantiate): * glyphs-x.c (safe_XLoadFont): * glyphs-x.c (cursor_font_instantiate): * glyphs-x.c (x_redisplay_widget): * glyphs-x.c (Fchange_subwindow_property): * glyphs-x.c (x_widget_instantiate): * glyphs-x.c (x_tab_control_redisplay): * glyphs.c (pixmap_to_lisp_data): * gui-x.c (menu_separator_style_and_to_external): * gui-x.c (add_accel_and_to_external): * gui-x.c (button_item_to_widget_value): * hpplay.c (player_error_internal): * hpplay.c (play_sound_file): * hpplay.c (play_sound_data): * intl.c (Fset_current_locale): * lisp.h: * menubar-gtk.c (gtk_xemacs_set_accel_keys): * menubar-msw.c (populate_menu_add_item): * menubar-msw.c (populate_or_checksum_helper): * menubar-x.c (menu_item_descriptor_to_widget_value_1): * nt.c (init_user_info): * nt.c (get_long_basename): * nt.c (nt_get_resource): * nt.c (init_mswindows_environment): * nt.c (get_cached_volume_information): * nt.c (mswindows_readdir): * nt.c (read_unc_volume): * nt.c (mswindows_stat): * nt.c (mswindows_getdcwd): * nt.c (mswindows_executable_type): * nt.c (Fmswindows_short_file_name): * ntplay.c (nt_play_sound_file): * objects-gtk.c: * objects-gtk.c (gtk_valid_color_name_p): * objects-gtk.c (gtk_initialize_font_instance): * objects-gtk.c (gtk_font_list): * objects-msw.c (font_enum_callback_2): * objects-msw.c (parse_font_spec): * objects-x.c (x_parse_nearest_color): * objects-x.c (x_valid_color_name_p): * objects-x.c (x_initialize_font_instance): * objects-x.c (x_font_instance_truename): * objects-x.c (x_font_list): * objects-xlike-inc.c (XFUN): * objects-xlike-inc.c (xft_find_charset_font): * process-nt.c (mswindows_report_winsock_error): * process-nt.c (nt_create_process): * process-nt.c (get_internet_address): * process-nt.c (nt_open_network_stream): * process-unix.c: * process-unix.c (allocate_pty): * process-unix.c (get_internet_address): * process-unix.c (unix_canonicalize_host_name): * process-unix.c (unix_open_network_stream): * realpath.c: * select-common.h (lisp_data_to_selection_data): * select-gtk.c (symbol_to_gtk_atom): * select-gtk.c (atom_to_symbol): * select-msw.c (symbol_to_ms_cf): * select-msw.c (mswindows_register_selection_data_type): * select-x.c (symbol_to_x_atom): * select-x.c (x_atom_to_symbol): * select-x.c (hack_motif_clipboard_selection): * select-x.c (Fx_store_cutbuffer_internal): * sound.c (Fplay_sound_file): * sound.c (Fplay_sound): * sound.h (sound_perror): * sysdep.c: * sysdep.c (qxe_allocating_getcwd): * sysdep.c (qxe_execve): * sysdep.c (copy_in_passwd): * sysdep.c (qxe_getpwnam): * sysdep.c (qxe_ctime): * sysdll.c (dll_open): * sysdll.c (dll_function): * sysdll.c (dll_variable): * sysdll.c (search_linked_libs): * sysdll.c (dll_error): * sysfile.h: * sysfile.h (PATHNAME_CONVERT_OUT_TSTR): * sysfile.h (PATHNAME_CONVERT_OUT_UTF_8): * sysfile.h (PATHNAME_CONVERT_OUT): * sysfile.h (LISP_PATHNAME_CONVERT_OUT): * syswindows.h (ITEXT_TO_TSTR): * syswindows.h (LOCAL_FILE_FORMAT_TO_TSTR): * syswindows.h (TSTR_TO_LOCAL_FILE_FORMAT): * syswindows.h (LOCAL_FILE_FORMAT_TO_INTERNAL_MSWIN): * syswindows.h (LISP_LOCAL_FILE_FORMAT_MAYBE_URL_TO_TSTR): * text.h: * text.h (eicpy_ext_len): * text.h (enum new_dfc_src_type): * text.h (EXTERNAL_TO_ITEXT): * text.h (GET_STRERROR): * tooltalk.c (check_status): * tooltalk.c (Fadd_tooltalk_message_arg): * tooltalk.c (Fadd_tooltalk_pattern_attribute): * tooltalk.c (Fadd_tooltalk_pattern_arg): * win32.c (tstr_to_local_file_format): * win32.c (mswindows_lisp_error_1): * win32.c (mswindows_report_process_error): * win32.c (Fmswindows_shell_execute): * win32.c (mswindows_read_link_1): Changes involving external/internal format conversion, mostly code cleanup and renaming. 1. Eliminate the previous macros like LISP_STRING_TO_EXTERNAL that stored its result in a parameter. The new version of LISP_STRING_TO_EXTERNAL returns its result through the return value, same as the previous NEW_LISP_STRING_TO_EXTERNAL. Use the new-style macros throughout the code. 2. Rename C_STRING_TO_EXTERNAL and friends to ITEXT_TO_EXTERNAL, in keeping with overall naming rationalization involving Itext and related types. Macros involved in previous two: EXTERNAL_TO_C_STRING -> EXTERNAL_TO_ITEXT EXTERNAL_TO_C_STRING_MALLOC -> EXTERNAL_TO_ITEXT_MALLOC SIZED_EXTERNAL_TO_C_STRING -> SIZED_EXTERNAL_TO_ITEXT SIZED_EXTERNAL_TO_C_STRING_MALLOC -> SIZED_EXTERNAL_TO_ITEXT_MALLOC C_STRING_TO_EXTERNAL -> ITEXT_TO_EXTERNAL C_STRING_TO_EXTERNAL_MALLOC -> ITEXT_TO_EXTERNAL_MALLOC LISP_STRING_TO_EXTERNAL LISP_STRING_TO_EXTERNAL_MALLOC LISP_STRING_TO_TSTR C_STRING_TO_TSTR -> ITEXT_TO_TSTR TSTR_TO_C_STRING -> TSTR_TO_ITEXT The following four still return their values through parameters, since they have more than one value to return: C_STRING_TO_SIZED_EXTERNAL -> ITEXT_TO_SIZED_EXTERNAL LISP_STRING_TO_SIZED_EXTERNAL C_STRING_TO_SIZED_EXTERNAL_MALLOC -> ITEXT_TO_SIZED_EXTERNAL_MALLOC LISP_STRING_TO_SIZED_EXTERNAL_MALLOC Sometimes additional casts had to be inserted, since the old macros played strange games and completely defeated the type system of the store params. 3. Rewrite many places where direct calls to TO_EXTERNAL_FORMAT occurred with calls to one of the convenience macros listed above, or to make_extstring(). 4. Eliminate SIZED_C_STRING macros (they were hardly used, anyway) and use a direct call to TO_EXTERNAL_FORMAT or TO_INTERNAL_FORMAT. 4. Use LISP_PATHNAME_CONVERT_OUT in many places instead of something like LISP_STRING_TO_EXTERNAL(..., Qfile_name). 5. Eliminate some temporary variables that are no longer necessary now that we return a value rather than storing it into a variable. 6. Some Mule-izing in database.c. 7. Error functions: -- A bit of code cleanup in maybe_signal_error_1. -- Eliminate report_file_type_error; it's just an alias for signal_error_2 with params in a different order. -- Fix some places in the hostname-handling code that directly inserted externally-retrieved error strings into the supposed ASCII "reason" param instead of doing the right thing and sticking text descriptive of what was going on in "reason" and putting the external message in a frob. 8. Use Ascbyte instead of CIbyte in process-unix.c and maybe one or two other places. 9. Some code cleanup in copy_in_passwd() in sysdep.c. 10. Fix a real bug due to accidental variable shadowing in tstr_to_local_file_format() in win32.c.
author Ben Wing <ben@xemacs.org>
date Fri, 05 Feb 2010 11:02:24 -0600
parents 189fb67ca31a
children 0f66906b6e37
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
1 ;; Copyright (C) 1999 Free Software Foundation, Inc.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
2
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
3 ;; Author: Hrvoje Niksic <hniksic@srce.hr>
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
4 ;; Maintainer: Hrvoje Niksic <hniksic@srce.hr>
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
5 ;; Created: 1999
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
6 ;; Keywords: tests
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
7
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
8 ;; This file is part of XEmacs.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
9
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
10 ;; XEmacs is free software; you can redistribute it and/or modify it
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
11 ;; under the terms of the GNU General Public License as published by
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
13 ;; any later version.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
14
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
15 ;; XEmacs is distributed in the hope that it will be useful, but
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
16 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
18 ;; General Public License for more details.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
19
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
21 ;; along with XEmacs; see the file COPYING. If not, write to the Free
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
22 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
23 ;; 02111-1307, USA.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
24
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
25 ;;; Synched up with: Not in FSF.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
26
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
27 ;;; Commentary:
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
28
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
29 ;; Test base64 functions.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
30 ;; See test-harness.el for instructions on how to run these tests.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
31
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
32 (eval-when-compile
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
33 (condition-case nil
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
34 (require 'test-harness)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
35 (file-error
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
36 (push "." load-path)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
37 (when (and (boundp 'load-file-name) (stringp load-file-name))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
38 (push (file-name-directory load-file-name) load-path))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
39 (require 'test-harness))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
40
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
41 ;; We need to test the buffer and string functions. We do it by
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
42 ;; testing them in various circumstances, asserting the same result,
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
43 ;; and returning that result.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
44
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
45 (defvar bt-test-buffer (get-buffer-create " *base64-workhorse*"))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
46
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
47 (defun bt-base64-encode-string (string &optional no-line-break)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
48 (let ((string-result (base64-encode-string string no-line-break))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
49 length)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
50 (with-current-buffer bt-test-buffer
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
51 ;; the whole buffer
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
52 (erase-buffer)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
53 (insert string)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
54 (setq length (base64-encode-region (point-min) (point-max) no-line-break))
4855
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
55 (Assert-eq length (- (point-max) (point-min)))
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
56 (Assert-equal (buffer-string) string-result)
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
57 ;; partial
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
58 (erase-buffer)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
59 (insert "random junk........\0\0';'eqwrkw[erpqf")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
60 (let ((p1 (point)) p2)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
61 (insert string)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
62 (setq p2 (point-marker))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
63 (insert "...more random junk.q,f3/.qrm314.r,m2typ' 2436T@W$^@$#^T@")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
64 (setq length (base64-encode-region p1 p2 no-line-break))
4855
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
65 (Assert-eq length (- p2 p1))
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
66 (Assert-equal (buffer-substring p1 p2) string-result)))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
67 string-result))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
68
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
69 (defun bt-base64-decode-string (string)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
70 (let ((string-result (base64-decode-string string))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
71 length)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
72 (with-current-buffer bt-test-buffer
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
73 ;; the whole buffer
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
74 (erase-buffer)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
75 (insert string)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
76 (setq length (base64-decode-region (point-min) (point-max)))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
77 (cond (string-result
4855
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
78 (Assert-eq length (- (point-max) (point-min)))
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
79 (Assert-equal (buffer-string) string-result))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
80 (t
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
81 (Assert (null length))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
82 ;; The buffer should not have been modified.
4855
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
83 (Assert-equal (buffer-string) string)))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
84 ;; partial
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
85 (erase-buffer)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
86 (insert "random junk........\0\0';'eqwrkw[erpqf")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
87 (let ((p1 (point)) p2)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
88 (insert string)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
89 (setq p2 (point-marker))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
90 (insert "...more random junk.q,f3/.qrm314.\0\0r,m2typ' 2436T@W$^@$#T@")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
91 (setq length (base64-decode-region p1 p2))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
92 (cond (string-result
4855
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
93 (Assert-eq length (- p2 p1))
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
94 (Assert-equal (buffer-substring p1 p2) string-result))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
95 (t
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
96 (Assert (null length))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
97 ;; The buffer should not have been modified.
4855
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
98 (Assert-equal (buffer-substring p1 p2) string)))))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
99 string-result))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
100
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
101 (defun bt-remove-newlines (str)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
102 (apply #'string (delete ?\n (mapcar #'identity str))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
103
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
104 (defconst bt-allchars
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
105 (let ((str (make-string 256 ?\0)))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
106 (dotimes (i 256)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
107 (aset str i (int-char i)))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
108 str))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
109
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
110 (defconst bt-test-strings
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
111 `(("" "")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
112 ("foo" "Zm9v")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
113 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
114 "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAx
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
115 MjM0NTY3ODk=")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
116 (,bt-allchars
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
117 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
118 Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWpr
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
119 bG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6Ch
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
120 oqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
121 2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
122 ))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
123
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
124 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
125 ;; Encoding base64
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
126 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
127
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
128 (loop for (raw encoded) in bt-test-strings do
4855
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
129 (Assert-equal (bt-base64-encode-string raw) encoded)
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
130 ;; test the NO-LINE-BREAK flag
4855
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
131 (Assert-equal (bt-base64-encode-string raw t) (bt-remove-newlines encoded)))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
132
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
133 ;; When Mule is around, Lisp programmers should make sure that the
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
134 ;; buffer contains only characters whose `char-int' is in the [0, 256)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
135 ;; range. If this condition is not satisfied for any character, an
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
136 ;; error is signaled.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
137 (when (featurep 'mule)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
138 ;; #### remove subtraction of 128 -- no longer needed with make-char
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
139 ;; patch!
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
140 (let* ((mule-string (format "Hrvoje Nik%ci%c"
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
141 ;; scaron == 185 in Latin 2
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
142 (make-char 'latin-iso8859-2 (- 185 128))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
143 ;; cacute == 230 in Latin 2
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
144 (make-char 'latin-iso8859-2 (- 230 128)))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
145 (Check-Error-Message error "Non-ascii character in base64 input"
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
146 (bt-base64-encode-string mule-string))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
147
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
148 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
149 ;; Decoding base64
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
150 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
151
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
152 (loop for (raw encoded) in bt-test-strings do
4855
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
153 (Assert-equal (bt-base64-decode-string encoded) raw)
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
154 (Assert-equal (bt-base64-decode-string (bt-remove-newlines encoded)) raw))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
155
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
156 ;; Test errors
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
157 (dolist (str `("foo" "AAC" "foo\0bar" "====" "Zm=9v" ,bt-allchars))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
158 (Check-Error error (base64-decode-string str)))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
159
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
160 ;; base64-decode-string should ignore non-base64 characters anywhere
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
161 ;; in the string. We test this in the cheesiest manner possible, by
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
162 ;; inserting non-base64 chars at the beginning, at the end, and in the
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
163 ;; middle of the string.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
164
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
165 (defconst bt-base64-chars '(?A ?B ?C ?D ?E ?F ?G ?H ?I ?J
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
166 ;; sometimes I hate Emacs indentation.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
167 ?K ?L ?M ?N ?O ?P ?Q ?R ?S ?T
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
168 ?U ?V ?W ?X ?Y ?Z ?a ?b ?c ?d
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
169 ?e ?f ?g ?h ?i ?j ?k ?l ?m ?n
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
170 ?o ?p ?q ?r ?s ?t ?u ?v ?w ?x
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
171 ?y ?z ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
172 ?8 ?9 ?+ ?/ ?=))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
173
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
174 (defconst bt-nonbase64-chars (set-difference (mapcar #'identity bt-allchars)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
175 bt-base64-chars))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
176
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
177 (loop for (raw encoded) in bt-test-strings do
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
178 (unless (equal raw "")
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
179 (let* ((middlepos (/ (1+ (length encoded)) 2))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
180 (left (substring encoded 0 middlepos))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
181 (right (substring encoded middlepos)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
182 ;; Whitespace at the beginning, end, and middle.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
183 (let ((mangled (concat bt-nonbase64-chars left bt-nonbase64-chars right
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
184 bt-nonbase64-chars)))
4855
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
185 (Assert-equal (bt-base64-decode-string mangled) raw))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
186
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
187 ;; Whitespace between every char.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
188 (let ((mangled (concat bt-nonbase64-chars
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
189 ;; ENCODED with bt-nonbase64-chars
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
190 ;; between every character.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
191 (mapconcat #'char-to-string encoded
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
192 (apply #'string bt-nonbase64-chars))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
193 bt-nonbase64-chars)))
4855
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
194 (Assert-equal (bt-base64-decode-string mangled) raw)))))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
195
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
196 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
197 ;; Mixed...
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
198 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
199
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
200 ;; The whole point of base64 is to ensure that an arbitrary sequence
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
201 ;; of bytes passes through gateway hellfire unscathed, protected by
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
202 ;; the asbestos suit of base64. Here we test that
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
203 ;; (base64-decode-string (base64-decode-string FOO)) equals FOO for
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
204 ;; any FOO we can think of. The following stunts stress-test
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
205 ;; practically all aspects of the encoding and decoding process.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
206
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
207 (loop for (raw ignored) in bt-test-strings do
4855
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
208 (Assert-equal (bt-base64-decode-string
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
209 (bt-base64-encode-string raw))
4855
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
210 raw)
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
211 (Assert-equal (bt-base64-decode-string
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
212 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
213 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
214 (bt-base64-encode-string raw))))
4855
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
215 raw)
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
216 (Assert-equal (bt-base64-decode-string
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
217 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
218 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
219 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
220 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
221 (bt-base64-encode-string raw))))))
4855
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
222 raw)
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
223 (Assert-equal (bt-base64-decode-string
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
224 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
225 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
226 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
227 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
228 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
229 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
230 (bt-base64-encode-string raw))))))))
4855
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
231 raw)
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
232 (Assert-equal (bt-base64-decode-string
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
233 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
234 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
235 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
236 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
237 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
238 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
239 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
240 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
241 (bt-base64-encode-string raw))))))))))
4855
189fb67ca31a Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents: 442
diff changeset
242 raw))