test-suite/lib/test_hlp.js
changeset 624 3dd70d01cec2
child 625 eb52900a0bbf
equal deleted inserted replaced
623:09640f41fed1 624:3dd70d01cec2
       
     1 // Test helpers for karma-e2e-dsl environment
       
     2 //	
       
     3 // https://github.com/winsonwq/karma-e2e-dsl
       
     4 
       
     5 
       
     6 exports.page_loading = function (url, title) {
       
     7 	test (url+' loads', dsl(function () {
       
     8 		// here we are in Karma page
       
     9 		browser.navigateTo (url);
       
    10 		expect (element ('title').text ()).toMatch (new RegExp (title,'m'));
       
    11 		// The same test agin vaniller javascript
       
    12 		element ('title').text (function (page_title) {
       
    13 			// here we got a value from the test iframe
       
    14 			// to display the tested value : console.log (page_title);
       
    15 			if (!(new RegExp (title, 'm').test (page_title))) throw 'got page '+page_title+' instead';
       
    16 		});
       
    17 	}));
       
    18 }
       
    19 
       
    20 /** Test if it's possible to change lang to the specified :
       
    21  *	c : lang code
       
    22  *	l : help label
       
    23  */
       
    24 exports.i18n = function (c, l) {
       
    25 	test ('to '+c, dsl(function () {
       
    26 		element ('#footer a[href="/i18n/setlang/'+c+'/"]').click ();
       
    27 		browser.navigateTo ('/');
       
    28 		expect (test_.elt ('#footer a[href="/help/"]').text ()).toMatch (new RegExp (l, 'm'));
       
    29 	}));
       
    30 }
       
    31 
       
    32 /** Test if the selected DOM element is defined or has a given value : .val()
       
    33  *	s : CSS selector
       
    34  *	e : expected value, if omited, test existence
       
    35  */
       
    36 exports.val = function (s, e) {
       
    37 	e = typeof e == 'undefined' ? '' : e; // .val() returns defined ? '' : undefined; // if no value
       
    38 	test (s+' is '+e, dsl(function () {
       
    39 		expect (test_.elt (s).val ()).toMatch (new RegExp (e, 'm'));
       
    40 	}));
       
    41 }
       
    42 
       
    43 exports.exist = function (s) {
       
    44 	test_.val (s);
       
    45 }
       
    46 
       
    47 /** Test if the selected DOM element has the given text : .text()
       
    48  *	s : CSS selector
       
    49  *	e : expected value
       
    50  *	v : should we test a visible value ?
       
    51  */
       
    52 exports.text = function (s, e, v) {
       
    53 	v = typeof v == 'undefined' ? true : v;
       
    54 	test (s+' has text '+e, dsl(function () {
       
    55 		expect (test_.elt (s, v).text ()).toBe (e);
       
    56 	}));
       
    57 }
       
    58 
       
    59 /** Test if the selected DOM element .text() value match the given regexp
       
    60  *	s : CSS selector
       
    61  *	r : regexp to match
       
    62  */
       
    63 exports.match = function (s, r) {
       
    64 	test (s+' text match '+r, dsl(function () {
       
    65 		expect (test_.elt (s).text ()).toMatch (r);
       
    66 	}));
       
    67 }
       
    68 
       
    69 /** Count selector occurences
       
    70  *	s : CSS selector
       
    71  *	e : expected count
       
    72  */
       
    73 exports.count = function (s, e) {
       
    74 	test (s+' count is '+e, dsl(function () {
       
    75 		expect (test_.elt (s).count ()).toBe (e);
       
    76 	}));
       
    77 }
       
    78 
       
    79 /** Test Django form field presence
       
    80  */
       
    81 exports.field = function (form_id, field_id, type, position, label, mandatory) {
       
    82 	test ('has a '+label+' form field', dsl(function () {
       
    83 		var s = '';
       
    84 
       
    85 		switch (type) {
       
    86 			case 'textarea':s = 'textarea#'+field_id; break;
       
    87 			case 'select':	s = 'select#'+field_id; break;
       
    88 			default:		s = 'input#'+field_id+'[type="'+type+'"]';
       
    89 		}
       
    90 
       
    91 		expect (test_.elt (s).val ()).toBeDefined ();
       
    92 		expect (test_.elt ('#'+form_id+' :input:eq('+position+')#'+field_id).val ()).toBeDefined ();
       
    93 		expect (test_.elt ('label[for='+field_id+']').text ()).toBe (label);
       
    94 
       
    95 		if (mandatory)
       
    96 			expect (test_.elt ('label[for='+field_id+'] + span.required_star').val ()).toBeDefined ();
       
    97 	}));
       
    98 }
       
    99 
       
   100 /**
       
   101  * Fill form field
       
   102  * s : form field id
       
   103  * v : array containing the value to use
       
   104  */
       
   105 exports.fill_field = function (s, v) {
       
   106 	test ('set '+s, dsl(function () {
       
   107 		input (s).enter (v[s]);
       
   108 	}));
       
   109 }
       
   110 
       
   111 /**
       
   112  * Submit a form
       
   113  * s : selector of the submit button
       
   114  */
       
   115 exports.submit = function (s) {
       
   116 	test ('submit '+s, dsl(function () {
       
   117 		test_.elt (s).click ();
       
   118 		browser.waitForPageLoad ();
       
   119 	}));
       
   120 }
       
   121 
       
   122 /**
       
   123  * Fails a test
       
   124  */
       
   125 exports.fail = function () {
       
   126 	test ('must fail', dsl(function () {
       
   127 		throw 'have been programmed to fail now';
       
   128 	}));
       
   129 }
       
   130 
       
   131 /**
       
   132  * Inbrowser debugger statement
       
   133  */
       
   134 exports.debug = function () {
       
   135 	test ('debugger', dsl(function (){
       
   136 		debugger; // not seen to work
       
   137 	}));
       
   138 }
       
   139 
       
   140 /**
       
   141  * Have the browser waiting
       
   142  */
       
   143 exports.pause = function () {
       
   144 	test ('pause', dsl(function () {
       
   145 		browser.pause ();
       
   146 	}));
       
   147 }
       
   148 
       
   149 /**
       
   150  * Start back the testcases
       
   151  */
       
   152 exports.resume = function () {
       
   153 	test ('resume', dsl(function (){
       
   154 		browser.resume ();
       
   155 	}));
       
   156 }
       
   157 
       
   158 /** Ensure the given element is visible
       
   159  *	s : CSS selector of the DOM element to check
       
   160  *	v : should the element being visible
       
   161  */
       
   162 exports.elt = function (s, v) {
       
   163 	return element (s + (v ? ':visible' : ''));
       
   164 }
       
   165 
       
   166 /** Revive functions after a JSON.stringify which prevented their disappearence
       
   167  * k : key in the object to revive functions in
       
   168  * v : value
       
   169  * 
       
   170  * We keep only the string of the body part in order to use it to define a new function in tests files
       
   171  * /!\ do NEVER minify this code ! /!\
       
   172  *
       
   173  */
       
   174 exports.reviveFunc = multilineString (function (k, v) {
       
   175 /*!	if (v && typeof v === 'string' && v.substr (0, 8) == 'function') { 
       
   176 		var a = v.indexOf ('{') + 1, // start function body 
       
   177 		b = v.lastIndexOf ('}'),	
       
   178 		c = v.indexOf ('(') + 1,	 // start args 
       
   179 		d = v.indexOf (')');		
       
   180 		return new Function (v.substring (c, d), v.substring (a, b)); 
       
   181 	}
       
   182 
       
   183 	return v;*/
       
   184 });
       
   185 
       
   186 function multilineString (f) { return f.toString().replace(/^[^\/]+\/\*!?/, '').replace(/\*\/[^\/]+$/, ''); }