defineSuite([
        'Widgets/Animation/Animation',
        'Core/defined',
        'Specs/pollToPromise',
        'Widgets/Animation/AnimationViewModel',
        'Widgets/ClockViewModel'
    ], function(
        Animation,
        defined,
        pollToPromise,
        AnimationViewModel,
        ClockViewModel) {
    'use strict';

    var container;
    var animation;
    afterEach(function() {
        if (defined(animation)) {
            animation = animation.destroy();
        }
        if (defined(container) && defined(container.parentNode)) {
            container.parentNode.removeChild(container);
        }
    });
        var clockViewModel = new ClockViewModel();
        var animationViewModel = new AnimationViewModel(clockViewModel);
        animation = new Animation(document.body, animationViewModel);
    });

    it('Can create with container not in the DOM', function() {
        container = document.createElement('div');
        var clockViewModel = new ClockViewModel();
        var animationViewModel = new AnimationViewModel(clockViewModel);
        var animation = new Animation(container, animationViewModel);

        //Verify applyThemeChanges is called when we add the container to the DOM.
        spyOn(animation, 'applyThemeChanges').and.callThrough();
        document.body.appendChild(container);

        //This is done via polling because we can't control when the DOM decides to
        //fire the Mutation event.
        return pollToPromise(function() {
            return animation.applyThemeChanges.calls.count() === 1;
        });
    });

    it('Can destroy without container ever being in the DOM', function() {
        container = document.createElement('div');
        var clockViewModel = new ClockViewModel();
        var animationViewModel = new AnimationViewModel(clockViewModel);
        animation = new Animation(container, animationViewModel);
    });
});

    it('Can create and destroy', function() {