import Ember from 'ember';
import { module, test } from '../helpers/setup';
import buildDeepEqual from 'couch/util/deep-equal';

const {
  RSVP: { resolve }
} = Ember;

let eq;

module('deep-equal', () => {
  eq = buildDeepEqual({ allowEmberObjects: false });
});

test('int', assert => {
  assert.ok(eq(1, 1));
  assert.ok(!eq(1, 2));
});

test('string', assert => {
  assert.ok(eq('a', 'a'));
  assert.ok(!eq('a', 'b'));
});

test('array', assert => {
  assert.ok(eq([ 'a', 'b' ], [ 'a', 'b' ]));
  assert.ok(!eq([ 'a', 'b' ], [ 'a' ]));
  assert.ok(!eq([ 'a', 'b' ], [ 'b', 'a' ]));
});

test('object', assert => {
  assert.ok(eq({ ok: true, foo: 'bar' }, { foo: 'bar', ok: true }));
  assert.ok(!eq({ ok: true }, { foo: 'bar', ok: true }));
  assert.ok(!eq({ ok: true, foo: 1 }, { foo: 'bar', ok: true }));
});

test('ember object', assert => {
  let object = Ember.Object.create();
  return resolve().then(() => {
    eq(object, object);
  }).then(() => {
    assert.ok(false, 'should reject');
  }, err => {
    assert.deepEqual(err.toJSON(), {
      "error": "deep-equal",
      "reason": "ember object instances are not allowed"
    });
  });
});

test('ember object with allowEmberObjects:true', assert => {
  eq = buildDeepEqual({ allowEmberObjects: true });
  let object = Ember.Object.create();
  assert.ok(eq(object, object));
  assert.ok(!eq(Ember.Object.create(), Ember.Object.create()));
});

@@ -33,20 +33,22 @@
 t %7B 
-module, test
+configurations
  %7D f
@@ -164,16 +164,75 @@
 Ember;%0A%0A
+configurations(%7B only: '1.6' %7D, (%7B module, test %7D) =%3E %7B%0A%0A  
 let eq;%0A
@@ -232,16 +232,18 @@
 et eq;%0A%0A
+  
 module('
@@ -259,24 +259,26 @@
 l', () =%3E %7B%0A
+  
   eq = build
@@ -314,29 +314,33 @@
 : false %7D);%0A
+  
 %7D);%0A%0A
+  
 test('int', 
@@ -345,32 +345,34 @@
 , assert =%3E %7B%0A  
+ 
+ 
 assert.ok(eq(1, 
@@ -374,24 +374,26 @@
 q(1, 1));%0A  
+ 
+ 
 assert.ok(!e
@@ -398,29 +398,33 @@
 !eq(1, 2));%0A
+  
 %7D);%0A%0A
+  
 test('string
@@ -430,32 +430,34 @@
 g', assert =%3E %7B%0A
+  
   assert.ok(eq('
@@ -463,24 +463,26 @@
 'a', 'a'));%0A
+  
   assert.ok(
@@ -493,29 +493,33 @@
 'a', 'b'));%0A
+  
 %7D);%0A%0A
+  
 test('array'
@@ -524,32 +524,34 @@
 y', assert =%3E %7B%0A
+  
   assert.ok(eq(%5B
@@ -573,32 +573,34 @@
 'a', 'b' %5D));%0A  
+ 
+ 
 assert.ok(!eq(%5B 
@@ -618,24 +618,26 @@
  %5B 'a' %5D));%0A
+  
   assert.ok(
@@ -666,29 +666,33 @@
 ', 'a' %5D));%0A
+  
 %7D);%0A%0A
+  
 test('object
@@ -706,16 +706,18 @@
 rt =%3E %7B%0A
+  
   assert
@@ -769,32 +769,34 @@
 , ok: true %7D));%0A
+  
   assert.ok(!eq(
@@ -833,24 +833,26 @@
 : true %7D));%0A
+  
   assert.ok(
@@ -905,21 +905,25 @@
 ue %7D));%0A
+  
 %7D);%0A%0A
+  
 test('em
@@ -949,16 +949,18 @@
  =%3E %7B%0A  
+ 
+ 
 let obje
@@ -987,16 +987,18 @@
 eate();%0A
+  
   return
@@ -1025,16 +1025,18 @@
 %3E %7B%0A    
+ 
+ 
 eq(objec
@@ -1047,16 +1047,18 @@
 bject);%0A
+  
   %7D).the
@@ -1063,24 +1063,26 @@
 hen(() =%3E %7B%0A
+  
     assert.o
@@ -1108,16 +1108,18 @@
 ject');%0A
+  
   %7D, err
@@ -1120,24 +1120,26 @@
 %7D, err =%3E %7B%0A
+  
     assert.d
@@ -1169,16 +1169,18 @@
 %7B%0A      
+  
 %22error%22:
@@ -1194,16 +1194,18 @@
 equal%22,%0A
+  
       %22r
@@ -1261,23 +1261,31 @@
     
+  
 %7D);%0A  
+ 
+ 
 %7D);%0A
+  
 %7D);%0A%0A
+  
 test
@@ -1341,16 +1341,18 @@
 rt =%3E %7B%0A
+  
   eq = b
@@ -1395,16 +1395,18 @@
 rue %7D);%0A
+  
   let ob
@@ -1435,16 +1435,18 @@
 eate();%0A
+  
   assert
@@ -1470,16 +1470,18 @@
 ject));%0A
+  
   assert
@@ -1536,12 +1536,19 @@
 te()));%0A
+  %7D);%0A%0A
 %7D);%0A

add configurations for deep-equal-test