describe('Background', function() {
    var c, d;

    beforeEach(function() {
        d = d3.select(document.createElement('div'));
        c = iD.Background(d).projection(d3.geo.mercator());
        d.call(c);
    });

    afterEach(function() {
        d.remove();
    });

    describe('iD.Background', function() {
        it('is instantiated', function() {
            expect(c).to.be.ok;
        });

        it('#size', function() {
            expect(c.size([100, 100])).to.equal(c);
            expect(c.size()).to.eql([100,100]);
        });

        it('#source', function() {
            expect(c.source(iD.BackgroundSource.Bing)).to.equal(c);
            expect(c.source()).to.equal(iD.BackgroundSource.Bing);
        });
    });

    describe('iD.BackgroundSource.Bing', function() {
        it('generates tiles', function() {
            expect(iD.BackgroundSource.Bing([0,0,0])).to.equal('http://ecn.t0.tiles.virtualearth.net/tiles/a.jpeg?g=587&mkt=en-gb&n=z');
        });
    });

    describe('iD.BackgroundSource.Template', function() {
        it('generates a tile-generating source', function() {
            var source = iD.BackgroundSource.template('{z}/{x}/{y}');
            expect(source([0,1,2])).to.equal('2/0/1');
        });
        it('supports subdomains', function() {
            var source = iD.BackgroundSource.template('{t}/{z}/{x}/{y}', ['apples', 'oranges']);
            expect(source([0,1,2])).to.equal('apples/2/0/1');
        });
        it('distributes requests between subdomains', function() {
            var source = iD.BackgroundSource.template('{t}/{z}/{x}/{y}', ['apples', 'oranges']);
            expect(source([0,1,1])).to.equal('oranges/1/0/1');
        });
    });

});
