Skip to content

Commit

Permalink
Merge pull request #111 from bkiers/bug/110-integer-check-arithmetic-…
Browse files Browse the repository at this point in the history
…operations

Fixed string-integer outcomes
  • Loading branch information
bkiers authored Nov 14, 2018
2 parents 78e86a5 + 9d68b36 commit 8e30b47
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/main/java/liqp/filters/Divided_By.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public Object apply(Object value, Object... params) {

Object rhsObj = params[0];

if (super.isInteger(value) && super.isInteger(rhsObj)) {
if (super.canBeInteger(value) && super.canBeInteger(rhsObj)) {
return super.asNumber(value).longValue() / super.asNumber(rhsObj).longValue();
}

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/liqp/filters/Minus.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
public class Minus extends Filter {

/*
* plus(input, operand)
* minus(input, operand)
*
* subtraction
*/
Expand All @@ -18,7 +18,7 @@ public Object apply(Object value, Object... params) {

Object rhsObj = params[0];

if (super.isInteger(value) && super.isInteger(rhsObj)) {
if (super.canBeInteger(value) && super.canBeInteger(rhsObj)) {
return super.asNumber(value).longValue() - super.asNumber(rhsObj).longValue();
}

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/liqp/filters/Modulo.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
public class Modulo extends Filter {

/*
* plus(input, operand)
* modulo(input, operand)
*
* modulus
*/
Expand All @@ -18,7 +18,7 @@ public Object apply(Object value, Object... params) {

Object rhsObj = params[0];

if (super.isInteger(value) && super.isInteger(rhsObj)) {
if (super.canBeInteger(value) && super.canBeInteger(rhsObj)) {
return super.asNumber(value).longValue() % super.asNumber(rhsObj).longValue();
}

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/liqp/filters/Plus.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public Object apply(Object value, Object... params) {

Object rhsObj = params[0];

if (super.isInteger(value) && super.isInteger(rhsObj)) {
if (super.canBeInteger(value) && super.canBeInteger(rhsObj)) {
return super.asNumber(value).longValue() + super.asNumber(rhsObj).longValue();
}

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/liqp/filters/Times.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public Object apply(Object value, Object... params) {

Object rhsObj = params[0];

if (super.isInteger(value) && super.isInteger(rhsObj)) {
if (super.canBeInteger(value) && super.canBeInteger(rhsObj)) {
return super.asNumber(value).longValue() * super.asNumber(rhsObj).longValue();
}

Expand Down
43 changes: 43 additions & 0 deletions src/test/java/liqp/filters/MinusTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,47 @@ public void applyOriginalTest() {
assertThat(Template.parse("{{ input | minus:operand }}").render("{\"input\":5, \"operand\":1}"), is((Object)"4"));
assertThat(Template.parse("{{ '4.3' | minus:'2' }}").render(), is((Object)"2.3"));
}

/*
Ruby source:
# gem 'liquid', '~> 4.0.0'
require 'liquid'
sources = [
'{{ 5 | minus: 2 }}', # int - int
'{{ 5.0 | minus: 2 }}', # double - int
'{{ "5" | minus: 2 }}', # string_int - int
'{{ "5" | minus: 2.0 }}', # string_int - double
'{{ "5" | minus: "2" }}', # string_int - string_int
'{{ "5" | minus: "2.0" }}' # string_int - string_double
]
sources.each { |source|
@template = Liquid::Template.parse(source)
result = @template.render({})
printf("result: '%s'\n", result)
}
Yields:
result: '3'
result: '3.0'
result: '3'
result: '3.0'
result: '3'
result: '3.0'
https://github.com/bkiers/Liqp/issues/110
*/
@Test
public void bug110() {
assertThat(Template.parse("{{ 5 | minus: 2 }}").render(), is((Object)"3"));
assertThat(Template.parse("{{ 5.0 | minus: 2 }}").render(), is((Object)"3.0"));
assertThat(Template.parse("{{ \"5\" | minus: 2 }}").render(), is((Object)"3"));
assertThat(Template.parse("{{ \"5\" | minus: 2.0 }}").render(), is((Object)"3.0"));
assertThat(Template.parse("{{ \"5\" | minus: \"2\" }}").render(), is((Object)"3"));
assertThat(Template.parse("{{ \"5\" | minus: \"2.0\" }}").render(), is((Object)"3.0"));
}
}

0 comments on commit 8e30b47

Please sign in to comment.