define( [
	"qunit",
	"jquery",
	"lib/helper",
	"ui/widgets/progressbar"
], function( QUnit, $, helper ) {
"use strict";

QUnit.module( "progressbar: events", { afterEach: helper.moduleAfterEach }  );

QUnit.test( "create", function( assert ) {
	assert.expect( 1 );
	$( "#progressbar" ).progressbar( {
		value: 5,
		create: function() {
			assert.equal( $( this ).progressbar( "value" ), 5, "Correct value at create" );
		},
		change: function() {
			assert.ok( false, "create has triggered change()" );
		}
	} );
} );

QUnit.test( "change", function( assert ) {
	assert.expect( 2 );
	var element = $( "#progressbar" ).progressbar();

	element.one( "progressbarchange", function() {
		assert.equal( element.progressbar( "value" ), 5, "change triggered for middle value" );
	} );
	element.progressbar( "value", 5 );
	element.one( "progressbarchange", function() {
		assert.equal( element.progressbar( "value" ), 100, "change triggered for final value" );
	} );
	element.progressbar( "value", 100 );
} );

QUnit.test( "complete", function( assert ) {
	assert.expect( 5 );
	var value,
		changes = 0,
		element = $( "#progressbar" ).progressbar( {
			change: function() {
				changes++;
				assert.equal( element.progressbar( "value" ), value, "change at " + value );
			},
			complete: function() {
				assert.equal( changes, 3, "complete triggered after change and not on indeterminate" );
				assert.equal( element.progressbar( "value" ), 100, "value is 100" );
			}
		} );

	value = 5;
	element.progressbar( "value", value );
	value = false;
	element.progressbar( "value", value );
	value = 100;
	element.progressbar( "value", value );
} );

} );