Julian Yuste преди 7 години
родител
ревизия
b11d6e20b0
променени са 4 файла, в които са добавени 80 реда и са изтрити 3 реда
  1. 1 1
      src/js/select2/data/select.js
  2. 12 2
      tests/data/array-tests.js
  3. 65 0
      tests/data/select-tests.js
  4. 2 0
      tests/unit.html

+ 1 - 1
src/js/select2/data/select.js

@@ -244,7 +244,7 @@ define([
   };
 
   SelectAdapter.prototype._normalizeItem = function (item) {
-    if (!$.isPlainObject(item)) {
+    if(item !== Object(item)){
       item = {
         id: item,
         text: item

+ 12 - 2
tests/data/array-tests.js

@@ -4,6 +4,15 @@ var ArrayData = require('select2/data/array');
 var $ = require('jquery');
 var Options = require('select2/options');
 
+var UserDefinedType = function( id, text ){
+  var self=this;
+
+  self.id=id;
+  self.text=text;
+  
+  return self;
+};
+
 var arrayOptions = new Options({
   data: [
     {
@@ -17,7 +26,8 @@ var arrayOptions = new Options({
     {
       id: '2',
       text: '2'
-    }
+    },
+    new UserDefinedType(1, 'aaaaaa')
   ]
 });
 
@@ -216,7 +226,7 @@ test('option tags are automatically generated', function (assert) {
 
   assert.equal(
     $select.find('option').length,
-    3,
+    4,
     'An <option> element should be created for each object'
   );
 });

+ 65 - 0
tests/data/select-tests.js

@@ -487,3 +487,68 @@ test('select option construction accepts id="" (empty string) value',
     'Built option value should be an empty string.'
   );
 });
+
+test('user-defined types are normalized properly', function (assert) {
+  var $select = $('#qunit-fixture .user-defined'),
+
+  UserDefinedType = function( id, text ){
+    var self=this;
+
+    self.id=id;
+    self.text=text;
+    
+    return self;
+  };
+
+  var testData = [
+    'Test',
+    {
+        id: 4,
+        text: 'item'
+    },
+    new UserDefinedType(1, 'aaaaaa')
+];
+
+  var data = new SelectData($select, selectOptions);
+
+  var normalizedItem = data._normalizeItem(testData[0]);
+  var normalizedItem2 = data._normalizeItem(testData[1]);
+  var normalizedItem3 = data._normalizeItem(testData[2]);
+  
+  assert.equal(
+    testData[0],
+    normalizedItem.id,
+    'id property should be equal to text after normalize'
+  );
+
+  assert.equal(
+    testData[0],
+    normalizedItem.text,
+    'text property should be equal after normalize'
+  );
+
+  assert.equal(
+    testData[1].id,
+    normalizedItem2.id,
+    'id property should be equal after normalize'
+  );
+
+  assert.equal(
+    testData[1].text,
+    normalizedItem2.text,
+    'text property should be equal after normalize'
+  );
+
+  assert.equal(
+    testData[2].id,
+    normalizedItem3.id,
+    'id property should be equal after normalize'
+  );
+
+  assert.equal(
+    testData[2].text,
+    normalizedItem3.text,
+    'text property should be equal after normalize'
+  );
+
+});

+ 2 - 0
tests/unit.html

@@ -46,6 +46,8 @@
         <option value="two">Two</option>
         <option value="one">Uno</option>
       </select>
+
+      <select class="user-defined"></select>
     </div>
 
     <script src="vendor/qunit-1.23.1.js" type="text/javascript"></script>