text: import EmberObject from '../../lib/system/object';
  import { AbstractTestCase } from 'internal-test-helpers';
  import { runArrayTests } from '../helpers/array';
  
  class FindTests extends AbstractTestCase {
    '@test find should invoke callback on each item as long as you return false'() {
      let obj = this.newObject();
      let ary = this.toArray(obj);
      let found = [];
      let result;
  
      result = obj.find(function(i) {
        found.push(i);
        return false;
      });
      this.assert.equal(result, undefined, 'return value of obj.find');
      this.assert.deepEqual(found, ary, 'items passed during find() should match');
    }
  
    '@test every should stop invoking when you return true'() {
      let obj = this.newObject();
      let ary = this.toArray(obj);
      let cnt = ary.length - 2;
      let exp = cnt;
      let found = [];
      let result;
  
      result = obj.find(function(i) {
        found.push(i);
        return --cnt >= 0;
      });
      this.assert.equal(result, ary[exp - 1], 'return value of obj.find');
      this.assert.equal(found.length, exp, 'should invoke proper number of times');
      this.assert.deepEqual(found, ary.slice(0, -2), 'items passed during find() should match');
    }
  }
  
  class FindByTests extends AbstractTestCase {
    '@test should return first object of property matches'() {
      let ary, obj;
  
      ary = [{ foo: 'foo', bar: 'BAZ' }, EmberObject.create({ foo: 'foo', bar: 'bar' })];
  
      obj = this.newObject(ary);
  
      this.assert.equal(obj.findBy('foo', 'foo'), ary[0], 'findBy(foo)');
      this.assert.equal(obj.findBy('bar', 'bar'), ary[1], 'findBy(bar)');
    }
  
    '@test should return first object with truthy prop'() {
      let ary, obj;
  
      ary = [{ foo: 'foo', bar: false }, EmberObject.create({ foo: 'bar', bar: true })];
  
      obj = this.newObject(ary);
  
      // different values - all eval to true
      this.assert.equal(obj.findBy('foo'), ary[0], 'findBy(foo)');
      this.assert.equal(obj.findBy('bar'), ary[1], 'findBy(bar)');
    }
  
    '@test should return first null property match'() {
      let ary, obj;
  
      ary = [{ foo: null, bar: 'BAZ' }, EmberObject.create({ foo: null, bar: null })];
  
      obj = this.newObject(ary);
  
      this.assert.equal(obj.findBy('foo', null), ary[0], "findBy('foo', null)");
      this.assert.equal(obj.findBy('bar', null), ary[1], "findBy('bar', null)");
    }
  
    '@test should return first undefined property match'() {
      let ary, obj;
  
      ary = [{ foo: undefined, bar: 'BAZ' }, EmberObject.create({})];
  
      obj = this.newObject(ary);
  
      this.assert.equal(obj.findBy('foo', undefined), ary[0], "findBy('foo', undefined)");
      this.assert.equal(obj.findBy('bar', undefined), ary[1], "findBy('bar', undefined)");
    }
  }
  
  runArrayTests('find', FindTests);
  runArrayTests('findBy', FindByTests);
  