goog.provide('ol.test.geom.MultiLineString');

describe('ol.geom.MultiLineString', function() {

  describe('constructor', function() {

    it('creates a multi-linestring from an array', function() {
      var multi = new ol.geom.MultiLineString([
        [[10, 20], [30, 40]],
        [[20, 30], [40, 50]]]);
      expect(multi).to.be.a(ol.geom.MultiLineString);
      expect(multi).to.be.a(ol.geom.Geometry);
    });

    it('throws when given with insufficient dimensions', function() {
      expect(function() {
        var multi = new ol.geom.MultiLineString([1]);
        multi = multi; // suppress gjslint warning about unused variable
      }).to.throwException();
    });

  });

  describe('#components', function() {

    it('is an array of linestrings', function() {
      var multi = new ol.geom.MultiLineString([
        [[10, 20], [30, 40]],
        [[20, 30], [40, 50]]]);

      expect(multi.components.length).to.be(2);
      expect(multi.components[0]).to.be.a(ol.geom.LineString);
      expect(multi.components[1]).to.be.a(ol.geom.LineString);

    });

  });

  describe('#dimension', function() {

    it('can be 2', function() {
      var multi = new ol.geom.MultiLineString([
        [[10, 20], [30, 40]],
        [[20, 30], [40, 50]]]);
      expect(multi.dimension).to.be(2);
    });

    it('can be 3', function() {
      var multi = new ol.geom.MultiLineString([
        [[10, 20, 30], [30, 40, 50]],
        [[20, 30, 40], [40, 50, 60]]]);
      expect(multi.dimension).to.be(3);
    });

  });

  describe('#getBounds()', function() {

    it('returns the bounding extent', function() {
      var multi = new ol.geom.MultiLineString([
        [[10, 20], [30, 40]],
        [[20, 30], [40, 50]]]);
      var bounds = multi.getBounds();
      expect(bounds[0]).to.be(10);
      expect(bounds[1]).to.be(40);
      expect(bounds[2]).to.be(20);
      expect(bounds[3]).to.be(50);
    });

  });

  describe('#getCoordinates', function() {

    it('returns an array', function() {
      var coordinates = [
        [[10, 20], [30, 40]],
        [[20, 30], [40, 50]]
      ];
      var multi = new ol.geom.MultiLineString(coordinates);
      expect(multi.getCoordinates()).to.eql(coordinates);
    });

  });

});

goog.require('ol.geom.Geometry');
goog.require('ol.geom.LineString');
goog.require('ol.geom.MultiLineString');
