Skip to content

Commit f59d5ea

Browse files
author
tangyao
committed
fix(null): null should target type; modify int type valid
1 parent 3be97ba commit f59d5ea

File tree

2 files changed

+55
-35
lines changed

2 files changed

+55
-35
lines changed

index.js

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@
77
'use strict';
88

99
var combine = function (type, value) {
10-
if (value == null) {
11-
return null;
12-
}
1310
if (typeof type === 'string') {
1411
type = {
1512
name: type,
@@ -58,27 +55,43 @@ exports.__defineGetter__('combine', function () {
5855
// valid list
5956
function ignore(val) {return val;}
6057
function bool(val) {return !!bool;}
61-
function integer(val) {return parseInt(val, 10)}
62-
// parseInt;
63-
// parseFloat;
64-
// String
58+
function baseInt(val) {
59+
return val == null ? 0 : integer(val);
60+
}
61+
function baseFloat(val) {
62+
return val == null ? 0 : float(val);
63+
}
64+
function float(val) {
65+
if (val == null) {
66+
return null;
67+
}
68+
var r = parseFloat(val);
69+
return isNaN(r) ? val : r;
70+
}
71+
function integer(val) {
72+
if (val == null) {
73+
return null;
74+
}
75+
var r = parseInt(val, 10);
76+
return isNaN(r) ? val : r;
77+
}
6578

6679
var simpleTypeMap = exports.simpleTypeMap = {
6780
Boolean: {name: 'java.lang.Boolean', valid: bool},
6881
boolean: {name: 'boolean', valid: bool},
6982
Integer: {name: 'java.lang.Integer', valid: integer},
70-
int: {name: 'int', valid: integer},
71-
short: {name: 'short', valid: integer},
83+
int: {name: 'int', valid: baseInt},
84+
short: {name: 'short', valid: baseInt},
7285
Short: {name: 'java.lang.Short', valid: integer},
7386
byte: {name: 'byte', valid: integer},
7487
Byte: {name: 'java.lang.Byte', valid: integer},
7588
// long support both string and number
7689
long: {name: 'long', valid: ignore},
7790
Long: {name: 'java.lang.Long', valid: ignore},
78-
double: {name: 'double', valid: parseFloat},
79-
Double: {name: 'java.lang.Double', valid: parseFloat},
80-
float: {name: 'float', valid: parseFloat},
81-
Float: {name: 'java.lang.Float', valid: parseFloat},
91+
double: {name: 'double', valid: baseFloat},
92+
Double: {name: 'java.lang.Double', valid: float},
93+
float: {name: 'float', valid: baseFloat},
94+
Float: {name: 'java.lang.Float', valid: float},
8295
String: {name: 'java.lang.String', valid: String},
8396
char: {name: 'char', valid: String},
8497
chars: {name: 'char[]', valid: String},
@@ -149,9 +162,6 @@ Object.keys(simpleTypeMap).forEach(function (key) {
149162
*/
150163

151164
exports.abstract = function (abstractClassName, className, val) {
152-
if (val == null) {
153-
return null;
154-
}
155165
var res = combine(className, val);
156166
res.$abstractClass = abstractClassName;
157167
return res;
@@ -166,12 +176,10 @@ exports.abstract = function (abstractClassName, className, val) {
166176
* }
167177
*/
168178
exports.enum = function (className, name) {
169-
if (name == null) {
170-
return null;
171-
}
172-
return combine(className, {
179+
var value = name ? {
173180
name: name
174-
});
181+
} : null
182+
return combine(className, value);
175183
};
176184

177185
/**
@@ -183,12 +191,10 @@ exports.enum = function (className, name) {
183191
* }
184192
*/
185193
exports.Class = function (name) {
186-
if (name == null) {
187-
return null;
188-
}
189-
return combine('java.lang.Class', {
194+
var value = name ? {
190195
name: name
191-
});
196+
} : null;
197+
return combine('java.lang.Class', value);
192198
};
193199

194200
/**
@@ -201,10 +207,8 @@ exports.Class = function (name) {
201207
* }
202208
*/
203209
exports.Locale = function (locale, handle) {
204-
if (locale == null) {
205-
return null;
206-
}
207-
return combine(handle || 'com.caucho.hessian.io.LocaleHandle', {
210+
var value = locale ? {
208211
value: locale
209-
});
212+
} : null;
213+
return combine(handle || 'com.caucho.hessian.io.LocaleHandle', value);
210214
};

test/index.test.js

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,29 @@ describe('js to java', function () {
2424
java.Boolean(val).should.eql({$class: 'java.lang.Boolean', $: true});
2525
java.Integer('1').should.eql({$class: 'java.lang.Integer', $: 1});
2626
java.int('1').should.eql({$class: 'int', $: 1});
27+
java.int().should.eql({$class: 'int', $: 0});
2728
java.short('101').should.eql({$class: 'short', $: 101});
29+
java.short().should.eql({$class: 'short', $: 0});
30+
java.short('str').should.eql({$class: 'short', $: 'str'});
2831
java.Short('101').should.eql({$class: 'java.lang.Short', $: 101});
2932
java.byte('1').should.eql({$class: 'byte', $: 1});
3033
java.Byte('1').should.eql({$class: 'java.lang.Byte', $: 1});
3134
java.long('1').should.eql({$class: 'long', $: '1'});
3235
java.Long(1).should.eql({$class: 'java.lang.Long', $: 1});
3336
java.double('1.02').should.eql({$class: 'double', $: 1.02});
37+
java.double().should.eql({$class: 'double', $: 0});
3438
java.Double('1').should.eql({$class: 'java.lang.Double', $: 1});
3539
java.float('1').should.eql({$class: 'float', $: 1});
40+
java.float().should.eql({$class: 'float', $: 0});
41+
java.float('str').should.eql({$class: 'float', $: 'str'});
3642
java.Float('1.03').should.eql({$class: 'java.lang.Float', $: 1.03});
3743
java.String(123).should.eql({$class: 'java.lang.String', $: '123'});
3844
java.char('2').should.eql({$class: 'char', $: '2'});
3945
java.chars('3').should.eql({$class: 'char[]', $: '3'});
4046
java.Character(1).should.eql({$class: 'java.lang.Character', $: '1'});
4147
java.List([]).should.eql({$class: 'java.util.List', $: []});
42-
(java.Integer() === null).should.be.true;
48+
java.Integer().should.eql({$class: 'java.lang.Integer', $: null});
49+
java.Integer('a').should.eql({$class: 'java.lang.Integer', $: 'a'});
4350
});
4451

4552
it('should array work fine', function () {
@@ -90,15 +97,21 @@ describe('js to java', function () {
9097
$class: 'hessian.demo.Color',
9198
$: {name: 'RED'}
9299
});
93-
(java.enum() === null).should.be.true;
100+
java.enum('xxx').should.eql({
101+
$class: 'xxx',
102+
$: null
103+
});
94104
});
95105

96106
it('should create Class', function () {
97107
java.Class('java.lang.String').should.eql({
98108
$class: 'java.lang.Class',
99109
$: {name: 'java.lang.String'}
100110
});
101-
(java.Class() === null).should.be.true;
111+
java.Class().should.eql({
112+
$class: 'java.lang.Class',
113+
$: null
114+
});
102115
});
103116

104117
it('should create Locale with out input `handle`', function () {
@@ -113,7 +126,10 @@ describe('js to java', function () {
113126
$class: 'test.com.caucho.hessian.io.LocaleHandle',
114127
$: {value: 'zh_CN'}
115128
});
116-
(java.Locale() === null).should.be.true;
129+
java.Locale().should.eql({
130+
$class: 'com.caucho.hessian.io.LocaleHandle',
131+
$: null
132+
});
117133
});
118134

119135
});

0 commit comments

Comments
 (0)