Best JavaScript code snippet using playwright-internal
animation.js
Source:animation.js  
1suite('animation', function() {2  setup(function() {3    webAnimations1.timeline._animations = [];4  });5  test('zero duration animation works', function() {6    tick(90);7    var a = document.body.animate([], 0);8    tick(100);9    assert.equal(a.startTime, 100);10    assert.equal(a.currentTime, 0);11  });12  test('playing works as expected', function() {13    tick(90);14    var a = document.body.animate([], 2000);15    tick(100);16    assert.equal(a.startTime, 100);17    assert.equal(a.currentTime, 0);18    tick(300);19    assert.equal(a.startTime, 100);20    assert.equal(a.currentTime, 200);21  });22  test('pause at start of play', function() {23    tick(90);24    var a = document.body.animate([], 2000);25    a.pause();26    tick(100);27    assert.equal(a.currentTime, 0);28    tick(300);29    a.play();30    assert.equal(a.currentTime, 0);31    tick(310);32    assert.equal(a.currentTime, 0);33    assert.equal(a.startTime, 310);34    var a = document.body.animate([], 2000);35    a.startTime = -690;36    a.pause();37    assert.equal(a.currentTime, null);38    tick(700);39    a.play();40    tick(701);41    assert.equal(a.currentTime, 1000);42    tick(800);43    assert.equal(a.currentTime, 1099);44    assert.equal(a.startTime, -299);45  });46  test('pausing works as expected', function() {47    tick(190);48    var a = document.body.animate([], 3000);49    tick(200);50    tick(1500);51    assert.equal(a.startTime, 200);52    assert.equal(a.currentTime, 1300);53    a.pause();54    assert.equal(a.startTime, null);55    assert.equal(a.currentTime, null);56    tick(2500);57    assert.equal(a.startTime, null);58    assert.equal(a.currentTime, 1300);59    a.play();60    tick(2510);61    assert.equal(a.startTime, 1210);62    assert.equal(a.currentTime, 1300);63    tick(3500);64    assert.equal(a.startTime, 1210);65    assert.equal(a.currentTime, 2290);66  });67  test('reversing works as expected', function() {68    tick(290);69    var a = document.body.animate([], 1000);70    tick(300);71    assert.equal(a.startTime, 300);72    assert.equal(a.currentTime, 0);73    tick(600);74    assert.equal(a.startTime, 300);75    assert.equal(a.currentTime, 300);76    assert.equal(a.playbackRate, 1);77    a.reverse();78    tick(600);79    assert.equal(a.startTime, 900);80    assert.equal(a.currentTime, 300);81    assert.equal(a.playbackRate, -1);82    tick(700);83    assert.equal(a.startTime, 900);84    assert.equal(a.currentTime, 200);85  });86  test('reversing after pausing', function() {87    tick(90);88    var a = document.body.animate([], 1000);89    tick(100);90    tick(600);91    a.reverse();92    tick(601);93    tick(700);94    assert.equal(a.startTime, 1101);95    assert.equal(a.currentTime, 401);96  });97  test('reversing after finishing works as expected', function() {98    tick(90);99    var a = document.body.animate([], 1000);100    tick(100);101    tick(1200);102    assert.equal(a.playState, 'finished');103    assert.equal(a.startTime, 100);104    assert.equal(a.currentTime, 1000);105    tick(1500);106    assert.equal(a.currentTime, 1000);107    assert.equal(isTicking(), false);108    a.reverse();109    assert.equal(a._startTime, null);110    assert.equal(a.currentTime, 1000);111    tick(1600);112    assert.equal(a.startTime, 2600);113    assert.equal(a.currentTime, 1000);114  });115  test('playing after finishing works as expected', function() {116    tick(90);117    var a = document.body.animate([], 1000);118    tick(100);119    tick(1200);120    assert.equal(a.playState, 'finished');121    assert.equal(a.startTime, 100);122    assert.equal(a.currentTime, 1000);123    tick(1500);124    assert.equal(a.currentTime, 1000);125    assert.equal(isTicking(), false);126    a.play();127    assert.equal(a.startTime, null);128    assert.equal(a.currentTime, 0);129    tick(1600);130    assert.equal(a.startTime, 1600);131    assert.equal(a.currentTime, 0);132  });133  test('limiting works as expected', function() {134    tick(390);135    var a = document.body.animate([], 1000);136    tick(400);137    assert.equal(a.startTime, 400);138    assert.equal(a.currentTime, 0);139    tick(900);140    assert.equal(a.startTime, 400);141    assert.equal(a.currentTime, 500);142    tick(1400);143    assert.equal(a.startTime, 400);144    assert.equal(a.currentTime, 1000);145    tick(1500);146    assert.equal(a.startTime, 400);147    assert.equal(a.currentTime, 1000);148    a.reverse();149    assert.equal(a.playbackRate, -1);150    assert.equal(a.currentTime, 1000);151    assert.equal(a._startTime, null);152    tick(2000);153    assert.equal(a.currentTime, 1000);154    assert.equal(a.startTime, 3000);155    tick(2200);156    assert.equal(a.currentTime, 800);157    assert.equal(a.startTime, 3000);158    tick(3200);159    assert.equal(a.currentTime, 0);160    assert.equal(a.startTime, 3000);161    tick(3500);162    assert.equal(a.currentTime, 0);163    assert.equal(a.startTime, 3000);164  });165  test('play after limit works as expected', function() {166    tick(490);167    var a = document.body.animate([], 2000);168    tick(500);169    tick(2600);170    assert.equal(a.currentTime, 2000);171    assert.equal(a.startTime, 500);172    assert.equal(a.playState, 'finished');173    assert.equal(a.playbackRate, 1);174    setTicking(true);175    a.play();176    tick(2700);177    assert.equal(a.startTime, 2700);178    assert.equal(a.currentTime, 0);179    assert.notEqual(a.playState, 'finished');180    assert.equal(a.playbackRate, 1);181  });182  test('play after limit works as expected (reversed)', function() {183    tick(590);184    var a = document.body.animate([], 3000);185    tick(600);186    tick(700);187    a.reverse();188    tick(701);189    tick(900);190    assert.equal(a.startTime, 801);191    assert.equal(a.currentTime, 0);192    assert.equal(a.playState, 'finished');193    assert.equal(a.playbackRate, -1);194    setTicking(true);195    a.play();196    tick(1000);197    assert.equal(a.startTime, 4000);198    assert.equal(a.currentTime, 3000);199    assert.notEqual(a.playState, 'finished');200    assert.equal(a.playbackRate, -1);201  });202  test('seeking works as expected', function() {203    tick(690);204    var a = document.body.animate([], 2000);205    tick(700);206    tick(900);207    assert.equal(a.currentTime, 200);208    a.currentTime = 600;209    assert.equal(a.currentTime, 600);210    assert.equal(a.startTime, 300);211    a.reverse();212    tick(1000);213    assert.equal(a.startTime, 1600);214    a.currentTime = 300;215    assert.equal(a.currentTime, 300);216    assert.equal(a.startTime, 1300);217  });218  test('seeking while paused works as expected', function() {219    tick(790);220    var a = document.body.animate([], 1000);221    tick(800);222    tick(1000);223    a.pause();224    assert.equal(a.currentTime, null);225    assert.equal(a.startTime, null);226    assert.equal(a._paused, true);227    a.currentTime = 500;228    assert.equal(a.startTime, null);229    assert.equal(a._paused, true);230  });231  test('setting start time while paused is ignored', function() {232    tick(900);233    var a = document.body.animate([], 1234);234    a.pause();235    assert.equal(a.startTime, null);236    assert.equal(a.currentTime, null);237    a.startTime = 2232;238    assert.equal(a.startTime, null);239    assert.equal(a.currentTime, null);240  });241  test('setting playbackRate sets startTime to null unless the playbackRate is not changing, ' +242      'preserves the current time', function() {243        tick(0);244        var a = document.body.animate([], 1000);245        tick(1);246        tick(11);247        assert.equal(a.currentTime, 10);248        a.playbackRate = 2;249        assert.equal(a.playbackRate, 2);250        assert.equal(a.currentTime, 10);251        assert.equal(a.startTime, null);252        tick(12);253        assert.equal(a.currentTime, 10);254        assert.equal(a.startTime, 7);255        tick(22);256        assert.equal(a.currentTime, 30);257        assert.equal(a.startTime, 7);258        a.playbackRate = -1;259        assert.equal(a.playbackRate, -1);260        assert.equal(a.currentTime, 30);261        assert.equal(a.startTime, null);262        tick(23);263        assert.equal(a.currentTime, 30);264        assert.equal(a.startTime, 53);265        tick(33);266        assert.equal(a.currentTime, 20);267        assert.equal(a.startTime, 53);268        a.playbackRate = -1;269        assert.equal(a.playbackRate, -1);270        assert.equal(a.currentTime, 20);271        assert.equal(a.startTime, 53);272        tick(43);273        assert.equal(a.currentTime, 10);274        assert.equal(a.startTime, 53);275      }276  );277  test('setting playbackRate puts animation back into effect if it is not finished', function() {278    tick(0);279    var a = document.body.animate([], 1000);280    assert.equal(a.playbackRate, 1);281    tick(1);282    tick(1002);283    assert.equal(a.currentTime, 1000);284    a.playbackRate = -1;285    assert.equal(a.playbackRate, -1);286    assert.equal(a.currentTime, 1000);287    tick(1003);288    assert.equal(a.currentTime, 1000);289    tick(1503);290    assert.equal(a.currentTime, 500);291  });292  test('setting playbackRate does not put animation back into effect if it is finished', function() {293    tick(0);294    var a = document.body.animate([], 1000);295    assert.equal(a.playbackRate, 1);296    tick(1);297    tick(1002);298    assert.equal(a.currentTime, 1000);299    assert.equal(a.startTime, 1);300    a.playbackRate = 0.5;301    assert.equal(a.playbackRate, 0.5);302    assert.equal(a.currentTime, 1000);303    assert.equal(a.startTime, null);304    tick(1003);305    assert.equal(a.currentTime, 1000);306    assert.equal(a.startTime, -997);307    tick(1503);308    assert.equal(a.currentTime, 1000);309    assert.equal(a.startTime, -997);310  });311  test('finishing works as expected', function() {312    tick(1000);313    var a = document.body.animate([], 2000);314    a.finish();315    assert.equal(a.startTime, 0);316    assert.equal(a.currentTime, 2000);317    a.reverse();318    a.finish();319    assert.equal(a.currentTime, 0);320    assert.equal(a.startTime, 2000);321    tick(2000);322  });323  test('cancelling clears all effects', function() {324    tick(0);325    var target = document.createElement('div');326    document.documentElement.appendChild(target);327    var animation = target.animate([{marginLeft: '50px'}, {marginLeft: '50px'}], 1000);328    tick(10);329    tick(110);330    assert.equal(getComputedStyle(target).marginLeft, '50px');331    animation.cancel();332    tick(110);333    assert.equal(getComputedStyle(target).marginLeft, '0px');334    assert.deepEqual(webAnimations1.timeline._animations, []);335    tick(120);336    assert.equal(getComputedStyle(target).marginLeft, '0px');337    assert.deepEqual(webAnimations1.timeline._animations, []);338    document.documentElement.removeChild(target);339  });340  test('cancelling a newly created animation clears all effects', function() {341    tick(0);342    var target = document.createElement('div');343    document.documentElement.appendChild(target);344    var animation = target.animate([{marginLeft: '50px'}, {marginLeft: '50px'}], 1000);345    assert.equal(getComputedStyle(target).marginLeft, '50px');346    animation.cancel();347    assert.equal(getComputedStyle(target).marginLeft, '0px');348    document.documentElement.removeChild(target);349  });350  test('startTime is set on first tick if timeline hasn\'t started', function() {351    webAnimations1.timeline.currentTime = undefined;352    var a = document.body.animate([], 1000);353    tick(0);354    tick(100);355    assert.equal(a.startTime, 0);356  });357  test('animations which are finished and not filling get discarded', function() {358    tick(90);359    var nofill = document.body.animate([], 100);360    var fill = document.body.animate([], {duration: 100, fill: 'forwards'});361    assert.deepEqual(webAnimations1.timeline._animations, [nofill._animation || nofill, fill._animation || fill]);362    tick(100);363    assert.deepEqual(webAnimations1.timeline._animations, [nofill._animation || nofill, fill._animation || fill]);364    tick(400);365    assert.deepEqual(webAnimations1.timeline._animations, [fill._animation || fill]);366  });367  test('discarded animations get re-added on modification', function() {368    tick(90);369    var animation = document.body.animate([], 100);370    tick(100);371    tick(400);372    assert.deepEqual(webAnimations1.timeline._animations, []);373    animation.currentTime = 0;374    assert.deepEqual(webAnimations1.timeline._animations, [animation._animation || animation]);375  });376  test('animations in the before phase are not discarded', function() {377    tick(100);378    var animation = document.body.animate([], 100);379    animation.currentTime = -50;380    tick(110);381    assert.deepEqual(webAnimations1.timeline._animations, [animation._animation || animation]);382  });383  test('animations that go out of effect should not clear the effect of animations that are in effect', function() {384    var target = document.createElement('div');385    document.body.appendChild(target);386    tick(0);387    var animationBehind = target.animate([{marginLeft: '200px'}, {marginLeft: '200px'}], 200);388    var animationInfront = target.animate([{marginLeft: '100px'}, {marginLeft: '100px'}], 100);389    tick(50);390    assert.equal(getComputedStyle(target).marginLeft, '100px', 't = 50');391    tick(150);392    assert.equal(getComputedStyle(target).marginLeft, '200px', 't = 150');393    tick(250);394    assert.equal(getComputedStyle(target).marginLeft, '0px', 't = 250');395    document.body.removeChild(target);396  });397  test('animation modifications should update CSS effects immediately', function() {398    var target = document.createElement('div');399    document.body.appendChild(target);400    tick(0);401    var animationBehind = target.animate([{width: '1234px'}, {width: '1234px'}], {duration: 1, fill: 'both'});402    var animationInfront = target.animate([{width: '0px'}, {width: '100px'}], 100);403    assert.equal(getComputedStyle(target).width, '0px');404    animationInfront.currentTime = 50;405    assert.equal(getComputedStyle(target).width, '50px');406    animationInfront.currentTime = 100;407    assert.equal(getComputedStyle(target).width, '1234px');408    animationInfront.play();409    assert.equal(getComputedStyle(target).width, '0px');410    animationInfront.startTime = -50;411    assert.equal(getComputedStyle(target).width, '50px');412    document.body.removeChild(target);413  });414  test('KeyframeEffect that hasn\'t been played has playState \'idle\'', function() {415    var effect = new webAnimations1KeyframeEffect(document.body, [], 1000);416    var a = new webAnimations1Animation(effect);417    assert.equal(a.playState, 'idle');418  });419  test('playState works for a simple effect', function() {420    var a = document.body.animate([], 1000);421    tick(0);422    assert.equal(a.playState, 'running');423    tick(100);424    assert.equal(a.playState, 'running');425    a.pause();426    assert.equal(a.playState, 'pending');427    tick(101);428    assert.equal(a.playState, 'paused');429    a.play();430    assert.equal(a.playState, 'pending');431    tick(102);432    assert.equal(a.playState, 'running');433    tick(1002);434    assert.equal(a.playState, 'finished');435  });436  test('Play after cancel', function() {437    var a = document.body.animate([], 1000);438    assert.equal(a.playState, 'pending');439    tick(0);440    a.cancel();441    assert.equal(a.playState, 'idle');442    assert.equal(a.currentTime, null);443    assert.equal(a.startTime, null);444    tick(1);445    assert.equal(a.playState, 'idle');446    assert.equal(a.currentTime, null);447    assert.equal(a.startTime, null);448    a.play();449    assert.equal(a.playState, 'pending');450    assert.equal(a.currentTime, 0);451    assert.equal(a.startTime, null);452    tick(10);453    assert.equal(a.playState, 'running');454    assert.equal(a.currentTime, 0);455    assert.equal(a.startTime, 10);456  });457  test('Reverse after cancel', function() {458    var a = document.body.animate([], 300);459    tick(0);460    a.cancel();461    assert.equal(a.playState, 'idle');462    assert.equal(a.currentTime, null);463    assert.equal(a.startTime, null);464    tick(1);465    a.reverse();466    assert.equal(a.playState, 'pending');467    assert.equal(a.currentTime, 300);468    assert.equal(a.startTime, null);469    tick(100);470    assert.equal(a.playState, 'running');471    assert.equal(a.currentTime, 300);472    assert.equal(a.startTime, 400);473    tick(300);474    assert.equal(a.playState, 'running');475    assert.equal(a.currentTime, 100);476    assert.equal(a.startTime, 400);477    tick(400);478    assert.equal(a.playState, 'finished');479    assert.equal(a.currentTime, 0);480    assert.equal(a.startTime, 400);481  });482  test('Finish after cancel', function() {483    var a = document.body.animate([], 300);484    tick(0);485    a.cancel();486    assert.equal(a.playState, 'idle');487    assert.equal(a.currentTime, null);488    assert.equal(a.startTime, null);489    tick(1);490    a.finish();491    assert.equal(a.playState, 'idle');492    assert.equal(a.currentTime, null);493    assert.equal(a.startTime, null);494    tick(2);495    assert.equal(a.playState, 'idle');496    assert.equal(a.currentTime, null);497    assert.equal(a.startTime, null);498  });499  test('Pause after cancel', function() {500    var a = document.body.animate([], 300);501    tick(0);502    a.cancel();503    assert.equal(a.playState, 'idle');504    assert.equal(a.currentTime, null);505    assert.equal(a.startTime, null);506    tick(1);507    a.pause();508    assert.equal(a.playState, 'paused');509    assert.equal(a.currentTime, 0);510    assert.equal(a.startTime, null);511  });512  test('Animations ignore NaN times', function() {513    var a = document.body.animate([], 300);514    a.startTime = 100;515    tick(110);516    assert.equal(a.currentTime, 10);517    a.startTime = NaN;518    assert.equal(a.startTime, 100);519    a.currentTime = undefined;520    assert.equal(a.currentTime, 10);521  });522  test('play() should not set a start time', function() {523    var a = document.body.animate([], 1000);524    a.cancel();525    assert.equal(a.startTime, null);526    assert.equal(a.playState, 'idle');527    a.play();528    assert.equal(a.startTime, null);529    assert.equal(a.playState, 'pending');530  });531  test('reverse() should not set a start time', function() {532    var a = document.body.animate([], 1000);533    a.cancel();534    assert.equal(a.startTime, null);535    assert.equal(a.playState, 'idle');536    a.reverse();537    assert.equal(a.startTime, null);538    assert.equal(a.playState, 'pending');539  });540  test('Animations have optional ID', function() {541    tick(100);542    var a = document.body.animate([], { duration: 1000 });543    assert.equal(a.id, '');544    a = document.body.animate([], { duration: 1000, id: 'anim-id' });545    assert.equal(a.id, 'anim-id');546  });...ClockSpec.js
Source:ClockSpec.js  
1/*global defineSuite*/2defineSuite([3        'Core/Clock',4        'Core/ClockRange',5        'Core/ClockStep',6        'Core/JulianDate',7        'Specs/pollToPromise'8    ], function(9        Clock,10        ClockRange,11        ClockStep,12        JulianDate,13        pollToPromise) {14    "use strict";15    /*global jasmine,describe,xdescribe,it,xit,expect,beforeEach,afterEach,beforeAll,afterAll,spyOn*/16    it('constructor sets default parameters', function() {17        var clock = new Clock();18        expect(clock.stopTime).toEqual(JulianDate.addDays(clock.startTime, 1, new JulianDate()));19        expect(clock.startTime).toEqual(clock.currentTime);20        expect(clock.clockStep).toEqual(ClockStep.SYSTEM_CLOCK_MULTIPLIER);21        expect(clock.clockRange).toEqual(ClockRange.UNBOUNDED);22        expect(clock.multiplier).toEqual(1.0);23    });24    it('constructor sets provided parameters correctly', function() {25        var start = new JulianDate(12);26        var stop = new JulianDate(112);27        var currentTime = new JulianDate(13);28        var step = ClockStep.TICK_DEPENDENT;29        var range = ClockRange.LOOP_STOP;30        var multiplier = 1.5;31        var clock = new Clock({32            currentTime : currentTime,33            clockStep : step,34            multiplier : multiplier,35            startTime : start,36            stopTime : stop,37            clockRange : range38        });39        expect(clock.startTime).toEqual(start);40        expect(clock.stopTime).toEqual(stop);41        expect(clock.currentTime).toEqual(currentTime);42        expect(clock.clockStep).toEqual(step);43        expect(clock.clockRange).toEqual(range);44        expect(clock.multiplier).toEqual(multiplier);45    });46    it('constructor works with no currentTime parameter', function() {47        var start = new JulianDate(12);48        var stop = new JulianDate(112);49        var currentTime = new JulianDate(12);50        var step = ClockStep.TICK_DEPENDENT;51        var range = ClockRange.LOOP_STOP;52        var multiplier = 1.5;53        var clock = new Clock({54            clockStep : step,55            multiplier : multiplier,56            startTime : start,57            stopTime : stop,58            clockRange : range59        });60        expect(clock.startTime).toEqual(start);61        expect(clock.stopTime).toEqual(stop);62        expect(clock.currentTime).toEqual(currentTime);63        expect(clock.clockStep).toEqual(step);64        expect(clock.clockRange).toEqual(range);65        expect(clock.multiplier).toEqual(multiplier);66    });67    it('constructor works with no startTime parameter', function() {68        var stop = new JulianDate(112);69        var currentTime = new JulianDate(13);70        var step = ClockStep.TICK_DEPENDENT;71        var range = ClockRange.LOOP_STOP;72        var multiplier = 1.5;73        var clock = new Clock({74            currentTime : currentTime,75            clockStep : step,76            multiplier : multiplier,77            stopTime : stop,78            clockRange : range79        });80        expect(clock.startTime).toEqual(clock.currentTime);81        expect(clock.stopTime).toEqual(stop);82        expect(clock.currentTime).toEqual(currentTime);83        expect(clock.clockStep).toEqual(step);84        expect(clock.clockRange).toEqual(range);85        expect(clock.multiplier).toEqual(multiplier);86    });87    it('constructor works with no start or stop time', function() {88        var start = new JulianDate(12);89        var stop = new JulianDate(13);90        var currentTime = new JulianDate(12);91        var step = ClockStep.TICK_DEPENDENT;92        var range = ClockRange.LOOP_STOP;93        var multiplier = 1.5;94        var clock = new Clock({95            currentTime : currentTime,96            clockStep : step,97            multiplier : multiplier,98            clockRange : range99        });100        expect(clock.startTime).toEqual(start);101        expect(clock.stopTime).toEqual(stop);102        expect(clock.currentTime).toEqual(currentTime);103        expect(clock.clockStep).toEqual(step);104        expect(clock.clockRange).toEqual(range);105        expect(clock.multiplier).toEqual(multiplier);106    });107    it('constructor works with no start or current time', function() {108        var start = new JulianDate(12);109        var stop = new JulianDate(13);110        var currentTime = new JulianDate(12);111        var step = ClockStep.TICK_DEPENDENT;112        var range = ClockRange.LOOP_STOP;113        var multiplier = 1.5;114        var clock = new Clock({115            clockStep : step,116            multiplier : multiplier,117            stopTime : stop,118            clockRange : range119        });120        expect(clock.startTime).toEqual(start);121        expect(clock.stopTime).toEqual(stop);122        expect(clock.currentTime).toEqual(currentTime);123        expect(clock.clockStep).toEqual(step);124        expect(clock.clockRange).toEqual(range);125        expect(clock.multiplier).toEqual(multiplier);126    });127    it('constructor works with no current or stop time', function() {128        var start = new JulianDate(12);129        var stop = new JulianDate(13);130        var currentTime = new JulianDate(12);131        var step = ClockStep.TICK_DEPENDENT;132        var range = ClockRange.LOOP_STOP;133        var multiplier = 1.5;134        var clock = new Clock({135            clockStep : step,136            multiplier : multiplier,137            startTime : start,138            clockRange : range139        });140        expect(clock.startTime).toEqual(start);141        expect(clock.stopTime).toEqual(stop);142        expect(clock.currentTime).toEqual(currentTime);143        expect(clock.clockStep).toEqual(step);144        expect(clock.clockRange).toEqual(range);145        expect(clock.multiplier).toEqual(multiplier);146    });147    it('constructor works with no stopTime parameter', function() {148        var start = new JulianDate(12);149        var stop = new JulianDate(13);150        var currentTime = new JulianDate(12);151        var step = ClockStep.TICK_DEPENDENT;152        var range = ClockRange.LOOP_STOP;153        var multiplier = 1.5;154        var clock = new Clock({155            currentTime : currentTime,156            clockStep : step,157            multiplier : multiplier,158            startTime : start,159            clockRange : range160        });161        expect(clock.startTime).toEqual(start);162        expect(clock.stopTime).toEqual(stop);163        expect(clock.currentTime).toEqual(currentTime);164        expect(clock.clockStep).toEqual(step);165        expect(clock.clockRange).toEqual(range);166        expect(clock.multiplier).toEqual(multiplier);167    });168    it('Tick dependant clock step works animating forward.', function() {169        var start = new JulianDate(0);170        var stop = new JulianDate(1);171        var currentTime = new JulianDate(0.5);172        var step = ClockStep.TICK_DEPENDENT;173        var range = ClockRange.LOOP_STOP;174        var multiplier = 1.5;175        var clock = new Clock({176            currentTime : currentTime,177            clockStep : step,178            multiplier : multiplier,179            startTime : start,180            stopTime : stop,181            clockRange : range182        });183        expect(clock.currentTime).toEqual(currentTime);184        currentTime = JulianDate.addSeconds(currentTime, multiplier, new JulianDate());185        expect(currentTime).toEqual(clock.tick());186        expect(clock.currentTime).toEqual(currentTime);187        currentTime = JulianDate.addSeconds(currentTime, multiplier, new JulianDate());188        expect(currentTime).toEqual(clock.tick());189        expect(clock.currentTime).toEqual(currentTime);190    });191    it('Tick dependant clock step works animating backwards.', function() {192        var start = new JulianDate(0);193        var stop = new JulianDate(1);194        var currentTime = new JulianDate(0.5);195        var step = ClockStep.TICK_DEPENDENT;196        var range = ClockRange.LOOP_STOP;197        var multiplier = -1.5;198        var clock = new Clock({199            currentTime : currentTime,200            clockStep : step,201            multiplier : multiplier,202            startTime : start,203            stopTime : stop,204            clockRange : range205        });206        expect(clock.currentTime).toEqual(currentTime);207        currentTime = JulianDate.addSeconds(currentTime, multiplier, new JulianDate());208        expect(currentTime).toEqual(clock.tick());209        expect(clock.currentTime).toEqual(currentTime);210        currentTime = JulianDate.addSeconds(currentTime, multiplier, new JulianDate());211        expect(currentTime).toEqual(clock.tick());212        expect(clock.currentTime).toEqual(currentTime);213    });214    it('Tick dependant clock step works unbounded animating forward.', function() {215        var start = new JulianDate(0);216        var stop = new JulianDate(1);217        var currentTime = new JulianDate(1);218        var step = ClockStep.TICK_DEPENDENT;219        var range = ClockRange.UNBOUNDED;220        var multiplier = 1.5;221        var clock = new Clock({222            currentTime : currentTime,223            clockStep : step,224            multiplier : multiplier,225            startTime : start,226            stopTime : stop,227            clockRange : range228        });229        expect(clock.currentTime).toEqual(currentTime);230        currentTime = JulianDate.addSeconds(currentTime, multiplier, new JulianDate());231        expect(currentTime).toEqual(clock.tick());232        expect(clock.currentTime).toEqual(currentTime);233        currentTime = JulianDate.addSeconds(currentTime, multiplier, new JulianDate());234        expect(currentTime).toEqual(clock.tick());235        expect(clock.currentTime).toEqual(currentTime);236    });237    it('Tick dependant clock step works unbounded animating backwards.', function() {238        var start = new JulianDate(0);239        var stop = new JulianDate(1);240        var currentTime = new JulianDate(0);241        var step = ClockStep.TICK_DEPENDENT;242        var range = ClockRange.UNBOUNDED;243        var multiplier = -1.5;244        var clock = new Clock({245            currentTime : currentTime,246            clockStep : step,247            multiplier : multiplier,248            startTime : start,249            stopTime : stop,250            clockRange : range251        });252        expect(clock.currentTime).toEqual(currentTime);253        currentTime = JulianDate.addSeconds(currentTime, multiplier, new JulianDate());254        expect(currentTime).toEqual(clock.tick());255        expect(clock.currentTime).toEqual(currentTime);256        currentTime = JulianDate.addSeconds(currentTime, multiplier, new JulianDate());257        expect(currentTime).toEqual(clock.tick());258        expect(clock.currentTime).toEqual(currentTime);259    });260    it('Tick dependant clock loops animating forward.', function() {261        var start = new JulianDate(0);262        var stop = new JulianDate(1);263        var currentTime = new JulianDate(1);264        var step = ClockStep.TICK_DEPENDENT;265        var range = ClockRange.LOOP_STOP;266        var multiplier = 1.5;267        var clock = new Clock({268            currentTime : currentTime,269            clockStep : step,270            multiplier : multiplier,271            startTime : start,272            stopTime : stop,273            clockRange : range274        });275        expect(clock.currentTime).toEqual(currentTime);276        currentTime = JulianDate.addSeconds(start, multiplier, new JulianDate());277        expect(currentTime).toEqual(clock.tick());278        expect(clock.currentTime).toEqual(currentTime);279        currentTime = JulianDate.addSeconds(currentTime, multiplier, new JulianDate());280        expect(currentTime).toEqual(clock.tick());281        expect(clock.currentTime).toEqual(currentTime);282    });283    it('Tick dependant clock step stops at start when animating backwards with ClockRange.LOOP_STOP.', function() {284        var start = new JulianDate(0);285        var stop = new JulianDate(1);286        var currentTime = new JulianDate(0);287        var step = ClockStep.TICK_DEPENDENT;288        var range = ClockRange.LOOP_STOP;289        var multiplier = -100.0;290        var clock = new Clock({291            currentTime : currentTime,292            clockStep : step,293            multiplier : multiplier,294            startTime : start,295            stopTime : stop,296            clockRange : range297        });298        expect(clock.currentTime).toEqual(currentTime);299        expect(start).toEqual(clock.tick());300        expect(start).toEqual(clock.currentTime);301    });302    it('Tick dependant clock step stops at end when animating forwards.', function() {303        var start = new JulianDate(0);304        var stop = new JulianDate(1);305        var currentTime = new JulianDate(1);306        var step = ClockStep.TICK_DEPENDENT;307        var range = ClockRange.CLAMPED;308        var multiplier = 100.0;309        var clock = new Clock({310            currentTime : currentTime,311            clockStep : step,312            multiplier : multiplier,313            startTime : start,314            stopTime : stop,315            clockRange : range316        });317        expect(clock.currentTime).toEqual(currentTime);318        expect(stop).toEqual(clock.tick());319        expect(stop).toEqual(clock.currentTime);320    });321    it('Ticks in real-time.', function() {322        //We can't numerically validate the real-time clock, but we323        //can at least make sure the code executes.324        var clock = new Clock({325            clockStep : ClockStep.SYSTEM_CLOCK326        });327        var time1 = JulianDate.clone(clock.tick());328        return pollToPromise(function() {329            var time2 = clock.tick();330            return JulianDate.greaterThan(time2, time1);331        });332    });333    it('Tick dependant clock step stops at start animating backwards.', function() {334        var start = new JulianDate(0);335        var stop = new JulianDate(1);336        var currentTime = new JulianDate(0);337        var step = ClockStep.TICK_DEPENDENT;338        var range = ClockRange.CLAMPED;339        var multiplier = -100.0;340        var clock = new Clock({341            currentTime : currentTime,342            clockStep : step,343            multiplier : multiplier,344            startTime : start,345            stopTime : stop,346            clockRange : range347        });348        expect(clock.currentTime).toEqual(currentTime);349        expect(start).toEqual(clock.tick());350        expect(start).toEqual(clock.currentTime);351    });352    it('throws if start time is after stop time.', function() {353        var start = new JulianDate(1);354        var stop = new JulianDate(0);355        expect(function() {356            return new Clock({357                startTime : start,358                stopTime : stop359            });360        }).toThrowDeveloperError();361    });362    it('system clock multiplier clock step works fine', function() {363        var clock = new Clock({364            clockStep : ClockStep.SYSTEM_CLOCK_MULTIPLIER365        });366        var time1 = JulianDate.clone(clock.tick());367        return pollToPromise(function() {368            var time2 = clock.tick();369            return JulianDate.greaterThan(time2, time1);370        });371    });372    it('clock does not advance if shouldAnimate is false and advances if true', function() {373        var clock = new Clock();374        var time1;375        var time2;376        clock.clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER;377        var currentTime = clock.currentTime;378        clock.shouldAnimate = false;379        expect(currentTime).toEqual(clock.tick());380        expect(clock.currentTime).toEqual(currentTime);381        clock.shouldAnimate = true;382        time1 = JulianDate.clone(clock.tick());383        return pollToPromise(function() {384            time2 = clock.tick();385            return JulianDate.greaterThan(time2, time1);386        }).then(function() {387            clock.clockStep = ClockStep.SYSTEM_CLOCK;388            currentTime = clock.currentTime;389            clock.shouldAnimate = false;390            expect(currentTime).toEqual(clock.tick());391            expect(clock.currentTime).toEqual(currentTime);392            clock.shouldAnimate = true;393            time1 = JulianDate.clone(clock.tick());394            return pollToPromise(function() {395                time2 = clock.tick();396                return JulianDate.greaterThan(time2, time1);397            }).then(function() {398                clock.clockStep = ClockStep.TICK_DEPENDENT;399                currentTime = JulianDate.clone(clock.currentTime);400                clock.shouldAnimate = false;401                expect(currentTime).toEqual(clock.tick());402                expect(clock.currentTime).toEqual(currentTime);403                clock.shouldAnimate = true;404                expect(JulianDate.greaterThan(clock.tick(), currentTime)).toEqual(true);405            });406        });407    });...player.js
Source:player.js  
1suite('player', function() {2  setup(function() {3    webAnimationsMinifill.timeline._players = [];4  });5  test('zero duration animation works', function() {6    tick(90);7    var p = document.body.animate([], 0);8    tick(100);9    assert.equal(p.startTime, 100);10    assert.equal(p.currentTime, 0);11  });12  test('playing works as expected', function() {13    tick(90);14    var p = document.body.animate([], 2000);15    tick(100);16    assert.equal(p.startTime, 100);17    assert.equal(p.currentTime, 0);18    tick(300);19    assert.equal(p.startTime, 100);20    assert.equal(p.currentTime, 200);21  });22  test('pause at start of play', function() {23    tick(90);24    var p = document.body.animate([], 2000);25    p.pause();26    tick(100);27    assert.equal(p.currentTime, 0);28    tick(300);29    p.play();30    assert.equal(p.currentTime, 0);31    tick(310);32    assert.equal(p.currentTime, 0);33    assert.equal(p.startTime, 310);34    var p = document.body.animate([], 2000);35    p.startTime = -690;36    p.pause();37    assert.equal(p.currentTime, null);38    tick(700);39    p.play();40    tick(701);41    assert.equal(p.currentTime, 1000);42    tick(800);43    assert.equal(p.currentTime, 1099);44    assert.equal(p.startTime, -299);45  });46  test('pausing works as expected', function() {47    tick(190);48    var p = document.body.animate([], 3000);49    tick(200);50    tick(1500);51    assert.equal(p.startTime, 200);52    assert.equal(p.currentTime, 1300);53    p.pause();54    assert.equal(p.startTime, null);55    assert.equal(p.currentTime, null);56    tick(2500);57    assert.equal(p.startTime, null);58    assert.equal(p.currentTime, 1300);59    p.play();60    tick(2510);61    assert.equal(p.startTime, 1210);62    assert.equal(p.currentTime, 1300);63    tick(3500);64    assert.equal(p.startTime, 1210);65    assert.equal(p.currentTime, 2290);66  });67  test('reversing works as expected', function() {68    tick(290);69    var p = document.body.animate([], 1000);70    tick(300);71    assert.equal(p.startTime, 300);72    assert.equal(p.currentTime, 0);73    tick(600);74    assert.equal(p.startTime, 300);75    assert.equal(p.currentTime, 300);76    assert.equal(p.playbackRate, 1);77    p.reverse();78    tick(600);79    assert.equal(p.startTime, 900);80    assert.equal(p.currentTime, 300);81    assert.equal(p.playbackRate, -1);82    tick(700);83    assert.equal(p.startTime, 900);84    assert.equal(p.currentTime, 200);85  });86  test('reversing after pausing', function() {87    tick(90);88    var p = document.body.animate([], 1000);89    tick(100);90    tick(600);91    p.reverse();92    tick(601);93    tick(700);94    assert.equal(p.startTime, 1101);95    assert.equal(p.currentTime, 401);96  });97  test('reversing after finishing works as expected', function() {98    tick(90);99    var p = document.body.animate([], 1000);100    tick(100);101    tick(1200);102    assert.equal(p.finished, true);103    assert.equal(p.startTime, 100);104    assert.equal(p.currentTime, 1000);105    tick(1500);106    assert.equal(p.currentTime, 1000);107    assert.equal(isTicking(), false);108    p.reverse();109    assert.equal(p._startTime, null);110    assert.equal(p.currentTime, 1000);111    tick(1600);112    assert.equal(p.startTime, 2600);113    assert.equal(p.currentTime, 1000);114  });115  test('playing after finishing works as expected', function() {116    tick(90);117    var p = document.body.animate([], 1000);118    tick(100);119    tick(1200);120    assert.equal(p.finished, true);121    assert.equal(p.startTime, 100);122    assert.equal(p.currentTime, 1000);123    tick(1500);124    assert.equal(p.currentTime, 1000);125    assert.equal(isTicking(), false);126    p.play();127    assert.equal(p.startTime, null);128    assert.equal(p.currentTime, 0);129    tick(1600);130    assert.equal(p.startTime, 1600);131    assert.equal(p.currentTime, 0);132  });133  test('limiting works as expected', function() {134    tick(390);135    var p = document.body.animate([], 1000);136    tick(400);137    assert.equal(p.startTime, 400);138    assert.equal(p.currentTime, 0);139    tick(900);140    assert.equal(p.startTime, 400);141    assert.equal(p.currentTime, 500);142    tick(1400);143    assert.equal(p.startTime, 400);144    assert.equal(p.currentTime, 1000);145    tick(1500);146    assert.equal(p.startTime, 400);147    assert.equal(p.currentTime, 1000);148    p.reverse();149    assert.equal(p.playbackRate, -1);150    assert.equal(p.currentTime, 1000);151    assert.equal(p._startTime, null);152    tick(2000);153    assert.equal(p.currentTime, 1000);154    assert.equal(p.startTime, 3000);155    tick(2200);156    assert.equal(p.currentTime, 800);157    assert.equal(p.startTime, 3000);158    tick(3200);159    assert.equal(p.currentTime, 0);160    assert.equal(p.startTime, 3000);161    tick(3500);162    assert.equal(p.currentTime, 0);163    assert.equal(p.startTime, 3000);164  });165  test('play after limit works as expected', function() {166    tick(490);167    var p = document.body.animate([], 2000);168    tick(500);169    tick(2600);170    assert.equal(p.currentTime, 2000);171    assert.equal(p.startTime, 500);172    assert.equal(p.finished, true);173    assert.equal(p.playbackRate, 1);174    setTicking(true);175    p.play();176    tick(2700);177    assert.equal(p.startTime, 2700);178    assert.equal(p.currentTime, 0);179    assert.equal(p.finished, false);180    assert.equal(p.playbackRate, 1);181  });182  test('play after limit works as expected (reversed)', function() {183    tick(590);184    var p = document.body.animate([], 3000);185    tick(600);186    tick(700);187    p.reverse();188    tick(701);189    tick(900);190    assert.equal(p.startTime, 801);191    assert.equal(p.currentTime, 0);192    assert.equal(p.finished, true);193    assert.equal(p.playbackRate, -1);194    setTicking(true);195    p.play();196    tick(1000);197    assert.equal(p.startTime, 4000);198    assert.equal(p.currentTime, 3000);199    assert.equal(p.finished, false);200    assert.equal(p.playbackRate, -1);201  });202  test('seeking works as expected', function() {203    tick(690);204    var p = document.body.animate([], 2000);205    tick(700);206    tick(900);207    assert.equal(p.currentTime, 200);208    p.currentTime = 600;209    assert.equal(p.currentTime, 600);210    assert.equal(p.startTime, 300);211    p.reverse();212    tick(1000);213    assert.equal(p.startTime, 1600);214    p.currentTime = 300;215    assert.equal(p.currentTime, 300);216    assert.equal(p.startTime, 1300);217  });218  test('seeking while paused works as expected', function() {219    tick(790);220    var p = document.body.animate([], 1000);221    tick(800);222    tick(1000);223    p.pause();224    assert.equal(p.currentTime, null);225    assert.equal(p.startTime, null);226    assert.equal(p.paused, true);227    p.currentTime = 500;228    assert.equal(p.startTime, null);229    assert.equal(p.paused, true);230  });231  test('setting start time while paused is ignored', function() {232    tick(900);233    var p = document.body.animate([], 1234);234    p.pause();235    assert.equal(p.startTime, null);236    assert.equal(p.currentTime, null);237    p.startTime = 2232;238    assert.equal(p.startTime, null);239    assert.equal(p.currentTime, null);240  });241  test('finishing works as expected', function() {242    tick(1000);243    var p = document.body.animate([], 2000);244    p.finish();245    assert.equal(p.startTime, 0);246    assert.equal(p.currentTime, 2000);247    p.reverse();248    p.finish();249    assert.equal(p.currentTime, 0);250    assert.equal(p.startTime, 2000);251    tick(2000);252  });253  test('cancelling clears all effects', function() {254    tick(0);255    var target = document.createElement('div');256    document.documentElement.appendChild(target);257    var player = target.animate([{marginLeft: '50px'}, {marginLeft: '50px'}], 1000);258    tick(10);259    tick(110);260    assert.equal(getComputedStyle(target).marginLeft, '50px');261    player.cancel();262    // getComputedStyle forces a tick.263    assert.equal(getComputedStyle(target).marginLeft, '0px');264    assert.deepEqual(webAnimationsMinifill.timeline._players, []);265    tick(120);266    assert.equal(getComputedStyle(target).marginLeft, '0px');267    assert.deepEqual(webAnimationsMinifill.timeline._players, []);268    document.documentElement.removeChild(target);269  });270  test('startTime is set on first tick if timeline hasn\'t started', function() {271    webAnimationsMinifill.timeline.currentTime = undefined;272    var p = document.body.animate([], 1000);273    tick(0);274    tick(100);275    assert.equal(p.startTime, 0);276  });277  test('players which are finished and not filling get discarded', function() {278    tick(90);279    var nofill = document.body.animate([], 100);280    var fill = document.body.animate([], {duration: 100, fill: 'forwards'});281    assert.deepEqual(webAnimationsMinifill.timeline._players, [nofill._player || nofill, fill._player || fill]);282    tick(100);283    assert.deepEqual(webAnimationsMinifill.timeline._players, [nofill._player || nofill, fill._player || fill]);284    tick(400);285    assert.deepEqual(webAnimationsMinifill.timeline._players, [fill._player || fill]);286  });287  test('discarded players get re-added on modification', function() {288    tick(90);289    var player = document.body.animate([], 100);290    tick(100);291    tick(400);292    assert.deepEqual(webAnimationsMinifill.timeline._players, []);293    player.currentTime = 0;294    assert.deepEqual(webAnimationsMinifill.timeline._players, [player._player || player]);295  });296  test('players in the before phase are not discarded', function() {297    tick(100);298    var player = document.body.animate([], 100);299    player.currentTime = -50;300    tick(110);301    assert.deepEqual(webAnimationsMinifill.timeline._players, [player._player || player]);302  });303  test('players that go out of effect should not clear the effect of players that are in effect', function() {304    var target = document.createElement('div');305    document.body.appendChild(target);306    tick(0);307    var playerBehind = target.animate([{marginLeft: '200px'}, {marginLeft: '200px'}], 200);308    var playerInfront = target.animate([{marginLeft: '100px'}, {marginLeft: '100px'}], 100);309    tick(50);310    assert.equal(getComputedStyle(target).marginLeft, '100px', 't = 50');311    tick(150);312    assert.equal(getComputedStyle(target).marginLeft, '200px', 't = 150');313    tick(250);314    assert.equal(getComputedStyle(target).marginLeft, '0px', 't = 250');315    document.body.removeChild(target);316  });317  test('player modifications should update CSS effects immediately', function() {318    var target = document.createElement('div');319    document.body.appendChild(target);320    tick(0);321    var playerBehind = target.animate([{width: '1234px'}, {width: '1234px'}], {duration: 1, fill: 'both'});322    var playerInfront = target.animate([{width: '0px'}, {width: '100px'}], 100);323    assert.equal(getComputedStyle(target).width, '0px');324    playerInfront.currentTime = 50;325    assert.equal(getComputedStyle(target).width, '50px');326    playerInfront.currentTime = 100;327    assert.equal(getComputedStyle(target).width, '1234px');328    playerInfront.play();329    assert.equal(getComputedStyle(target).width, '0px');330    playerInfront.startTime = -50;331    assert.equal(getComputedStyle(target).width, '50px');332    document.body.removeChild(target);333  });334  test('Player that hasn\'t been played has playState \'idle\'', function() {335    var source = new minifillAnimation(document.body, [], 1000);336    var p = new Player(source);337    assert.equal(p.playState, 'idle');338  });339  test('playState works for a simple animation', function() {340    var p = document.body.animate([], 1000);341    tick(0);342    assert.equal(p.playState, 'running');343    tick(100);344    assert.equal(p.playState, 'running');345    p.pause();346    assert.equal(p.playState, 'pending');347    tick(101);348    assert.equal(p.playState, 'paused');349    p.play();350    assert.equal(p.playState, 'pending');351    tick(102);352    assert.equal(p.playState, 'running');353    tick(1002);354    assert.equal(p.playState, 'finished');355  });356  test('Play after cancel', function() {357    var p = document.body.animate([], 1000);358    assert.equal(p.playState, 'pending');359    tick(0);360    p.cancel();361    assert.equal(p.playState, 'idle');362    assert.equal(p.currentTime, null);363    assert.equal(p.startTime, null);364    tick(1);365    assert.equal(p.playState, 'idle');366    assert.equal(p.currentTime, null);367    assert.equal(p.startTime, null);368    p.play();369    assert.equal(p.playState, 'pending');370    assert.equal(p.currentTime, 0);371    assert.equal(p.startTime, null);372    tick(10);373    assert.equal(p.playState, 'running');374    assert.equal(p.currentTime, 0);375    assert.equal(p.startTime, 10);376  });377  test('Reverse after cancel', function() {378    var p = document.body.animate([], 300);379    tick(0);380    p.cancel();381    assert.equal(p.playState, 'idle');382    assert.equal(p.currentTime, null);383    assert.equal(p.startTime, null);384    tick(1);385    p.reverse();386    assert.equal(p.playState, 'pending');387    assert.equal(p.currentTime, 300);388    assert.equal(p.startTime, null);389    tick(100);390    assert.equal(p.playState, 'running');391    assert.equal(p.currentTime, 300);392    assert.equal(p.startTime, 400);393    tick(300);394    assert.equal(p.playState, 'running');395    assert.equal(p.currentTime, 100);396    assert.equal(p.startTime, 400);397    tick(400);398    assert.equal(p.playState, 'finished');399    assert.equal(p.currentTime, 0);400    assert.equal(p.startTime, 400);401  });402  test('Finish after cancel', function() {403    var p = document.body.animate([], 300);404    tick(0);405    p.cancel();406    assert.equal(p.playState, 'idle');407    assert.equal(p.currentTime, null);408    assert.equal(p.startTime, null);409    tick(1);410    p.finish();411    assert.equal(p.playState, 'idle');412    assert.equal(p.currentTime, null);413    assert.equal(p.startTime, null);414    tick(2);415    assert.equal(p.playState, 'idle');416    assert.equal(p.currentTime, null);417    assert.equal(p.startTime, null);418  });419  test('Pause after cancel', function() {420    var p = document.body.animate([], 300);421    tick(0);422    p.cancel();423    assert.equal(p.playState, 'idle');424    assert.equal(p.currentTime, null);425    assert.equal(p.startTime, null);426    tick(1);427    p.pause();428    assert.equal(p.playState, 'idle');429    assert.equal(p.currentTime, null);430    assert.equal(p.startTime, null);431  });432  test('Players ignore NaN times', function() {433    var p = document.body.animate([], 300);434    p.startTime = 100;435    tick(110);436    assert.equal(p.currentTime, 10);437    p.startTime = NaN;438    assert.equal(p.startTime, 100);439    p.currentTime = undefined;440    assert.equal(p.currentTime, 10);441  });442  test('play() should not set a start time', function() {443    var p = document.body.animate([], 1000);444    p.cancel();445    assert.equal(p.startTime, null);446    assert.equal(p.playState, 'idle');447    p.play();448    assert.equal(p.startTime, null);449    assert.equal(p.playState, 'pending');450  });451  test('reverse() should not set a start time', function() {452    var p = document.body.animate([], 1000);453    p.cancel();454    assert.equal(p.startTime, null);455    assert.equal(p.playState, 'idle');456    p.reverse();457    assert.equal(p.startTime, null);458    assert.equal(p.playState, 'pending');459  });...Clock.js
Source:Clock.js  
1/*global define*/2define([3        './ClockRange',4        './ClockStep',5        './defaultValue',6        './defined',7        './DeveloperError',8        './Event',9        './getTimestamp',10        './JulianDate'11    ], function(12        ClockRange,13        ClockStep,14        defaultValue,15        defined,16        DeveloperError,17        Event,18        getTimestamp,19        JulianDate) {20    "use strict";21    /**22     * A simple clock for keeping track of simulated time.23     *24     * @alias Clock25     * @constructor26     *27     * @param {Object} options Object with the following properties:28     * @param {JulianDate} [options.startTime] The start time of the clock.29     * @param {JulianDate} [options.stopTime] The stop time of the clock.30     * @param {JulianDate} [options.currentTime] The current time.31     * @param {Number} [options.multiplier=1.0] Determines how much time advances when tick is called, negative values allow for advancing backwards.32     * @param {ClockStep} [options.clockStep=ClockStep.SYSTEM_CLOCK_MULTIPLIER] Determines if calls to <code>tick</code> are frame dependent or system clock dependent.33     * @param {ClockRange} [options.clockRange=ClockRange.UNBOUNDED] Determines how the clock should behave when <code>startTime</code> or <code>stopTime</code> is reached.34     * @param {Boolean} [options.canAnimate=true] Indicates whether tick can advance time.  This could be false if data is being buffered, for example.  The clock will only tick when both <code>canAnimate</code> and <code>shouldAnimate</code> are true.35     * @param {Boolean} [options.shouldAnimate=true] Indicates whether tick should attempt to advance time.  The clock will only tick when both <code>canAnimate</code> and <code>shouldAnimate</code> are true.36     *37     * @exception {DeveloperError} startTime must come before stopTime.38     *39     * @see ClockStep40     * @see ClockRange41     * @see JulianDate42     *43     * @example44     * // Create a clock that loops on Christmas day 2013 and runs in real-time.45     * var clock = new Cesium.Clock({46     *    startTime : Cesium.JulianDate.fromIso8601("2013-12-25"),47     *    currentTime : Cesium.JulianDate.fromIso8601("2013-12-25"),48     *    stopTime : Cesium.JulianDate.fromIso8601("2013-12-26"),49     *    clockRange : Cesium.ClockRange.LOOP_STOP,50     *    clockStep : Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER51     * });52     */53    var Clock = function(options) {54        options = defaultValue(options, defaultValue.EMPTY_OBJECT);55        var startTime = options.startTime;56        var startTimeUndefined = !defined(startTime);57        var stopTime = options.stopTime;58        var stopTimeUndefined = !defined(stopTime);59        var currentTime = options.currentTime;60        var currentTimeUndefined = !defined(currentTime);61        if (startTimeUndefined && stopTimeUndefined && currentTimeUndefined) {62            currentTime = JulianDate.now();63            startTime = JulianDate.clone(currentTime);64            stopTime = JulianDate.addDays(currentTime, 1.0, new JulianDate());65        } else if (startTimeUndefined && stopTimeUndefined) {66            startTime = JulianDate.clone(currentTime);67            stopTime = JulianDate.addDays(currentTime, 1.0, new JulianDate());68        } else if (startTimeUndefined && currentTimeUndefined) {69            startTime = JulianDate.addDays(stopTime, -1.0, new JulianDate());70            currentTime = JulianDate.clone(startTime);71        } else if (currentTimeUndefined && stopTimeUndefined) {72            currentTime = JulianDate.clone(startTime);73            stopTime = JulianDate.addDays(startTime, 1.0, new JulianDate());74        } else if (currentTimeUndefined) {75            currentTime = JulianDate.clone(startTime);76        } else if (stopTimeUndefined) {77            stopTime = JulianDate.addDays(currentTime, 1.0, new JulianDate());78        } else if (startTimeUndefined) {79            startTime = JulianDate.clone(currentTime);80        }81        //>>includeStart('debug', pragmas.debug);82        if (JulianDate.greaterThan(startTime, stopTime)) {83            throw new DeveloperError('startTime must come before stopTime.');84        }85        //>>includeEnd('debug');86        /**87         * The start time of the clock.88         * @type {JulianDate}89         */90        this.startTime = startTime;91        /**92         * The stop time of the clock.93         * @type {JulianDate}94         */95        this.stopTime = stopTime;96        /**97         * The current time.98         * @type {JulianDate}99         */100        this.currentTime = currentTime;101        /**102         * Determines how much time advances when tick is called, negative values allow for advancing backwards.103         * If <code>clockStep</code> is set to ClockStep.TICK_DEPENDENT this is the number of seconds to advance.104         * If <code>clockStep</code> is set to ClockStep.SYSTEM_CLOCK_MULTIPLIER this value is multiplied by the105         * elapsed system time since the last call to tick.106         * @type {Number}107         * @default 1.0108         */109        this.multiplier = defaultValue(options.multiplier, 1.0);110        /**111         * Determines if calls to <code>tick</code> are frame dependent or system clock dependent.112         * @type ClockStep113         * @default {@link ClockStep.SYSTEM_CLOCK_MULTIPLIER}114         */115        this.clockStep = defaultValue(options.clockStep, ClockStep.SYSTEM_CLOCK_MULTIPLIER);116        /**117         * Determines how the clock should behave when <code>startTime</code> or <code>stopTime</code> is reached.118         * @type {ClockRange}119         * @default {@link ClockRange.UNBOUNDED}120         */121        this.clockRange = defaultValue(options.clockRange, ClockRange.UNBOUNDED);122        /**123         * Indicates whether tick can advance time.  This could be false if data is being buffered,124         * for example.  The clock will only tick when both <code>canAnimate</code> and <code>shouldAnimate</code> are true.125         * @type {Boolean}126         * @default true127         */128        this.canAnimate = defaultValue(options.canAnimate, true);129        /**130         * Indicates whether tick should attempt to advance time.131         * The clock will only tick when both <code>canAnimate</code> and <code>shouldAnimate</code> are true.132         * @type {Boolean}133         * @default true134         */135        this.shouldAnimate = defaultValue(options.shouldAnimate, true);136        /**137         * An {@link Event} that is fired whenever <code>tick</code>.138         */139        this.onTick = new Event();140        this._lastSystemTime = getTimestamp();141    };142    /**143     * Advances the clock from the currentTime based on the current configuration options.144     * tick should be called every frame, regardless of whether animation is taking place145     * or not.  To control animation, use the <code>shouldAnimate</code> property.146     *147     * @returns {JulianDate} The new value of the <code>currentTime</code> property.148     */149    Clock.prototype.tick = function() {150        var currentSystemTime = getTimestamp();151        var currentTime = JulianDate.clone(this.currentTime);152        var startTime = this.startTime;153        var stopTime = this.stopTime;154        var multiplier = this.multiplier;155        if (this.canAnimate && this.shouldAnimate) {156            if (this.clockStep === ClockStep.SYSTEM_CLOCK) {157                currentTime = JulianDate.now(currentTime);158            } else {159                if (this.clockStep === ClockStep.TICK_DEPENDENT) {160                    currentTime = JulianDate.addSeconds(currentTime, multiplier, currentTime);161                } else {162                    var milliseconds = currentSystemTime - this._lastSystemTime;163                    currentTime = JulianDate.addSeconds(currentTime, multiplier * (milliseconds / 1000.0), currentTime);164                }165                if (this.clockRange === ClockRange.CLAMPED) {166                    if (JulianDate.lessThan(currentTime, startTime)) {167                        currentTime = JulianDate.clone(startTime, currentTime);168                    } else if (JulianDate.greaterThan(currentTime, stopTime)) {169                        currentTime = JulianDate.clone(stopTime, currentTime);170                    }171                } else if (this.clockRange === ClockRange.LOOP_STOP) {172                    if (JulianDate.lessThan(currentTime, startTime)) {173                        currentTime = JulianDate.clone(startTime, currentTime);174                    }175                    while (JulianDate.greaterThan(currentTime, stopTime)) {176                        currentTime = JulianDate.addSeconds(startTime, JulianDate.secondsDifference(currentTime, stopTime), currentTime);177                    }178                }179            }180        }181        this.currentTime = currentTime;182        this._lastSystemTime = currentSystemTime;183        this.onTick.raiseEvent(this);184        return currentTime;185    };186    return Clock;...index.js
Source:index.js  
1var goku = new Audio('sounds/0.mp3')2var zerotwo = new Audio('sounds/1.mp3')3var kaguya = new Audio('sounds/2.mp3')4var yumeko = new Audio('sounds/3.mp3')5var hori = new Audio('sounds/4.mp3')6var marin = new Audio('sounds/5.mp3')7var mai = new Audio('sounds/6.mp3')8var jinx = new Audio('sounds/7.mp3')9document.addEventListener("keypress", function(e) {10    makesound(e.key)11    animationyep(e.key)12})13var numdrum = document.querySelectorAll(".drum").length14for (var i = 0; i < numdrum; i++) {15    document.querySelectorAll(".drum")[i].addEventListener("click", function() {16        var btninner = this.innerHTML17        makesound(btninner)18        animationyep(btninner)19    })20}21function makesound(key) {22    switch (key) {23        case "w":24            goku.pause()25            zerotwo.pause()26            kaguya.pause()27            yumeko.pause()28            hori.pause()29            marin.pause()30            mai.pause()31            jinx.pause()32            goku.currentTime = 033            zerotwo.currentTime = 034            kaguya.currentTime = 035            yumeko.currentTime = 036            hori.currentTime = 037            marin.currentTime = 038            mai.currentTime = 039            jinx.currentTime = 040            goku.play()41            42            break43            44        case "a":45            goku.pause()46            zerotwo.pause()47            kaguya.pause()48            yumeko.pause()49            hori.pause()50            marin.pause()51            mai.pause()52            jinx.pause()53            goku.currentTime = 054            zerotwo.currentTime = 055            kaguya.currentTime = 056            yumeko.currentTime = 057            hori.currentTime = 058            marin.currentTime = 059            mai.currentTime = 060            jinx.currentTime = 061            62            zerotwo.play()63            break64        case "s":65            goku.pause()66            zerotwo.pause()67            kaguya.pause()68            yumeko.pause()69            hori.pause()70            marin.pause()71            mai.pause()72            jinx.pause()73            goku.currentTime = 074            zerotwo.currentTime = 075            kaguya.currentTime = 076            yumeko.currentTime = 077            hori.currentTime = 078            marin.currentTime = 079            mai.currentTime = 080            jinx.currentTime = 081            82            kaguya.play()83            break84        case "d":85            goku.pause()86            zerotwo.pause()87            kaguya.pause()88            yumeko.pause()89            hori.pause()90            marin.pause()91            mai.pause()92            jinx.pause()93            goku.currentTime = 094            zerotwo.currentTime = 095            kaguya.currentTime = 096            yumeko.currentTime = 097            hori.currentTime = 098            marin.currentTime = 099            mai.currentTime = 0100            jinx.currentTime = 0101            102            yumeko.play()103            break104        case "i":105            goku.pause()106            zerotwo.pause()107            kaguya.pause()108            yumeko.pause()109            hori.pause()110            marin.pause()111            mai.pause()112            jinx.pause()113            goku.currentTime = 0114            zerotwo.currentTime = 0115            kaguya.currentTime = 0116            yumeko.currentTime = 0117            hori.currentTime = 0118            marin.currentTime = 0119            mai.currentTime = 0120            jinx.currentTime = 0121            122            hori.play()123            break124        case "j":125            goku.pause()126            zerotwo.pause()127            kaguya.pause()128            yumeko.pause()129            hori.pause()130            marin.pause()131            mai.pause()132            jinx.pause()133            goku.currentTime = 0134            zerotwo.currentTime = 0135            kaguya.currentTime = 0136            yumeko.currentTime = 0137            hori.currentTime = 0138            marin.currentTime = 0139            mai.currentTime = 0140            jinx.currentTime = 0141            142            marin.play()143            break144        case "k":145            goku.pause()146            zerotwo.pause()147            kaguya.pause()148            yumeko.pause()149            hori.pause()150            marin.pause()151            mai.pause()152            jinx.pause()153            goku.currentTime = 0154            zerotwo.currentTime = 0155            kaguya.currentTime = 0156            yumeko.currentTime = 0157            hori.currentTime = 0158            marin.currentTime = 0159            mai.currentTime = 0160            jinx.currentTime = 0161            162            mai.play()163            break164        case "l":165            goku.pause()166            zerotwo.pause()167            kaguya.pause()168            yumeko.pause()169            hori.pause()170            marin.pause()171            mai.pause()172            jinx.pause()173            goku.currentTime = 0174            zerotwo.currentTime = 0175            kaguya.currentTime = 0176            yumeko.currentTime = 0177            hori.currentTime = 0178            marin.currentTime = 0179            mai.currentTime = 0180            jinx.currentTime = 0181            182            jinx.play()183            break184        185        default:186            goku.pause()187            zerotwo.pause()188            kaguya.pause()189            yumeko.pause()190            hori.pause()191            marin.pause()192            mai.pause()193            jinx.pause()194            goku.currentTime = 0195            zerotwo.currentTime = 0196            kaguya.currentTime = 0197            yumeko.currentTime = 0198            hori.currentTime = 0199            marin.currentTime = 0200            mai.currentTime = 0201            jinx.currentTime = 0202            203            break204        205    }206}207function animationyep(btninner) {208    var actbtn = document.querySelector("." + btninner)209    actbtn.classList.add("pressed")210    setTimeout(function() {211        actbtn.classList.remove("pressed")212    }, 500)...Transition.js
Source:Transition.js  
1var Transition = (function (Math) {2    "use strict";3    function linearTweening(currentTime, startValue, changeInValue, duration) {4        return changeInValue * currentTime / duration + startValue;5    }6    function exponentialEasingInAndOut(currentTime, startValue, changeInValue, duration) {7        if (currentTime == 0)8            return startValue;9        if (currentTime == duration)10            return startValue + changeInValue;11        if ((currentTime /= duration / 2) < 1)12            return changeInValue / 2 * Math.pow(2, 10 * (currentTime - 1)) + startValue;13        return changeInValue / 2 * (-Math.pow(2, -10 * --currentTime) + 2) + startValue;14    }15    function elasticEasingInAndOut(currentTime, startValue, changeInValue, duration) {16        if (currentTime == 0)17            return startValue;18        if ((currentTime /= duration) == 1)19            return startValue + changeInValue;20        var period = duration * .3, s = changeInValue < Math.abs(changeInValue) ? period / 4 :21        period / (2 * Math.PI) * Math.asin(changeInValue / changeInValue);22        return changeInValue * Math.pow(2, -10 * currentTime) *23            Math.sin((currentTime * duration - s) * (2 * Math.PI) / period) + changeInValue + startValue;24    }25    function elasticEasingOut(currentTime, startValue, changeInValue, duration) {26        if (currentTime == 0) {27            return startValue;28        }29        if ((currentTime /= duration) == 1) {30            return startValue + changeInValue;31        }32        var period = duration * .3;33        var s;34        if (changeInValue < Math.abs(changeInValue)) {35            s = period / 4;36        } else {37            s = period / (2 * Math.PI) * Math.asin(changeInValue / changeInValue);38        }39        return changeInValue * Math.pow(2, -10 * currentTime) *40            Math.sin((currentTime * duration - s) * (2 * Math.PI) / period) + changeInValue + startValue;41    }42    function quadraticEasingInAndOut(currentTime, startValue, changeInValue, duration) {43        if ((currentTime /= duration / 2) < 1) {44            return changeInValue / 2 * currentTime * currentTime + startValue;45        }46        return -changeInValue / 2 * ((--currentTime) * (currentTime - 2) - 1) + startValue;47    }48    function exponentialEasingIn(currentTime, startValue, changeInValue, duration) {49        if (currentTime != 0) {50            return changeInValue * Math.pow(2, 10 * (currentTime / duration - 1)) + startValue;51        }52        return startValue;53    }54    function exponentialEasingOut(currentTime, startValue, changeInValue, duration) {55        if (currentTime == duration) {56            return startValue + changeInValue;57        } else {58            return changeInValue * (-Math.pow(2, -10 * currentTime / duration) + 1) + startValue;59        }60    }61    function quadraticEasingIn(currentTime, startValue, changeInValue, duration) {62        return changeInValue * (currentTime /= duration) * currentTime + startValue;63    }64    function quadraticEasingOut(currentTime, startValue, changeInValue, duration) {65        return -changeInValue * (currentTime /= duration) * (currentTime - 2) + startValue;66    }67    //    not working :( ... don't copy random shit from the fucking internet68    function quinticEasingOutAndIn(currentTime, startValue, changeInValue, duration) {69        currentTime /= duration / 2;70        return changeInValue / 2 * (--currentTime * currentTime * currentTime * currentTime * currentTime + 1) +71            startValue;72    }73    function sinusoidalEasingOutAndIn(currentTime, startValue, changeInValue, duration) {74        if ((currentTime /= duration / 2) < 1) return changeInValue / 2 * (Math.sin(Math.PI * currentTime / 2) ) +75            startValue;76        return -changeInValue / 2 * (Math.cos(Math.PI * --currentTime / 2) - 2) + startValue;77    }78    function sinusoidalEasingIn(currentTime, startValue, changeInValue, duration) {79        return -changeInValue / 2 * (Math.cos(Math.PI * currentTime / duration) - 1) + startValue;80    }81    function sinusoidalEasingOut(currentTime, startValue, changeInValue, duration) {82        return changeInValue * Math.sin(currentTime / duration * (Math.PI / 2)) + startValue;83    }84    // sinusoidal easing in/out - accelerating until halfway, then decelerating85    function sinusoidalEasingInAndOut(currentTime, startValue, changeInValue, duration) {86        return -changeInValue / 2 * (Math.cos(Math.PI * currentTime / duration) - 1) + startValue;87    }88    function bouncingEasingOut(currentTime, startValue, changeInValue, duration) {89        if ((currentTime /= duration) < (1 / 2.75)) {90            return changeInValue * (7.5625 * currentTime * currentTime) + startValue;91        } else if (currentTime < (2 / 2.75)) {92            return changeInValue * (7.5625 * (currentTime -= (1.5 / 2.75)) * currentTime + .75) + startValue;93        } else if (currentTime < (2.5 / 2.75)) {94            return changeInValue * (7.5625 * (currentTime -= (2.25 / 2.75)) * currentTime + .9375) + startValue;95        } else {96            return changeInValue * (7.5625 * (currentTime -= (2.625 / 2.75)) * currentTime + .984375) + startValue;97        }98    }99    return {100        LINEAR: linearTweening,101        EASE_OUT_BOUNCE: bouncingEasingOut,102        EASE_OUT_ELASTIC: elasticEasingOut,103        EASE_IN_OUT_ELASTIC: elasticEasingInAndOut,104        EASE_IN_EXPO: exponentialEasingIn,105        EASE_OUT_EXPO: exponentialEasingOut,106        EASE_IN_OUT_EXPO: exponentialEasingInAndOut,107        EASE_IN_QUAD: quadraticEasingIn,108        EASE_OUT_QUAD: quadraticEasingOut,109        EASE_IN_OUT_QUAD: quadraticEasingInAndOut,110        EASE_OUT_IN_QUINT: quinticEasingOutAndIn,111        EASE_IN_SIN: sinusoidalEasingIn,112        EASE_OUT_SIN: sinusoidalEasingOut,113        EASE_OUT_IN_SIN: sinusoidalEasingOutAndIn,114        EASE_IN_OUT_SIN: sinusoidalEasingInAndOut115    };...script.js
Source:script.js  
1moment(Date);2$("#todaysDate").text(moment().format('dddd MMMM Do YYYY, h:mm a'));3var currentTime = moment();4// the following line of code changes the current time to the most recent hour, i.e. 9:30 is read as 9:005currentTime = currentTime.startOf("hour");6//the following line of code adds 9 to "start of day" so that the day starts at 9am (start of work day)7var before = moment().startOf("day").add(9, "hours");8//the following code is for the time blocks, one for each hour from 9am-5pm. 9var timeSlot1 = before.add(0, "h");10timeSlot1 = timeSlot1.format('hh:mm A');11$(".block1").text(timeSlot1);12var timeSlot2 = before.add(1, "h");13timeSlot2 = timeSlot2.format('hh:mm A');14$(".block2").text(timeSlot2);15var  timeSlot3 = before.add(1, "h");16 timeSlot3 =  timeSlot3.format('hh:mm A');17$(".block3").text(timeSlot3);18var  timeSlot4 = before.add(1, "h");19 timeSlot4 =  timeSlot4.format('hh:mm A');20$(".block4").text(timeSlot4);21var  timeSlot5 = before.add(1, "h");22 timeSlot5 =  timeSlot5.format('hh:mm A');23$(".block5").text(timeSlot5);24var  timeSlot6 = before.add(1, "h");25 timeSlot6 =  timeSlot6.format('hh:mm A');26$(".block6").text(timeSlot6);27var  timeSlot7 = before.add(1, "h");28 timeSlot7 =  timeSlot7.format('hh:mm A')29$(".block7").text(timeSlot7);30var  timeSlot8 = before.add(1, "h");31 timeSlot8 =  timeSlot8.format('hh:mm A');32$(".block8").text(timeSlot8);33var timeSlot9 = before.add(1, "h");34 timeSlot9 =  timeSlot9.format('hh:mm A');35$(".block9").text(timeSlot9); 36//the following function compares the "hour" in the above time slots to the current time. A class of past, present, or future is given to 'var currentTime'.37// just like above where we added 9 hours to make 9am the start of the day, we are adding hours to the various time slots. 38//".form" is named based on the actual time. for example, "timeSlot8" is for the 4pm hour, and ".form4" is used.39function timeTest() {40    timeSlot1 = moment().startOf('day').add(9, "hours");41    currentTime = currentTime.startOf("hour");42    if (currentTime.isAfter(timeSlot1)) {43        $(".form9").addClass("past");44    }else if (currentTime.isBefore(timeSlot1)) {45        $(".form9").addClass("future");46    }else if (currentTime.isSame(timeSlot1)) {47        $(".form9").addClass("present");48    };49    timeSlot2 = moment().startOf('day').add(10, "hours");50currentTime = currentTime.startOf("hour");51if (currentTime.isAfter(timeSlot2)) {52    $(".form10").addClass("past");53}54else if (currentTime.isBefore(timeSlot2)) {55    $(".form10").addClass("future");56}57else if (currentTime.isSame(timeSlot2)) {58    $(".form10").addClass("present");59};60timeSlot3 = moment().startOf('day').add(11, "hours");61currentTime = currentTime.startOf("hour");62if (currentTime.isAfter(timeSlot3)) {63$(".form11").addClass("past");64}65else if (currentTime.isBefore(timeSlot3)) {66$(".form11").addClass("future");67}68else if (currentTime.isSame(timeSlot3)) {69$(".form11").addClass("present");70};71timeSlot4 = moment().startOf('day').add(12, "hours");72currentTime = currentTime.startOf("hour");73if (currentTime.isAfter(timeSlot4)) {74$(".form12").addClass("past");75}76else if (currentTime.isBefore(timeSlot4)) {77$(".form12").addClass("future");78}79else if (currentTime.isSame(timeSlot4)) {80$(".form12").addClass("present");81};82timeSlot5 = moment().startOf('day').add(13, "hours");83currentTime = currentTime.startOf("hour");84if (currentTime.isAfter(timeSlot5)) {85$(".form1").addClass("past");86}87else if (currentTime.isBefore(timeSlot5)) {88$(".form1").addClass("future");89}90else if (currentTime.isSame(timeSlot5)) {91$(".form1").addClass("present");92};93timeSlot6 = moment().startOf('day').add(14, "hours");94currentTime = currentTime.startOf("hour");95if (currentTime.isAfter(timeSlot6)) {96$(".form2").addClass("past");97}98else if (currentTime.isBefore(timeSlot6)) {99$(".form2").addClass("future");100}101else if (currentTime.isSame(timeSlot6)) {102$(".form2").addClass("present");103};104timeSlot7 = moment().startOf('day').add(15, "hours");105currentTime = currentTime.startOf("hour");106if (currentTime.isAfter(timeSlot7)) {107$(".form3").addClass("past");108}109else if (currentTime.isBefore(timeSlot7)) {110$(".form3").addClass("future");111}112else if (currentTime.isSame(timeSlot7)) {113$(".form3").addClass("present");114};115timeSlot8 = moment().startOf('day').add(16, "hours");116currentTime = currentTime.startOf("hour");117if (currentTime.isAfter(timeSlot8)) {118$(".form4").addClass("past");119}120else if (currentTime.isBefore(timeSlot8)) {121$(".form4").addClass("future");122}123else if (currentTime.isSame(timeSlot8)) {124$(".form4").addClass("present");125};126timeSlot9 = moment().startOf('day').add(16, "hours");127currentTime = currentTime.startOf("hour");128if (currentTime.isAfter(timeSlot9)) {129    $(".form5").addClass("past");130    }131    else if (currentTime.isBefore(timeSlot9)) {132    $(".form5").addClass("future");133    }134    else if (currentTime.isSame(timeSlot9)) {135    $(".form5").addClass("present");136  };137}138timeTest();139//the following for loop cycles through the input area to get item from local storage.140var x = [9, 10, 11, 12, 1, 2, 3, 4, 5];141for (var i = 0; i < x.length; i++) {142    var localHour = localStorage.getItem(x[i]);143    $(".form" + x[i]).val(localHour);144} 145// the following code saves input to local storage when the ".saveBtn" is clicked146    $(".saveBtn").click(function() {147        event.preventDefault();148        var form = $(this).siblings(".form-control").val();149        var list =$(this).parent().data("hour");150        localStorage.setItem(list, form);151    });...Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3    const browser = await chromium.launch();4    const context = await browser.newContext();5    const page = await context.newPage();6    const time = await page.evaluate(() => window.playwright.currentTime());7    console.log(time);8    await browser.close();9})();10const { chromium } = require('playwright');11(async () => {12    const browser = await chromium.launch();13    const context = await browser.newContext();14    await browser.close();15})();16const { chromium } = require('playwright');17(async () => {18    const browser = await chromium.launch();19    const context = await browser.newContext({20        viewport: {21        },22    });23    await browser.close();24})();25const { chromium } = require('playwright');26(async () => {27    const browser = await chromium.launch();28    const context = await browser.newContext({29        userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',30    });31    await browser.close();32})();33const { chromiumUsing AI Code Generation
1const playwright = require('playwright');2(async () => {3  const browser = await playwright.chromium.launch();4  const context = await browser.newContext();5  const page = await context.newPage();6  console.log(await page.evaluate(() => window.performance.now()));7  await browser.close();8})();Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3  const browser = await chromium.launch();4  const context = await browser.newContext();5  const page = await context.newPage();6  const startTime = await page.evaluate(() => window.performance.now());7  const endTime = await page.evaluate(() => window.performance.now());8  console.log(`Page loaded in ${endTime - startTime} ms`);9  await browser.close();10})();11const { chromium } = require('playwright');12(async () => {13  const browser = await chromium.launch();14  const context = await browser.newContext();15  const page = await context.newPage();16  const startTime = await page.evaluate(() => window.performance.now());17  const currentTime = await page.evaluate(() => window.performance.currentTime());18  console.log(`Current time is ${currentTime}`);19  await browser.close();20})();21const { chromium } = require('playwright');22(async () => {23  const browser = await chromium.launch();24  const context = await browser.newContext();25  const page = await context.newPage();26  const startTime = await page.evaluate(() => window.performance.now());27  const currentTime = await page.evaluate(() => window.performance.now());28  console.log(`Current time is ${currentTime}`);29  await browser.close();30})();Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3  const browser = await chromium.launch();4  const page = await browser.newPage();5  console.log(await page.evaluate(() => window.playwright.currentTime()));6  await browser.close();7})();8#### playwright.currentTime()Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3  const browser = await chromium.launch({ headless: false });4  const page = await browser.newPage();5  let time = await page.evaluate(() => window.playwright.currentTime());6  console.log(time);7  await browser.close();8})();9const { chromium } = require('playwright');10(async () => {11  const browser = await chromium.launch({ headless: false });12  const page = await browser.newPage();13  await page.waitForTimeout(10000);14  await browser.close();15})();16const { chromium } = require('playwright');17(async () => {18  const browser = await chromium.launch({ headless: false });19  const page = await browser.newPage();20  page.on('console', msg => console.log('PAGE LOG:', msg.text()));21  await page.evaluate(() => console.log(`url is ${location.href}`));22  await browser.close();23})();24const { chromium } = require('playwright');25(async () => {26  const browser = await chromium.launch({ headless: false });27  const page = await browser.newPage();28  await page.waitForFunction('window.innerWidth < 100');29  await browser.close();30})();31const { chromium } = require('playwright');32(async () => {33  const browser = await chromium.launch({ headless: false });34  const page = await browser.newPage();35  const [request] = await Promise.all([36    page.waitForRequest(request => request.url().includes('wikipedia.org')),37    page.click('a'),38  ]);39  console.log(request.url());40  await browser.close();41})();Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3  const browser = await chromium.launch();4  const page = await browser.newPage();5  const time = await page.evaluate(() => {6    return window.performance.now();7  });8  console.log(time);9  await browser.close();10})();11const { chromium } = require('playwright');12(async () => {13  const browser = await chromium.launch();14  const page = await browser.newPage();15  await browser.close();16})();17const { chromium } = require('playwright');18(async () => {19  const browser = await chromium.launch();20  const page = await browser.newPage();21  const frames = await page.frames();22  for (const frame of frames) {23    const content = await frame.textContent('h1');24    console.log(content);25  }26  await browser.close();27})();28const { chromium } = require('playwright');29(async () => {30  const browser = await chromium.launch();Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3  const browser = await chromium.launch({ headless: false, slowMo: 50 });4  const context = await browser.newContext();5  const page = await context.newPage();6  await page.screenshot({ path: `google.png` });7  await page.waitForTimeout(5000);8  await page.screenshot({ path: `google2.png` });9  await browser.close();10})();LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!
