mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	This run_test helper sets up a convention that allows us to give really short tracebacks for errors, and eventually we can have more control over running individual tests. (The latter goal has some complications, since we often intentionally leak setup in tests.)
		
			
				
	
	
		
			180 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
set_global('$', global.make_zjquery());
 | 
						|
zrequire('input_pill');
 | 
						|
 | 
						|
zrequire('Handlebars', 'handlebars');
 | 
						|
zrequire('templates');
 | 
						|
global.compile_template('input_pill');
 | 
						|
 | 
						|
set_global('blueslip', global.make_zblueslip());
 | 
						|
 | 
						|
var noop = function () {};
 | 
						|
 | 
						|
set_global('ui_util', {
 | 
						|
    place_caret_at_end: noop,
 | 
						|
});
 | 
						|
 | 
						|
var id_seq = 0;
 | 
						|
 | 
						|
(function set_up_ids() {
 | 
						|
    // just get coverage on a simple one-liner:
 | 
						|
    input_pill.random_id();
 | 
						|
 | 
						|
    input_pill.random_id = function () {
 | 
						|
        id_seq += 1;
 | 
						|
        return 'some_id' + id_seq;
 | 
						|
    };
 | 
						|
}());
 | 
						|
 | 
						|
 | 
						|
function pill_html(value, data_id) {
 | 
						|
    var opts = {
 | 
						|
        id: data_id,
 | 
						|
        display_value: value,
 | 
						|
    };
 | 
						|
 | 
						|
    return templates.render('input_pill', opts);
 | 
						|
}
 | 
						|
 | 
						|
run_test('basics', () => {
 | 
						|
    var config = {};
 | 
						|
 | 
						|
    blueslip.set_test_data('error', 'Pill needs container.');
 | 
						|
    input_pill.create(config);
 | 
						|
    assert.equal(blueslip.get_test_logs('error').length, 1);
 | 
						|
    blueslip.clear_test_data();
 | 
						|
 | 
						|
    var pill_input = $.create('pill_input');
 | 
						|
    var container = $.create('container');
 | 
						|
    container.set_find_results('.input', pill_input);
 | 
						|
 | 
						|
    blueslip.set_test_data('error', 'Pill needs create_item_from_text');
 | 
						|
    config.container = container;
 | 
						|
    input_pill.create(config);
 | 
						|
    assert.equal(blueslip.get_test_logs('error').length, 1);
 | 
						|
    blueslip.clear_test_data();
 | 
						|
 | 
						|
    blueslip.set_test_data('error', 'Pill needs get_text_from_item');
 | 
						|
    config.create_item_from_text = noop;
 | 
						|
    input_pill.create(config);
 | 
						|
    assert.equal(blueslip.get_test_logs('error').length, 1);
 | 
						|
    blueslip.clear_test_data();
 | 
						|
 | 
						|
    config.get_text_from_item = noop;
 | 
						|
    var widget = input_pill.create(config);
 | 
						|
 | 
						|
    var item = {
 | 
						|
        display_value: 'JavaScript',
 | 
						|
        language: 'js',
 | 
						|
    };
 | 
						|
 | 
						|
    var inserted_before;
 | 
						|
    var expected_html = pill_html('JavaScript', 'some_id1');
 | 
						|
 | 
						|
    pill_input.before = function (elem) {
 | 
						|
        inserted_before = true;
 | 
						|
        assert.equal(elem.html(), expected_html);
 | 
						|
    };
 | 
						|
 | 
						|
    widget.appendValidatedData(item);
 | 
						|
    assert(inserted_before);
 | 
						|
 | 
						|
    assert.deepEqual(widget.items(), [item]);
 | 
						|
});
 | 
						|
 | 
						|
run_test('insert_remove', () => {
 | 
						|
    set_global('$', global.make_zjquery());
 | 
						|
    var items = {
 | 
						|
        blue: {
 | 
						|
            display_value: 'BLUE',
 | 
						|
            description: 'color of the sky',
 | 
						|
        },
 | 
						|
 | 
						|
        red: {
 | 
						|
            display_value: 'RED',
 | 
						|
            description: 'color of stop signs',
 | 
						|
        },
 | 
						|
 | 
						|
        yellow: {
 | 
						|
            display_value: 'YELLOW',
 | 
						|
            description: 'color of bananas',
 | 
						|
        },
 | 
						|
    };
 | 
						|
 | 
						|
    var pill_input = $.create('pill_input');
 | 
						|
 | 
						|
    var inserted_html = [];
 | 
						|
    pill_input.before = function (elem) {
 | 
						|
        inserted_html.push(elem.html());
 | 
						|
    };
 | 
						|
 | 
						|
    var create_item_from_text = function (text) {
 | 
						|
        return items[text];
 | 
						|
    };
 | 
						|
 | 
						|
    var container = $.create('container');
 | 
						|
    container.set_find_results('.input', pill_input);
 | 
						|
 | 
						|
    var config = {
 | 
						|
        container: container,
 | 
						|
        create_item_from_text: create_item_from_text,
 | 
						|
        get_text_from_item: noop,
 | 
						|
    };
 | 
						|
 | 
						|
    id_seq = 0;
 | 
						|
 | 
						|
 | 
						|
    // FINALLY CREATE THE WIDGET!!
 | 
						|
    var widget = input_pill.create(config);
 | 
						|
 | 
						|
    var created;
 | 
						|
    var removed;
 | 
						|
 | 
						|
    widget.onPillCreate(function () {
 | 
						|
        created = true;
 | 
						|
    });
 | 
						|
 | 
						|
    widget.onPillRemove(function () {
 | 
						|
        removed = true;
 | 
						|
    });
 | 
						|
 | 
						|
    widget.appendValue('blue,chartreuse,red,yellow,mauve');
 | 
						|
 | 
						|
    assert(created);
 | 
						|
    assert(!removed);
 | 
						|
 | 
						|
    assert.deepEqual(inserted_html, [
 | 
						|
        pill_html('BLUE', 'some_id1'),
 | 
						|
        pill_html('RED', 'some_id2'),
 | 
						|
        pill_html('YELLOW', 'some_id3'),
 | 
						|
    ]);
 | 
						|
 | 
						|
    assert.deepEqual(widget.items(), [
 | 
						|
        items.blue,
 | 
						|
        items.red,
 | 
						|
        items.yellow,
 | 
						|
    ]);
 | 
						|
 | 
						|
    assert.equal(pill_input.text(), 'chartreuse, mauve');
 | 
						|
 | 
						|
    widget.clear_text();
 | 
						|
    assert.equal(pill_input.text(), '');
 | 
						|
 | 
						|
    var BACKSPACE = 8;
 | 
						|
    var key_handler = container.get_on_handler('keydown', '.input');
 | 
						|
 | 
						|
    key_handler({
 | 
						|
        keyCode: BACKSPACE,
 | 
						|
        target: {
 | 
						|
            innerText: '',
 | 
						|
        },
 | 
						|
        preventDefault: noop,
 | 
						|
    });
 | 
						|
 | 
						|
    assert(removed);
 | 
						|
 | 
						|
    assert.deepEqual(widget.items(), [
 | 
						|
        items.blue,
 | 
						|
        items.red,
 | 
						|
    ]);
 | 
						|
});
 |