describe 'XMLHttpRequest', -> describe '.nodejsSet', -> beforeEach -> @xhr = new XMLHttpRequest @customXhr = new XMLHttpRequest describe 'with a httpAgent option', -> beforeEach -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. @customAgent = { custom: 'httpAgent' } @customXhr.nodejsHttpAgent = @customAgent @default = XMLHttpRequest::nodejsHttpAgent @agent = { mocking: 'httpAgent' } XMLHttpRequest.nodejsSet httpAgent: @agent it 'sets the default nodejsHttpAgent', -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. expect(@xhr.nodejsHttpAgent).to.equal @agent it 'does not interfere with custom nodejsHttpAgent settings', -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. expect(@customXhr.nodejsHttpAgent).to.equal @customAgent afterEach -> XMLHttpRequest.nodejsSet httpAgent: @default describe 'with a httpsAgent option', -> beforeEach -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. @customAgent = { custom: 'httpsAgent' } @customXhr.nodejsHttpsAgent = @customAgent @default = XMLHttpRequest::nodejsHttpsAgent @agent = { mocking: 'httpsAgent' } XMLHttpRequest.nodejsSet httpsAgent: @agent it 'sets the default nodejsHttpsAgent', -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. expect(@xhr.nodejsHttpsAgent).to.equal @agent it 'does not interfere with custom nodejsHttpsAgent settings', -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. expect(@customXhr.nodejsHttpsAgent).to.equal @customAgent afterEach -> XMLHttpRequest.nodejsSet httpsAgent: @default describe 'with a baseUrl option', -> beforeEach -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. @customBaseUrl = 'http://custom.url/base' @customXhr.nodejsBaseUrl = @customBaseUrl @default = XMLHttpRequest::nodejsBaseUrl @baseUrl = 'http://localhost/base' XMLHttpRequest.nodejsSet baseUrl: @baseUrl it 'sets the default nodejsBaseUrl', -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. expect(@xhr.nodejsBaseUrl).to.equal @baseUrl it 'does not interfere with custom nodejsBaseUrl settings', -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. expect(@customXhr.nodejsBaseUrl).to.equal @customBaseUrl afterEach -> XMLHttpRequest.nodejsSet baseUrl: @default describe '#nodejsSet', -> beforeEach -> @xhr = new XMLHttpRequest @customXhr = new XMLHttpRequest describe 'with a httpAgent option', -> beforeEach -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. @customAgent = { custom: 'httpAgent' } @customXhr.nodejsSet httpAgent: @customAgent it 'sets nodejsHttpAgent on the XHR instance', -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. expect(@customXhr.nodejsHttpAgent).to.equal @customAgent it 'does not interfere with default nodejsHttpAgent settings', -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. expect(@xhr.nodejsHttpAgent).not.to.equal @customAgent describe 'with a httpsAgent option', -> beforeEach -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. @customAgent = { custom: 'httpsAgent' } @customXhr.nodejsSet httpsAgent: @customAgent it 'sets nodejsHttpsAgent on the XHR instance', -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. expect(@customXhr.nodejsHttpsAgent).to.equal @customAgent it 'does not interfere with default nodejsHttpsAgent settings', -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. expect(@xhr.nodejsHttpsAgent).not.to.equal @customAgent describe 'base URL parsing', -> beforeEach -> @xhr = new XMLHttpRequest describe 'with null baseUrl', -> beforeEach -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. @xhr.nodejsSet baseUrl: null it 'parses an absolute URL', -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. parsedUrl = @xhr._parseUrl('http://www.domain.com/path') expect(parsedUrl).to.be.ok expect(parsedUrl).to.have.property 'href' expect(parsedUrl.href).to.equal 'http://www.domain.com/path' describe 'with a (protocol, domain, filePath) baseUrl', -> beforeEach -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. @xhr.nodejsSet baseUrl: 'https://base.url/dir/file.html' it 'parses an absolute URL', -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. parsedUrl = @xhr._parseUrl('http://www.domain.com/path') expect(parsedUrl).to.be.ok expect(parsedUrl).to.have.property 'href' expect(parsedUrl.href).to.equal 'http://www.domain.com/path' it 'parses a path-relative URL', -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. parsedUrl = @xhr._parseUrl('path/to.js') expect(parsedUrl).to.be.ok expect(parsedUrl).to.have.property 'href' expect(parsedUrl.href).to.equal 'https://base.url/dir/path/to.js' it 'parses a path-relative URL with ..', -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. parsedUrl = @xhr._parseUrl('../path/to.js') expect(parsedUrl).to.be.ok expect(parsedUrl).to.have.property 'href' expect(parsedUrl.href).to.equal 'https://base.url/path/to.js' it 'parses a host-relative URL', -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. parsedUrl = @xhr._parseUrl('/path/to.js') expect(parsedUrl).to.be.ok expect(parsedUrl).to.have.property 'href' expect(parsedUrl.href).to.equal 'https://base.url/path/to.js' it 'parses a protocol-relative URL', -> return unless XMLHttpRequest.nodejsSet # Skip in browsers. parsedUrl = @xhr._parseUrl('//domain.com/path/to.js') expect(parsedUrl).to.be.ok expect(parsedUrl).to.have.property 'href' expect(parsedUrl.href).to.equal 'https://domain.com/path/to.js'