Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix issue_590 and add testcases #720

Merged
merged 1 commit into from Jun 2, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -15,6 +15,10 @@ public class CharacterIndex {
private static final char PERIOD = '.';
private static final char REGEX = '/';

//workaround for issue: https://github.com/json-path/JsonPath/issues/590
private static final char SCI_E = 'E';
private static final char SCI_e = 'e';

private final CharSequence charSequence;
private int position;
private int endPosition;
Expand Down Expand Up @@ -293,7 +297,8 @@ public String toString() {

public boolean isNumberCharacter(int readPosition) {
char c = charAt(readPosition);
return Character.isDigit(c) || c == MINUS || c == PERIOD;
//workaround for issue: https://github.com/json-path/JsonPath/issues/590
return Character.isDigit(c) || c == MINUS || c == PERIOD || c == SCI_E || c == SCI_e;
}

public CharacterIndex skipBlanks() {
Expand Down
@@ -0,0 +1,47 @@
package com.jayway.jsonpath;

import com.google.gson.JsonArray;
import org.junit.Test;

import java.util.List;

import static com.jayway.jsonpath.JsonPath.using;
import static org.assertj.core.api.Assertions.assertThat;

//test for issue: https://github.com/json-path/JsonPath/issues/590
public class ScientificNotationTest extends BaseTest {

final String sci_rep_array = "{\"num_array\": [" +
"{\"num\":1}," +
"{\"num\":-1e-10}," +
"{\"num\":0.1e10},"+
"{\"num\":2E-20}," +
"{\"num\":-0.2E20}" +
" ]}";

@Test
public void testScientificNotation() {
List<JsonArray> result = using(Configuration.defaultConfiguration())
.parse(sci_rep_array)
.read("$.num_array[?(@.num == 1 || @.num == -1e-10 || @.num == 0.1e10 || @.num == 2E-20 || @.num == -0.2E20)]");

assertThat(result.toString()).isEqualTo("[{\"num\":1},{\"num\":-1.0E-10},{\"num\":1.0E9},{\"num\":2.0E-20},{\"num\":-2.0E19}]");
}
@Test
public void testScientificNotation_lt_gt() {
List<JsonArray> result;
result = using(Configuration.defaultConfiguration())
.parse(sci_rep_array)
.read("$.num_array[?(@.num > -0.0E0)]");

assertThat(result.toString()).isEqualTo("[{\"num\":1},{\"num\":1.0E9},{\"num\":2.0E-20}]");

result = using(Configuration.defaultConfiguration())
.parse(sci_rep_array)
.read("$.num_array[?(@.num < -0.0E0)]");

assertThat(result.toString()).isEqualTo("[{\"num\":-1.0E-10},{\"num\":-2.0E19}]");

}

}