188c88e8eSopenharmony_civar path = require('path')
288c88e8eSopenharmony_civar chai = require('chai')
388c88e8eSopenharmony_civar sinon = require('sinon')
488c88e8eSopenharmony_civar sinonChai = require('sinon-chai')
588c88e8eSopenharmony_civar expect = chai.expect
688c88e8eSopenharmony_cichai.use(sinonChai)
788c88e8eSopenharmony_ci
888c88e8eSopenharmony_civar md5 = require('md5')
988c88e8eSopenharmony_civar parseAndReplaceRequire = require('../lib/require-parse').parseAndReplaceRequire
1088c88e8eSopenharmony_ci
1188c88e8eSopenharmony_ci
1288c88e8eSopenharmony_cidescribe('parse and replace require 3rd party js', function () {
1388c88e8eSopenharmony_ci  it('implicit node_modules', function () {
1488c88e8eSopenharmony_ci    var code = 'var a = require("md5");'
1588c88e8eSopenharmony_ci    var absolutePath = path.join(__dirname, '../node_modules/md5/md5.js')
1688c88e8eSopenharmony_ci    var md5Path = md5(absolutePath)
1788c88e8eSopenharmony_ci    var expected = {
1888c88e8eSopenharmony_ci      code: 'var a = browserifyRequire("' + md5Path + '");',
1988c88e8eSopenharmony_ci      requires: {},
2088c88e8eSopenharmony_ci      log: []
2188c88e8eSopenharmony_ci    }
2288c88e8eSopenharmony_ci    expected.requires[md5Path] = absolutePath
2388c88e8eSopenharmony_ci    expect(parseAndReplaceRequire(code)).eql(expected)
2488c88e8eSopenharmony_ci  })
2588c88e8eSopenharmony_ci
2688c88e8eSopenharmony_ci  it('explicit node_modules', function () {
2788c88e8eSopenharmony_ci    var code = 'var a = require("./node_modules/md5");'
2888c88e8eSopenharmony_ci    var absolutePath = path.join(__dirname, '../node_modules/md5/md5.js')
2988c88e8eSopenharmony_ci    var md5Path = md5(absolutePath)
3088c88e8eSopenharmony_ci    var expected = {
3188c88e8eSopenharmony_ci      code: 'var a = browserifyRequire("' + md5Path + '");',
3288c88e8eSopenharmony_ci      requires: {},
3388c88e8eSopenharmony_ci      log: []
3488c88e8eSopenharmony_ci    }
3588c88e8eSopenharmony_ci    expected.requires[md5Path] = absolutePath
3688c88e8eSopenharmony_ci    expect(parseAndReplaceRequire(code)).eql(expected)
3788c88e8eSopenharmony_ci  })
3888c88e8eSopenharmony_ci
3988c88e8eSopenharmony_ci  it('current directory with no extname', function () {
4088c88e8eSopenharmony_ci    var code = 'var a = require("./lib/fix");'
4188c88e8eSopenharmony_ci    var absolutePath = path.join(__dirname, '../lib/fix.js')
4288c88e8eSopenharmony_ci    var md5Path = md5(absolutePath)
4388c88e8eSopenharmony_ci    var expected = {
4488c88e8eSopenharmony_ci      code: 'var a = browserifyRequire("' + md5Path + '");',
4588c88e8eSopenharmony_ci      requires: {},
4688c88e8eSopenharmony_ci      log: []
4788c88e8eSopenharmony_ci    }
4888c88e8eSopenharmony_ci    expected.requires[md5Path] = absolutePath
4988c88e8eSopenharmony_ci    expect(parseAndReplaceRequire(code)).eql(expected)
5088c88e8eSopenharmony_ci  })
5188c88e8eSopenharmony_ci
5288c88e8eSopenharmony_ci  it('current directory with extname', function () {
5388c88e8eSopenharmony_ci    var code = 'var a = require("./lib/fix.js");'
5488c88e8eSopenharmony_ci    var absolutePath = path.join(__dirname, '../lib/fix.js')
5588c88e8eSopenharmony_ci    var md5Path = md5(absolutePath)
5688c88e8eSopenharmony_ci    var expected = {
5788c88e8eSopenharmony_ci      code: 'var a = browserifyRequire("' + md5Path + '");',
5888c88e8eSopenharmony_ci      requires: {},
5988c88e8eSopenharmony_ci      log: []
6088c88e8eSopenharmony_ci    }
6188c88e8eSopenharmony_ci    expected.requires[md5Path] = absolutePath
6288c88e8eSopenharmony_ci    expect(parseAndReplaceRequire(code)).eql(expected)
6388c88e8eSopenharmony_ci  })
6488c88e8eSopenharmony_ci
6588c88e8eSopenharmony_ci  it('parent directory with no extname', function () {
6688c88e8eSopenharmony_ci    var code = 'var a = require("./test/fix");'
6788c88e8eSopenharmony_ci    var absolutePath = path.join(__dirname, '../test/fix.js')
6888c88e8eSopenharmony_ci    var md5Path = md5(absolutePath)
6988c88e8eSopenharmony_ci    var expected = {
7088c88e8eSopenharmony_ci      code: 'var a = browserifyRequire("' + md5Path + '");',
7188c88e8eSopenharmony_ci      requires: {},
7288c88e8eSopenharmony_ci      log: []
7388c88e8eSopenharmony_ci    }
7488c88e8eSopenharmony_ci    expected.requires[md5Path] = absolutePath
7588c88e8eSopenharmony_ci    expect(parseAndReplaceRequire(code)).eql(expected)
7688c88e8eSopenharmony_ci  })
7788c88e8eSopenharmony_ci
7888c88e8eSopenharmony_ci  it('parent directory with extname', function () {
7988c88e8eSopenharmony_ci    var code = 'var a = require("./test/fix.js");'
8088c88e8eSopenharmony_ci    var absolutePath = path.join(__dirname, '../test/fix.js')
8188c88e8eSopenharmony_ci    var md5Path = md5(absolutePath)
8288c88e8eSopenharmony_ci    var expected = {
8388c88e8eSopenharmony_ci      code: 'var a = browserifyRequire("' + md5Path + '");',
8488c88e8eSopenharmony_ci      requires: {},
8588c88e8eSopenharmony_ci      log: []
8688c88e8eSopenharmony_ci    }
8788c88e8eSopenharmony_ci    expected.requires[md5Path] = absolutePath
8888c88e8eSopenharmony_ci    expect(parseAndReplaceRequire(code)).eql(expected)
8988c88e8eSopenharmony_ci  })
9088c88e8eSopenharmony_ci
9188c88e8eSopenharmony_ci  it('require @weex-module', function () {
9288c88e8eSopenharmony_ci    var code = 'var a = require("@weex-module/xxx");'
9388c88e8eSopenharmony_ci    var expected = {
9488c88e8eSopenharmony_ci      code: 'var a = require("@weex-module/xxx");',
9588c88e8eSopenharmony_ci      requires: {},
9688c88e8eSopenharmony_ci      log: []
9788c88e8eSopenharmony_ci    }
9888c88e8eSopenharmony_ci    expect(parseAndReplaceRequire(code)).eql(expected)
9988c88e8eSopenharmony_ci  })
10088c88e8eSopenharmony_ci
10188c88e8eSopenharmony_ci  it('require @weex-component', function () {
10288c88e8eSopenharmony_ci    var code = 'var a = require("@weex-component/xxx");'
10388c88e8eSopenharmony_ci    var expected = {
10488c88e8eSopenharmony_ci      code: 'var a = require("@weex-component/xxx");',
10588c88e8eSopenharmony_ci      requires: {},
10688c88e8eSopenharmony_ci      log: []
10788c88e8eSopenharmony_ci    }
10888c88e8eSopenharmony_ci    expect(parseAndReplaceRequire(code)).eql(expected)
10988c88e8eSopenharmony_ci  })
11088c88e8eSopenharmony_ci
11188c88e8eSopenharmony_ci  it('multiple requires', function () {
11288c88e8eSopenharmony_ci    var code = 'var a = require("md5"); var b = require("test/fix"); var c = require("@weex-component/xxx");'
11388c88e8eSopenharmony_ci    var absolutePathA = path.join(__dirname, '../node_modules/md5/md5.js')
11488c88e8eSopenharmony_ci    var md5PathA = md5(absolutePathA)
11588c88e8eSopenharmony_ci    var absolutePathB = path.join(__dirname, '../test/fix.js')
11688c88e8eSopenharmony_ci    var md5PathB = md5(absolutePathB)
11788c88e8eSopenharmony_ci    var expected = {
11888c88e8eSopenharmony_ci      code: 'var a = browserifyRequire("' + md5PathA + '"); var b = browserifyRequire("' + md5PathB + '"); var c = require("@weex-component/xxx");',
11988c88e8eSopenharmony_ci      requires: {},
12088c88e8eSopenharmony_ci      log: []
12188c88e8eSopenharmony_ci    }
12288c88e8eSopenharmony_ci    expected.requires[md5PathA] = absolutePathA
12388c88e8eSopenharmony_ci    expected.requires[md5PathB] = absolutePathB
12488c88e8eSopenharmony_ci    expect(parseAndReplaceRequire(code)).eql(expected)
12588c88e8eSopenharmony_ci  })
12688c88e8eSopenharmony_ci
12788c88e8eSopenharmony_ci  it('cannot find required module', function () {
12888c88e8eSopenharmony_ci    var code = 'var a = require("underscore")'
12988c88e8eSopenharmony_ci    var expected = {
13088c88e8eSopenharmony_ci      code: 'var a = require("underscore")',
13188c88e8eSopenharmony_ci      requires: {},
13288c88e8eSopenharmony_ci      log: [{reason: 'ERROR: Cannot find required module "underscore"'}]
13388c88e8eSopenharmony_ci    }
13488c88e8eSopenharmony_ci    expect(parseAndReplaceRequire(code)).eql(expected)
13588c88e8eSopenharmony_ci  })
13688c88e8eSopenharmony_ci})
137