diff --git a/.gitignore b/.gitignore
index 50602ac..5c764ab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,6 @@ build/
# Directory created by dartdoc
doc/api/
+
+# File for running and testing independent code
+testfile.dart
\ No newline at end of file
diff --git a/lib/src/unofficial_jisho_api_base.dart b/lib/src/unofficial_jisho_api_base.dart
index 54a5904..7970bfe 100644
--- a/lib/src/unofficial_jisho_api_base.dart
+++ b/lib/src/unofficial_jisho_api_base.dart
@@ -8,9 +8,9 @@ final htmlUnescape = html_entities.HtmlUnescape();
// TODO: Put public facing types in this file.
-const String JISHO_API = 'http://jisho.org/api/v1/search/words';
-const String SCRAPE_BASE_URI = 'http://jisho.org/search/';
-const String STROKE_ORDER_DIAGRAM_BASE_URI = 'http://classic.jisho.org/static/images/stroke_diagrams/';
+const String JISHO_API = 'https://jisho.org/api/v1/search/words';
+const String SCRAPE_BASE_URI = 'https://jisho.org/search/';
+const String STROKE_ORDER_DIAGRAM_BASE_URI = 'https://classic.jisho.org/static/images/stroke_diagrams/';
/* KANJI SEARCH FUNCTIONS START */
@@ -33,9 +33,9 @@ String uriForPhraseSearch(String phrase) {
return '${JISHO_API}?keyword=${Uri.encodeComponent(phrase)}';
}
-bool containsKanjiGlyph(pageHtml, String kanji) {
+bool containsKanjiGlyph(String pageHtml, String kanji) {
final kanjiGlyphToken = '
${kanji}
';
- return pageHtml.indexOf(kanjiGlyphToken) != -1;
+ return pageHtml.contains(kanjiGlyphToken);
}
String getStringBetweenIndicies(String data, int startIndex, int endIndex) {
@@ -44,22 +44,22 @@ String getStringBetweenIndicies(String data, int startIndex, int endIndex) {
}
String getStringBetweenStrings(String data, String startString, String endString) {
- final regex = RegExp('${RegExp.escape(startString)}(.*?)${RegExp.escape(endString)}');
- final match = regex.allMatches(data).toList();
+ final regex = RegExp('${RegExp.escape(startString)}(.*?)${RegExp.escape(endString)}', dotAll: true);
+ final match = regex.allMatches(data).toList(); //TODO: Something wrong here
- return match ?? match[1].toString();
+ return match.isNotEmpty ? match[0].group(1).toString() : null;
}
-int getIntBetweenStrings(pageHtml, String startString, String endString) {
+int getIntBetweenStrings(String pageHtml, String startString, String endString) {
final stringBetweenStrings = getStringBetweenStrings(pageHtml, startString, endString);
- return stringBetweenStrings ?? int.parse(stringBetweenStrings);
+ return int.parse(stringBetweenStrings);
}
List getAllGlobalGroupMatches(String str, RegExp regex) {
var regexResults = regex.allMatches(str).toList();
- var results = [];
+ List results = [];
for (var match in regexResults) {
- results.add(match.toString().split(' ')[0]);
+ results.add(match.group(1));
}
return results;
@@ -70,20 +70,20 @@ List parseAnchorsToArray(String str) {
return getAllGlobalGroupMatches(str, regex);
}
-List getYomi(pageHtml, String yomiLocatorSymbol) {
+List getYomi(String pageHtml, String yomiLocatorSymbol) {
final yomiSection = getStringBetweenStrings(pageHtml, '${yomiLocatorSymbol}:', '');
return parseAnchorsToArray(yomiSection ?? '');
}
-List getKunyomi(pageHtml) {
+List getKunyomi(String pageHtml) {
return getYomi(pageHtml, KUNYOMI_LOCATOR_SYMBOL);
}
-List getOnyomi(pageHtml) {
+List getOnyomi(String pageHtml) {
return getYomi(pageHtml, ONYOMI_LOCATOR_SYMBOL);
}
-List getYomiExamples(pageHtml, String yomiLocatorSymbol) {
+List getYomiExamples(String pageHtml, String yomiLocatorSymbol) {
final locatorString = '${yomiLocatorSymbol} reading compounds
';
final exampleSection = getStringBetweenStrings(pageHtml, locatorString, '');
if (exampleSection==null) {
@@ -102,18 +102,18 @@ List getYomiExamples(pageHtml, String yomiLocatorSymbol) {
);
});
- return examples;
+ return examples.toList();
}
-List getOnyomiExamples(pageHtml) {
+List getOnyomiExamples(String pageHtml) {
return getYomiExamples(pageHtml, ONYOMI_LOCATOR_SYMBOL);
}
-List getKunyomiExamples(pageHtml) {
+List getKunyomiExamples(String pageHtml) {
return getYomiExamples(pageHtml, KUNYOMI_LOCATOR_SYMBOL);
}
-Radical getRadical(pageHtml) {
+Radical getRadical(String pageHtml) {
const radicalMeaningStartString = '';
const radicalMeaningEndString = '';
@@ -165,7 +165,7 @@ Radical getRadical(pageHtml) {
return null;
}
-List getParts(pageHtml) {
+List getParts(String pageHtml) {
const partsSectionStartString = 'Parts:';
const partsSectionEndString = '';
@@ -181,7 +181,7 @@ List getParts(pageHtml) {
return (result);
}
-String getSvgUri(pageHtml) {
+String getSvgUri(String pageHtml) {
var svgRegex = RegExp('\/\/.*?.cloudfront.net\/.*?.svg/');
final regexResult = svgRegex.firstMatch(pageHtml).toString();
return regexResult ?? 'http:${regexResult}';
@@ -195,12 +195,12 @@ String getGifUri(String kanji) {
return animationUri;
}
-int getNewspaperFrequencyRank(pageHtml) {
+int getNewspaperFrequencyRank(String pageHtml) {
final frequencySection = getStringBetweenStrings(pageHtml, '', '
');
return frequencySection ?? int.parse(getStringBetweenStrings(frequencySection, '', ''));
}
-KanjiResult parseKanjiPageData(pageHtml, String kanji) {
+KanjiResult parseKanjiPageData(String pageHtml, String kanji) {
final result = KanjiResult();
result.query = kanji;
result.found = containsKanjiGlyph(pageHtml, kanji);
@@ -304,7 +304,7 @@ ExampleResultData parseExampleDiv(div) {
return result;
}
-ExampleResults parseExamplePageData(pageHtml, String phrase) {
+ExampleResults parseExamplePageData(String pageHtml, String phrase) {
final document = xml.parse(pageHtml);
final divs = document.descendants.where((node) => node.attributes[0].value == 'sentence_content').toList();
@@ -445,7 +445,7 @@ class JishoApi {
/// @async
searchForPhrase(String phrase) {
final uri = uriForPhraseSearch(phrase);
- return http.read(uri).then((response) => jsonDecode(response).data);
+ return http.get(uri).then((response) => jsonDecode(response.body).data);
}
/// Scrape the word page for a word/phrase.
@@ -461,8 +461,8 @@ class JishoApi {
Future scrapeForPhrase(String phrase) async {
final uri = uriForPhraseScrape(phrase);
try {
- final response = await http.read(uri);
- return parsePhrasePageData(jsonDecode(response).data, phrase);
+ final response = await http.get(uri);
+ return parsePhrasePageData(response.body, phrase);
} catch (err) {
if (err.response.status == 404) {
return PhrasePageScrapeResult(
@@ -481,7 +481,7 @@ class JishoApi {
/// @async
Future searchForKanji(String kanji) {
final uri = uriForKanjiSearch(kanji);
- return http.read(uri).then((response) => parseKanjiPageData(jsonDecode(response).data, kanji));
+ return http.get(uri).then((response) => parseKanjiPageData(response.body, kanji));
}
/// Scrape Jisho.org for examples.
@@ -490,6 +490,6 @@ class JishoApi {
/// @async
Future searchForExamples(String phrase) {
final uri = uriForExampleSearch(phrase);
- return http.read(uri).then((response) => parseExamplePageData(jsonDecode(response).data, phrase));
+ return http.get(uri).then((response) => parseExamplePageData(response.body, phrase));
}
}
\ No newline at end of file
diff --git a/test/local_function_test_cases.dart b/test/local_function_test_cases.dart
new file mode 100644
index 0000000..9efc3ed
--- /dev/null
+++ b/test/local_function_test_cases.dart
@@ -0,0 +1,119 @@
+import 'package:unofficial_jisho_api/unofficial_jisho_api.dart';
+import 'package:test/test.dart';
+
+import 'package:http/http.dart' as http;
+
+void test_local_functions() async {
+
+
+/* KANJI SEARCH FUNCTION TESTS START */
+
+ test('removeNewLines', () {
+ final result = removeNewlines('Line \nwith\r\n Newlines and spaces\n');
+ expect(result, 'Line with Newlines and spaces');
+ });
+
+ test('uriForKanjiSearch', () {
+ final result = uriForKanjiSearch('時');
+ expect(result, 'https://jisho.org/search/%E6%99%82%23kanji');
+ });
+
+ test('getUriForStrokeOrderDiagram', () {
+ final result = getUriForStrokeOrderDiagram('時');
+ expect(result, 'https://classic.jisho.org/static/images/stroke_diagrams/26178_frames.png');
+ });
+
+ test('uriForPhraseSearch', () {
+ final result = uriForPhraseSearch('時間');
+ expect(result, 'https://jisho.org/api/v1/search/words?keyword=%E6%99%82%E9%96%93');
+ });
+
+ final kanjiPage = (await http.get('https://jisho.org/search/%E6%99%82%23kanji')).body;
+
+ test('containsKanjiGlyph', () {
+ final result = containsKanjiGlyph(kanjiPage, '時');
+ expect(result, true);
+ });
+
+ test('getStringBetweenIndicies', () {
+ final result = getStringBetweenIndicies('String\n\rwith\nNewlines', 3, 9);
+ expect(result, 'ingw');
+ });
+
+ test('getStringBetweenStrings', () {
+ const data = 'STArT I want this string END';
+ final result = getStringBetweenStrings(data, 'STArT', 'END');
+ expect(result, ' I want this string ');
+ });
+
+ test('getIntBetweenStrings', () {
+ final result = getIntBetweenStrings(kanjiPage, '', ' strokes');
+ expect(result, 10);
+ });
+
+ test('getAllGlobalGroupMatches', () {
+
+ });
+
+ test('parseAnchorsToArray', () {
+
+ });
+
+ test('getYomi', () {
+ final result = getYomi(kanjiPage, 'On');
+ expect(result, ['ジ']);
+
+ });
+
+ test('getKunyomi', () {
+ final result = getKunyomi(kanjiPage);
+ expect(result, ['とき', '-どき']);
+ });
+
+ test('getOnyomi', () {
+ final result = getOnyomi(kanjiPage);
+ expect(result, ['ジ']);
+ });
+
+ test('getYomiExamples', () {
+ final result = getYomiExamples(kanjiPage, 'Kun');
+ expect(result, ['ジ']); //FIX
+ });
+
+ test('getOnomiExamples', () {
+ final result = getOnyomiExamples(kanjiPage);
+ expect(result, ['ジ']); //FIX
+ });
+
+ test('getKunyomiExamples', () {
+ final result = getKunyomiExamples(kanjiPage);
+ expect(result, ['ジ']); //FIX
+ });
+
+ test('getRadical', () {
+
+ });
+
+ test('getParts', () {
+
+ });
+
+ test('getSvgUri', () {
+
+ });
+
+ test('getGifUri', () {
+
+ });
+
+ test('getNewspaperFrequencyRank', () {
+
+ });
+
+ test('parseKanjiPageData', () {
+
+ });
+
+ /* KANJI SEARCH FUNCTION TESTS END */
+
+}
\ No newline at end of file
diff --git a/test/unofficial_jisho_api_test.dart b/test/unofficial_jisho_api_test.dart
index 14557cf..dca8ac6 100644
--- a/test/unofficial_jisho_api_test.dart
+++ b/test/unofficial_jisho_api_test.dart
@@ -3,6 +3,7 @@ import 'package:path/path.dart' as path;
import 'dart:convert';
import 'package:unofficial_jisho_api/unofficial_jisho_api.dart';
+import 'local_function_test_cases.dart' show test_local_functions;
import 'package:test/test.dart';
final jisho = JishoApi();
@@ -21,7 +22,7 @@ void runTestCases(List testCaseFiles, String apiFunction) async {
switch(apiFunction) {
case 'searchForKanji': {
final result = await jisho.searchForKanji(testCase['query']);
- expect(result, testCase['expectedResult']);
+ expect(result, jsonDecode(testCase['expectedResult']));
break;
}
case 'searchForExamples': {
@@ -42,6 +43,8 @@ void runTestCases(List testCaseFiles, String apiFunction) async {
void main() async {
+ await test_local_functions();
+
await runTestCases(getFilePaths('kanji_test_cases'), 'searchForKanji');
await runTestCases(getFilePaths('example_test_cases'), 'searchForExamples');