| 
									
										
										
										
											2015-11-04 12:37:25 -08:00
										 |  |  | /* eslint-disable no-undef, no-unused-vars, no-native-reassign */ | 
					
						
							| 
									
										
										
										
											2015-11-30 14:27:39 -08:00
										 |  |  | // the $ on the iframe window object is the same
 | 
					
						
							|  |  |  | // as the one used on the main site, but
 | 
					
						
							|  |  |  | // uses the iframe document as the context
 | 
					
						
							|  |  |  | window.$(document).ready(function() { | 
					
						
							| 
									
										
										
										
											2015-11-13 11:10:23 -08:00
										 |  |  |   var _ = parent._; | 
					
						
							| 
									
										
										
										
											2015-11-22 19:42:53 -08:00
										 |  |  |   var Rx = parent.Rx; | 
					
						
							| 
									
										
										
										
											2015-11-13 11:10:23 -08:00
										 |  |  |   var chai = parent.chai; | 
					
						
							| 
									
										
										
										
											2015-11-22 19:42:53 -08:00
										 |  |  |   var assert = chai.assert; | 
					
						
							| 
									
										
										
										
											2015-05-28 08:26:25 -04:00
										 |  |  |   var tests = parent.tests; | 
					
						
							| 
									
										
										
										
											2015-11-13 11:10:23 -08:00
										 |  |  |   var common = parent.common; | 
					
						
							| 
									
										
										
										
											2015-11-30 14:27:39 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   common.getJsOutput = function evalJs(code = '') { | 
					
						
							| 
									
										
										
										
											2015-12-03 15:09:52 -08:00
										 |  |  |     if (window.__err || !common.shouldRun()) { | 
					
						
							|  |  |  |       return window.__err || 'code disabled'; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-11-30 14:27:39 -08:00
										 |  |  |     let output; | 
					
						
							|  |  |  |     try { | 
					
						
							|  |  |  |       /* eslint-disable no-eval */ | 
					
						
							|  |  |  |       output = eval(code); | 
					
						
							|  |  |  |       /* eslint-enable no-eval */ | 
					
						
							|  |  |  |     } catch (e) { | 
					
						
							|  |  |  |       window.__err = e; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return output; | 
					
						
							|  |  |  |   }; | 
					
						
							| 
									
										
										
										
											2015-05-28 08:26:25 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-22 19:42:53 -08:00
										 |  |  |   common.runPreviewTests$ = | 
					
						
							| 
									
										
										
										
											2015-11-30 14:27:39 -08:00
										 |  |  |     function runPreviewTests$({ | 
					
						
							|  |  |  |     tests = [], | 
					
						
							|  |  |  |     originalCode, | 
					
						
							|  |  |  |     ...rest | 
					
						
							|  |  |  |   }) { | 
					
						
							|  |  |  |       const code = originalCode; | 
					
						
							|  |  |  |       const editor = { getValue() { return originalCode; } }; | 
					
						
							|  |  |  |       if (window.__err) { | 
					
						
							|  |  |  |         return Rx.Observable.throw(window.__err); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-02 14:56:06 -08:00
										 |  |  |       // Iterate throught the test one at a time
 | 
					
						
							|  |  |  |       // on new stacks
 | 
					
						
							| 
									
										
										
										
											2015-12-02 11:19:15 -08:00
										 |  |  |       return Rx.Observable.from(tests, null, null, Rx.Scheduler.default) | 
					
						
							| 
									
										
										
										
											2015-12-02 14:56:06 -08:00
										 |  |  |         // add delay here for firefox to catch up
 | 
					
						
							| 
									
										
										
										
											2015-12-02 11:19:15 -08:00
										 |  |  |         .delay(100) | 
					
						
							| 
									
										
										
										
											2015-11-22 19:42:53 -08:00
										 |  |  |         .map(test => { | 
					
						
							|  |  |  |           const userTest = {}; | 
					
						
							|  |  |  |           try { | 
					
						
							|  |  |  |             /* eslint-disable no-eval */ | 
					
						
							|  |  |  |             eval(test); | 
					
						
							|  |  |  |             /* eslint-enable no-eval */ | 
					
						
							|  |  |  |           } catch (e) { | 
					
						
							|  |  |  |             userTest.err = e.message.split(':').shift(); | 
					
						
							|  |  |  |           } finally { | 
					
						
							| 
									
										
										
										
											2015-12-01 23:24:03 -08:00
										 |  |  |             if (!test.match(/message: /g)) { | 
					
						
							| 
									
										
										
										
											2015-12-02 13:04:50 -08:00
										 |  |  |               // assumes test does not contain arrays
 | 
					
						
							|  |  |  |               // This is a patch until all test fall into this pattern
 | 
					
						
							|  |  |  |               userTest.text = test | 
					
						
							| 
									
										
										
										
											2015-12-01 23:24:03 -08:00
										 |  |  |                 .split(',') | 
					
						
							| 
									
										
										
										
											2015-12-02 13:04:50 -08:00
										 |  |  |                 .pop(); | 
					
						
							|  |  |  |               userTest.text = 'message: ' + userTest.text + '\');'; | 
					
						
							| 
									
										
										
										
											2015-12-01 23:24:03 -08:00
										 |  |  |             } else { | 
					
						
							|  |  |  |               userTest.text = test; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2015-11-22 19:42:53 -08:00
										 |  |  |           } | 
					
						
							|  |  |  |           return userTest; | 
					
						
							|  |  |  |         }) | 
					
						
							| 
									
										
										
										
											2015-12-02 14:56:06 -08:00
										 |  |  |         // gather tests back into an array
 | 
					
						
							| 
									
										
										
										
											2015-11-22 19:42:53 -08:00
										 |  |  |         .toArray() | 
					
						
							| 
									
										
										
										
											2015-11-30 14:27:39 -08:00
										 |  |  |         .map(tests => ({ ...rest, tests, originalCode })); | 
					
						
							| 
									
										
										
										
											2015-11-22 19:42:53 -08:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-02 14:56:06 -08:00
										 |  |  |   // used when updating preview without running tests
 | 
					
						
							|  |  |  |   common.checkPreview$ = function checkPreview$(args) { | 
					
						
							|  |  |  |     if (window.__err) { | 
					
						
							|  |  |  |       return Rx.Observable.throw(window.__err); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return Rx.Observable.just(args); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-01 08:01:51 -08:00
										 |  |  |   // now that the runPreviewTest$ is defined
 | 
					
						
							|  |  |  |   // we set the subject to true
 | 
					
						
							|  |  |  |   // this will let the updatePreview
 | 
					
						
							|  |  |  |   // script now that we are ready.
 | 
					
						
							|  |  |  |   common.previewReady$.onNext(true); | 
					
						
							| 
									
										
										
										
											2015-11-13 11:10:23 -08:00
										 |  |  | }); |