From 867e6cf16b24ebaf592245e3302eccf382f901a0 Mon Sep 17 00:00:00 2001 From: tangyao Date: Fri, 23 Sep 2016 14:57:35 +0800 Subject: [PATCH] feat: dyadic-array --- index.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ test/index.test.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/index.js b/index.js index ef49903..d293d73 100644 --- a/index.js +++ b/index.js @@ -27,6 +27,20 @@ var combineArray = function (type, value) { }; }; +var combineDyadicArray = function(type, value) { + var values = null; + if (value) { + values = []; + for (var i = 0, len = value.length; i < len; i++) { + values.push(combineArray(type, value[i])); + } + } + return { + $class: '[[' + (type.name || type), + $: values + }; +} + /** * java('com.java.Object', {}) * => @@ -180,6 +194,37 @@ exports.array = function (className, val) { return combineArray(className, val); }; +/** + * java.dyadicArray('Boolean', [[false]]); + * => + * { + * $class: '[[java.lang.Boolean', + * $: [[false]] + * } + * + * @param {String} className class name in array + * @param {Array} val + */ +exports.dyadicArray = function(className, val) { + className = simpleTypeMap[className] || className; + return combineDyadicArray(className, val); +} + +/** + * java.dyadicArray.Boolean([[false]]); + * => + * { + * $class: '[[java.lang.Boolean', + * $: [[false]] + * } + */ + +Object.keys(simpleTypeMap).forEach(function (key) { + exports.dyadicArray[key] = function (val) { + return combineDyadicArray(simpleTypeMap[key], val); + }; +}); + /** * java.array.Boolean([true, false]); * => diff --git a/test/index.test.js b/test/index.test.js index 09ef15f..29c7f8e 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -123,6 +123,36 @@ describe('js to java', function () { java.revert(result).should.eql([1, 2, 3]); }); + it('should dyadicArray work fine', function() { + var result = { + $class: '[[java.lang.Integer', + $: [{ + $class: '[java.lang.Integer', + $: [ + { + $class: 'java.lang.Integer', + $: 1, + } + ] + }] + }; + var result2 = { + $class: '[[java.lang.Integer', + $: [{ + $class: '[java.lang.Integer', + $: [ + { + $class: 'java.lang.Integer', + $: null, + } + ] + }] + }; + java.dyadicArray.Integer([[1]]).should.eql(result); + java.dyadicArray('java.lang.Integer', [['1']]).should.eql(result); + java.dyadicArray('java.lang.Integer', [[null]]).should.eql(result2); + }); + it('should abstractClass work ok', function () { var result = { $class: 'com.java.Object',