PageRenderTime 45ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/test/test-node/tests/blanket_core.js

https://github.com/timplourde/blanket
JavaScript | 183 lines | 160 code | 22 blank | 1 comment | 1 complexity | b47d6109bca021e402a90d48901f320d MD5 | raw file
Possible License(s): MIT
  1. /* core test to lib/blanket.js */
  2. var assert = require("assert"),
  3. blanketCore = require("../../../src/blanket").blanket,
  4. falafel = require("falafel"),
  5. core_fixtures = require("../fixture/core_fixtures");
  6. function normalizeWhitespace(str) {
  7. return str.replace(/\r\n/g, '\n')
  8. .replace(/\r/g, '\n')
  9. .replace(/\s+\n/g, '\n')
  10. .replace(/\n\s+/g, '\n');
  11. }
  12. function assertString(actual, expected) {
  13. assert.equal(normalizeWhitespace(actual), normalizeWhitespace(expected));
  14. }
  15. describe('tracking', function(){
  16. describe('tracking setup', function(){
  17. it('should return tracking setup', function(){
  18. var expectedSource = "if (typeof _$jscoverage === 'undefined') _$jscoverage = {};\n";
  19. expectedSource += "if (typeof _$jscoverage['test.js'] === 'undefined'){_$jscoverage['test.js']=[];\n";
  20. expectedSource += "_$jscoverage['test.js'].source=['var test=\'1234\';',\n";
  21. expectedSource += "'//comment',\n";
  22. expectedSource += "'console.log(test);'];\n";
  23. expectedSource += "}";
  24. var filename = "test.js";
  25. var sourceArray = [
  26. "var test='1234';",
  27. "//comment",
  28. "console.log(test);"
  29. ];
  30. var result = blanketCore._trackingSetup(filename,sourceArray);
  31. assertString(result,expectedSource);
  32. });
  33. });
  34. describe('source setup', function(){
  35. it('should return source setup', function(){
  36. var source = core_fixtures.simple_test_file_js;
  37. var expectedSource= [
  38. "//this is test source",
  39. "var test=\\'1234\\';",
  40. "if (test === \\'1234\\')",
  41. " console.log(true);",
  42. "//comment",
  43. "console.log(test);"
  44. ];
  45. var result = blanketCore._prepareSource(source);
  46. assertString(result.toString(),expectedSource.toString());
  47. });
  48. });
  49. describe('add tracking', function(){
  50. it('should add tracking lines', function(){
  51. var fname="simple_test_file.js";
  52. var result = falafel(
  53. core_fixtures.simple_test_file_js,
  54. {loc:true,comment:true},
  55. blanketCore._addTracking(fname),fname );
  56. assertString(result.toString(),
  57. core_fixtures.simple_test_file_instrumented_js);
  58. });
  59. });
  60. describe('detect single line ifs', function(){
  61. it('should wrap with block statement', function(){
  62. var fname="blockinjection_test_file.js";
  63. var result = falafel(
  64. core_fixtures.blockinjection_test_file_js,
  65. {loc:true,comment:true},
  66. blanketCore._addTracking(fname), fname);
  67. assertString(result.toString(),
  68. core_fixtures.blockinjection_test_file_instrumented_js);
  69. });
  70. });
  71. });
  72. describe('blanket instrument', function(){
  73. describe('instrument file', function(){
  74. it('should return instrumented file', function(done){
  75. blanketCore.instrument({
  76. inputFile: core_fixtures.simple_test_file_js,
  77. inputFileName: "simple_test_file.js"
  78. },function(result){
  79. assertString(result,
  80. core_fixtures.simple_test_file_instrumented_full_js);
  81. done();
  82. });
  83. });
  84. });
  85. describe('instrument file with shebang', function(){
  86. it('should return instrumented file without the shebang', function(done){
  87. blanketCore.instrument({
  88. inputFile: core_fixtures.shebang_test_file_js,
  89. inputFileName: "shebang_test_file.js"
  90. },function(result){
  91. assertString(result,
  92. core_fixtures.shebang_test_file_instrumented_js);
  93. done();
  94. });
  95. });
  96. });
  97. describe('instrument tricky if block', function(){
  98. it('should return properly instrumented string', function(done){
  99. var expected = 4;
  100. var infile = "var a=3;if(a==1)a=2;else if(a==3){a="+expected+";}result=a;";
  101. var infilename= "testfile2";
  102. blanketCore.instrument({
  103. inputFile: infile,
  104. inputFileName: infilename
  105. },function(result){
  106. assert.equal(eval("(function test(){"+result+" return result;})()"),expected);
  107. done();
  108. });
  109. });
  110. });
  111. describe('instrument labelled block', function(){
  112. it('should return properly instrumented string', function(done){
  113. var expected = 9;
  114. var infile = "function aFunc(max) {\nvar ret=0; rows: for (var i = 0; i < max--; i++) {\n ret=i; if (i == 9) {\n break rows;\n}\n}\n return ret;}\n ";
  115. var infilename= "label_test";
  116. blanketCore.instrument({
  117. inputFile: infile,
  118. inputFileName: infilename
  119. },function(result){
  120. eval(result);
  121. assert.equal(aFunc(20),expected);
  122. done();
  123. });
  124. });
  125. });
  126. });
  127. describe('test events', function(){
  128. describe('run through events', function(){
  129. it('should output correct stats', function(done){
  130. var testReporter = function(result){
  131. assert.equal(result.instrumentation,"blanket");
  132. done();
  133. };
  134. blanketCore.options("reporter",testReporter);
  135. blanketCore.setupCoverage();
  136. blanketCore.onModuleStart();
  137. blanketCore.onTestStart();
  138. blanketCore.onTestDone();
  139. blanketCore.onTestsDone();
  140. });
  141. });
  142. });
  143. describe('redfinition', function(){
  144. describe('when coverage variable redined in code', function(){
  145. it('should output error', function(){
  146. var infile = "_$jscoverage=null;";
  147. var infilename= "testfile1";
  148. assert.throws(
  149. function(){
  150. blanketCore.instrument({
  151. inputFile: infile,
  152. inputFileName: infilename
  153. },function(result){
  154. assert.fail(false,true,"shouldn't get here.");
  155. });
  156. },
  157. /Instrumentation error, you cannot redefine the coverage variable/
  158. );
  159. });
  160. });
  161. });