| module('select2(val)');
var Utils = require('select2/utils');
test('multiple elements with arguments works', function (assert) {
  var $ = require('jquery');
  require('jquery.select2');
  var $first = $(
    '<select>' +
      '<option>1</option>' +
      '<option>2</option>' +
    '</select>'
  );
  var $second = $first.clone();
  var $both = $first.add($second);
  $both.select2();
  $both.select2('val', '2');
  assert.equal(
    $first.val(),
    '2',
    'The call should change the value on the first element'
  );
  assert.equal(
    $second.val(),
    '2',
    'The call should also change the value on the second element'
  );
});
test('initializes when jQuery $.data contains' +
  ' cyclic reference', function (assert) {
  var $ = require('jquery');
  require('jquery.select2');
  var $select = $(
    '<select>' +
      '<option>One</option>' +
      '<option>Two</option>' +
      '<option value="3" selected>Three</option>' +
    '</select>'
  );
  // Add a circular reference object using jQuery.
  var recursiveObject = {};
  recursiveObject.same =  recursiveObject;
  $select.data('same', recursiveObject);
  $select.select2();
  assert.equal(
    $select.val(),
    '3',
    'The option value should be pulled correctly'
  );
});
test('$element.data returns instance and options correctly', 
  function (assert) {
  var $ = require('jquery');
  require('jquery.select2');
  var $select = $(
  '<select>' +
    '<option value="1">One</option>' +
    '<option value="2">Two</option>' +
    '<option value="3" selected>Three</option>' +
  '</select>'
  );
  
  // Initialize.
  $select.select2({maximumSelectionLength: 2, multiple: true});
  
  assert.equal(
    $select.val(),
    '3',
    'Only 1 option should be pulled.'
  );
  // Try to resolve instance via .data('select2').
  var $instance = $select.data('select2'); 
  assert.ok($instance);
  assert.ok($instance.options);
  // Ensure $select.data('select2') is the same instance 
  // created by .select2()   
  assert.equal($instance, Utils.GetData($instance.$element[0], 
               'select2'));
   
  // Ensure initialized property matches.
  assert.equal($instance.options.options.maximumSelectionLength,
               2);
});
 |