runner.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. #!/usr/bin/env node
  2. var cld = require('../index');
  3. var data = require('./data');
  4. var assert = require('assert');
  5. var _ = require('underscore');
  6. async function runCoreTests(detected) {
  7. for (const val of data.all) {
  8. if (!val.testOnWindows) {
  9. return;
  10. }
  11. const result = await cld.detct(val.sample);
  12. assert.equal(_.isArray(result.languages), true);
  13. assert.equal(result.languages.length > 0, true);
  14. assert.equal(val.name, result.languages[0].name);
  15. detected[val.name] = true;
  16. }
  17. }
  18. async function runChunkTests() {
  19. for (const val of data.all) {
  20. if (!val.testOnWindows) {
  21. return;
  22. }
  23. const result = await cld.detect(val.sample);
  24. assert.equal(result.textBytes > 0, true);
  25. if (val.sample == data.frEnLatn) {
  26. assert.equal(_.isArray(result.chunks), true);
  27. assert.equal(result.chunks.length, 3);
  28. var chunkCodes = _.pluck(result.chunks, 'code');
  29. assert.deepEqual(chunkCodes, ['en', 'fr', 'en'])
  30. }
  31. }
  32. }
  33. async function runEncodingHintTests() {
  34. for (const item of data.all) {
  35. if (!item.testOnWindows) {
  36. return;
  37. }
  38. for (const encodingHint of cld.ENCODINGS) {
  39. const result = await cld.detect(item.sample, { encodingHint });
  40. assert.equal(_.isArray(result.languages), true);
  41. assert.equal(result.languages.length > 0, true);
  42. }
  43. }
  44. try {
  45. await cld.detect(data.all[0].sample, { encodingHint: 'p' });
  46. assert.ok(false, 'Should not have detected');
  47. }
  48. catch (err) {
  49. assert.equal(err.message, 'Invalid encodingHint, see ENCODINGS');
  50. }
  51. }
  52. async function runLanguageHintTests() {
  53. _.each(data.all, function(item, idx) {
  54. if (!item.testOnWindows) {
  55. return;
  56. }
  57. _.each(_.keys(cld.LANGUAGES), function(name, idx) {
  58. cld.detect(item.sample, {languageHint:name}, function(err, result) {
  59. if (err) {
  60. assert.equal(err.message, 'Failed to identify language');
  61. }
  62. else {
  63. assert.equal(err, null);
  64. assert.equal(_.isArray(result.languages), true);
  65. }
  66. });
  67. });
  68. _.each(_.values(cld.LANGUAGES), function(code, idx) {
  69. cld.detect(item.sample, {languageHint:code}, function(err, result) {
  70. if (err) {
  71. assert.equal(err.message, 'Failed to identify language');
  72. }
  73. else {
  74. assert.equal(err, null);
  75. assert.equal(_.isArray(result.languages), true);
  76. }
  77. });
  78. });
  79. });
  80. cld.detect(data.all[0].sample, {languageHint:'foo-bar-bas'}, function(err, result) {
  81. assert.equal(err.message, 'Invalid languageHint, see LANGUAGES');
  82. });
  83. }
  84. async function runTldHintTests() {
  85. for (const item of data.all) {
  86. if (!item.testOnWindows) {
  87. return;
  88. }
  89. let result = await cld.detect(item.sample, { tldHint: 'edu' });
  90. assert.equal(_.isArray(result.languages), true);
  91. assert.equal(result.languages.length > 0, true);
  92. result = await cld.detect(item.sample, { tldHint: 'com' });
  93. assert.equal(_.isArray(result.languages), true);
  94. assert.equal(result.languages.length > 0, true);
  95. result = await cld.detect(item.sample, { tldHint: 'id' });
  96. assert.equal(_.isArray(result.languages), true);
  97. assert.equal(result.languages.length > 0, true);
  98. }
  99. }
  100. async function runHttpHintTests() {
  101. for (const item of data.all) {
  102. if (!item.testOnWindows) {
  103. return;
  104. }
  105. let result;
  106. try {
  107. result = await cld.detect(item.sample, { httpHint: 'mi,en' });
  108. }
  109. catch (err) {
  110. assert.equal(err.message, 'Failed to identify language');
  111. return;
  112. }
  113. assert.equal(_.isArray(result.languages), true);
  114. }
  115. }
  116. async function runUnreliableTests() {
  117. try {
  118. await cld.detect('interaktive infografik \xc3\xbcber videospielkonsolen');
  119. }
  120. catch (err) {
  121. assert.equal(err.message, 'Failed to identify language');
  122. }
  123. }
  124. function runCallbackTests() {
  125. cld.detect('This is a language recognition example', (err, result) => {
  126. assert.equal(result.languages.length > 0, true);
  127. });
  128. cld.detect('This is a language recognition example', {isHTML:false}, (err, result) => {
  129. assert.equal(result.languages.length > 0, true);
  130. });
  131. }
  132. function runCrossCheckTests(detected) {
  133. // Confirm that we didn't detect languages that are not listed in DETECTED_LANGUAGES
  134. _.each(_.values(cld.DETECTED_LANGUAGES), function(val, key) {
  135. delete detected[val];
  136. });
  137. assert.equal(_.keys(detected), 0);
  138. }
  139. (async () => {
  140. let detected = {};
  141. await runCoreTests(detected);
  142. await runChunkTests();
  143. await runEncodingHintTests();
  144. await runLanguageHintTests();
  145. await runTldHintTests();
  146. await runHttpHintTests();
  147. await runUnreliableTests();
  148. runCallbackTests();
  149. runCrossCheckTests(detected);
  150. })();