mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	We now use a Proxy to wrap zjquery elements, so that we can detect callers trying to invoke methods (or access attributes) that do not exist. We try to give useful error messages in those cases. The main impact here is that we force lots of tests to explicitly stub `length`. Also, we can't do equality checks on zjquery objects any more due to the proxy object, but the easy workaround is to compare selectors. (This is generally an unnecessary technique, anyway.) The proxy wrapper is fairly straightforward, and we just have a few special cases for things like "inspect" that happen when you try to print out objects.
		
			
				
	
	
		
			168 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						|
    This test suite is designed to find errors
 | 
						|
    in our initialization sequence.  It doesn't
 | 
						|
    really validate any behavior, other than just
 | 
						|
    making sure things don't fail.  For more
 | 
						|
    directed testing of individual modules, you
 | 
						|
    should create dedicated test suites.
 | 
						|
 | 
						|
    Also, we stub a lot of initialization here that
 | 
						|
    is tricky to test due to dependencies on things
 | 
						|
    like jQuery.  A good project is to work through
 | 
						|
    ignore_modules and try to make this test more
 | 
						|
    complete.
 | 
						|
 | 
						|
    Also, it's good to be alert here for things
 | 
						|
    that can be cleaned up in the code--for example,
 | 
						|
    not everything needs to happen in `initialization`--
 | 
						|
    some things can happen later in a `launch` method.
 | 
						|
 | 
						|
*/
 | 
						|
set_global('i18n', global.stub_i18n);
 | 
						|
set_global('document', {
 | 
						|
    location: {
 | 
						|
        protocol: 'http',
 | 
						|
    },
 | 
						|
});
 | 
						|
 | 
						|
global.patch_builtin('window', {});
 | 
						|
 | 
						|
set_global('csrf_token', 'whatever');
 | 
						|
 | 
						|
set_global('$', () => {});
 | 
						|
set_global('resize', {});
 | 
						|
set_global('feature_flags', {});
 | 
						|
set_global('page_params', {});
 | 
						|
set_global('templates', {});
 | 
						|
 | 
						|
const ignore_modules = [
 | 
						|
    'activity',
 | 
						|
    'click_handlers',
 | 
						|
    'compose_pm_pill',
 | 
						|
    'copy_and_paste',
 | 
						|
    'drafts',
 | 
						|
    'emoji',
 | 
						|
    'emoji_picker',
 | 
						|
    'gear_menu',
 | 
						|
    'hashchange',
 | 
						|
    'hotspots',
 | 
						|
    'message_scroll',
 | 
						|
    'message_viewport',
 | 
						|
    'night_mode',
 | 
						|
    'panels',
 | 
						|
    'popovers',
 | 
						|
    'reload',
 | 
						|
    'scroll_bar',
 | 
						|
    'server_events',
 | 
						|
    'settings_sections',
 | 
						|
    'settings_panel_menu',
 | 
						|
    'settings_toggle',
 | 
						|
    'subs',
 | 
						|
    'timerender',
 | 
						|
    'ui',
 | 
						|
    'unread_ui',
 | 
						|
];
 | 
						|
 | 
						|
_.each(ignore_modules, (mod) => {
 | 
						|
    set_global(mod, {
 | 
						|
        initialize: () => {},
 | 
						|
    });
 | 
						|
});
 | 
						|
 | 
						|
 | 
						|
zrequire('util');
 | 
						|
 | 
						|
util.is_mobile = () => false;
 | 
						|
templates.render = () => 'some-html';
 | 
						|
ui.get_scroll_element = element => element;
 | 
						|
 | 
						|
zrequire('echo');
 | 
						|
zrequire('colorspace');
 | 
						|
zrequire('stream_color');
 | 
						|
zrequire('stream_edit');
 | 
						|
zrequire('color_data');
 | 
						|
zrequire('stream_data');
 | 
						|
zrequire('muting');
 | 
						|
zrequire('condense');
 | 
						|
zrequire('lightbox');
 | 
						|
zrequire('overlays');
 | 
						|
zrequire('invite');
 | 
						|
zrequire('tab_bar');
 | 
						|
zrequire('narrow_state');
 | 
						|
zrequire('people');
 | 
						|
zrequire('search_pill_widget');
 | 
						|
zrequire('user_groups');
 | 
						|
zrequire('unread');
 | 
						|
zrequire('bot_data');
 | 
						|
zrequire('message_fetch');
 | 
						|
zrequire('marked', 'third/marked/lib/marked');
 | 
						|
zrequire('fenced_code');
 | 
						|
zrequire('markdown');
 | 
						|
zrequire('upload');
 | 
						|
zrequire('compose');
 | 
						|
zrequire('composebox_typeahead');
 | 
						|
zrequire('narrow');
 | 
						|
zrequire('search');
 | 
						|
zrequire('tutorial');
 | 
						|
zrequire('notifications');
 | 
						|
zrequire('pointer');
 | 
						|
zrequire('compose_fade');
 | 
						|
zrequire('pm_list');
 | 
						|
zrequire('list_cursor');
 | 
						|
zrequire('keydown_util');
 | 
						|
zrequire('stream_sort');
 | 
						|
zrequire('stream_list');
 | 
						|
zrequire('topic_list');
 | 
						|
zrequire('topic_zoom');
 | 
						|
zrequire('sent_messages');
 | 
						|
zrequire('typing');
 | 
						|
zrequire('top_left_corner');
 | 
						|
zrequire('starred_messages');
 | 
						|
zrequire('user_status');
 | 
						|
zrequire('user_status_ui');
 | 
						|
zrequire('ui_init');
 | 
						|
 | 
						|
set_global('$', global.make_zjquery());
 | 
						|
 | 
						|
const document_stub = $.create('document-stub');
 | 
						|
document.to_$ = () => document_stub;
 | 
						|
document_stub.on = () => {};
 | 
						|
document_stub.idle = () => {};
 | 
						|
 | 
						|
const window_stub = $.create('window-stub');
 | 
						|
window.to_$ = () => window_stub;
 | 
						|
window_stub.idle = () => {};
 | 
						|
 | 
						|
ui_init.initialize_kitchen_sink_stuff = () => {};
 | 
						|
 | 
						|
page_params.realm_default_streams = [];
 | 
						|
page_params.subscriptions = [];
 | 
						|
page_params.unsubscribed = [];
 | 
						|
page_params.never_subscribed = [];
 | 
						|
page_params.realm_notifications_stream_id = -1;
 | 
						|
 | 
						|
$('#tab_bar').append = () => {};
 | 
						|
$('#compose').filedrop = () => {};
 | 
						|
 | 
						|
server_events.home_view_loaded = () => true;
 | 
						|
 | 
						|
resize.watch_manual_resize = () => {};
 | 
						|
 | 
						|
$("#stream_message_recipient_stream").typeahead = () => {};
 | 
						|
$("#stream_message_recipient_topic").typeahead = () => {};
 | 
						|
$("#private_message_recipient").typeahead = () => {};
 | 
						|
$("#compose-textarea").typeahead = () => {};
 | 
						|
$("#search_query").typeahead = () => {};
 | 
						|
 | 
						|
 | 
						|
const value_stub = $.create('value');
 | 
						|
const count_stub = $.create('count');
 | 
						|
count_stub.set_find_results('.value', value_stub);
 | 
						|
$(".top_left_starred_messages").set_find_results('.count', count_stub);
 | 
						|
 | 
						|
$("#tab_list .stream").length = 0;
 | 
						|
 | 
						|
run_test('initialize_everything', () => {
 | 
						|
    ui_init.initialize_everything();
 | 
						|
});
 |