Skip to content

Commit b968c95

Browse files
committed
swap acorn with babylon
1 parent bda7112 commit b968c95

11 files changed

Lines changed: 58 additions & 49 deletions

‎src/__tests__/part2/app-component-displays-quiz-component.test.js‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ try {
1414
}
1515

1616
let fs = require('fs');
17-
let acorn_loose = require("acorn/dist/acorn_loose");
1817

1918
describe('App Component', () => {
2019
it('renders Quiz component @app-component-displays-quiz-component', () => {

‎src/__tests__/part2/app-component-imports-quiz.test.js‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { shallow } from 'enzyme';
55
import { assert } from 'chai';
66

77
let fs = require('fs');
8-
let acorn_loose = require("acorn/dist/acorn_loose");
8+
let babylon = require('babylon')
99

1010
describe('App Component', () => {
1111
it('imports Quiz from Quiz.js @app-component-imports-quiz-component', () => {
@@ -23,11 +23,11 @@ describe('App Component', () => {
2323
assert(false, "The Quiz.js file hasn't been created yet.")
2424
}
2525

26-
var ast = acorn_loose.parse_dammit(appFile, { sourceType: 'module' });
26+
let ast = babylon.parse(appFile, { sourceType: "module", plugins: ["jsx"] })
2727

2828
let quiz_import_found = false;
2929

30-
ast['body'].forEach(element => {
30+
ast['program']['body'].forEach(element => {
3131
if (element.type == 'ImportDeclaration') {
3232
if (element.source.value == './Quiz.js' || element.source.value == './Quiz' || element.source.value == 'Quiz') {
3333
assert(element.specifiers[0].local.name == 'Quiz', "You're not importing the Quiz class from the Quiz.js file.")

‎src/__tests__/part2/quiz-component-constructor-sets-state.test.js‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ try {
1414
}
1515

1616
let fs = require('fs');
17-
let acorn_loose = require("acorn/dist/acorn_loose");
1817
let quiz_data = require('../../quiz_data.json')
1918

2019
describe('Quiz Component', () => {

‎src/__tests__/part2/quiz-component-displays-instruction-text.test.js‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ try {
1414
}
1515

1616
let fs = require('fs');
17-
let acorn_loose = require("acorn/dist/acorn_loose");
1817
let quiz_data = require('../../quiz_data.json')
1918

2019
describe('Quiz Component', () => {
@@ -31,7 +30,7 @@ describe('Quiz Component', () => {
3130
if (quiz.find('.QuizQuestion').length > 0) {
3231
assert(quiz.find('.QuizQuestion').text() == quiz_data.quiz_questions[0].instruction_text, "The div with a class of `QuizQuestion` isn't displaying the correct instruction text.")
3332
} else {
34-
assert(false, "There is not div with a className of QuizQuestion yet.")
33+
assert(false, "There is not a div with a className of QuizQuestion yet.")
3534
}
3635
})
3736
})

‎src/__tests__/part2/quiz-component-has-constructor-function.test.js‎

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { shallow } from 'enzyme';
55
import { assert } from 'chai';
66

77
let fs = require('fs');
8-
let acorn_loose = require("acorn/dist/acorn_loose");
8+
let babylon = require("babylon");
99

1010
describe('Quiz Component', () => {
1111
it('has a constructor function that accepts `props` as a parameter @quiz-component-has-constructor-function', () => {
@@ -16,17 +16,17 @@ describe('Quiz Component', () => {
1616
assert(false, "The Quiz.js file hasn't been created yet.")
1717
}
1818

19-
var ast = acorn_loose.parse_dammit(file, { sourceType: 'module' });
19+
let ast = babylon.parse(file, { sourceType: "module", plugins: ["jsx"] })
2020

2121
let constructor_function_found = 0;
2222

23-
ast['body'].forEach(element => {
23+
ast['program']['body'].forEach(element => {
2424
if (element.type == 'ClassDeclaration') {
2525
if (element.id.name == 'Quiz') {
2626
element.body.body.forEach(el => {
2727
if (el.kind == 'constructor') {
28-
if (el.value.params && el.value.params.length == 1) {
29-
assert(el.value.params[0].name == 'props', "The Quiz constructor function should accept a single parameter named `props`.")
28+
if (el.params && el.params.length == 1) {
29+
assert(el.params[0].name == 'props', "The Quiz constructor function should accept a single parameter named `props`.")
3030
} else {
3131
assert(false, "The Quiz constructor function should accept a single parameter named `props`.")
3232
}
@@ -41,39 +41,57 @@ describe('Quiz Component', () => {
4141
assert(constructor_function_found == 1, "We found more than one constructor function, but there's only supposed to be one.")
4242
})
4343

44-
it('has a constructor function calls `super(props)` @quiz-component-has-constructor-function', () => {
44+
it('has a constructor function that calls `super(props)` @quiz-component-has-constructor-function', () => {
4545
let file;
4646
try {
4747
file = fs.readFileSync(__dirname + '/../../Quiz.js').toString();
4848
} catch (e) {
4949
assert(false, "The Quiz.js file hasn't been created yet.")
5050
}
5151

52-
var ast = acorn_loose.parse_dammit(file, { sourceType: 'module' });
52+
let ast = babylon.parse(file, { sourceType: "module", plugins: ["jsx"] })
5353

54-
let constructor_function_found = 0;
54+
let call_to_super = 0
55+
let call_to_super_with_props_argument = 0
5556

56-
ast['body'].forEach(element => {
57-
if (element.type == 'ClassDeclaration') {
58-
if (element.id.name == 'Quiz') {
59-
element.body.body.forEach(el => {
60-
if (el.kind == 'constructor') {
61-
if (el.value.body && el.value.body.body.length >= 1) {
62-
assert(el.value.body.body[0].expression.callee.type == 'Super', "We couldn't find a call to `super()` in your constructor.")
63-
assert(el.value.body.body[0].expression.arguments != 0, "Your call to `super()` doesn't contain any parameters.")
64-
assert(el.value.body.body[0].expression.arguments[0].name == 'props', "We found a call to `super()` in the constructor, but it doesn't look like you're passing it `props` as a single argument")
65-
} else {
66-
assert(false, "The Quiz constructor function should accept a single parameter named `props`.")
57+
ast['program']['body'].forEach(element => {
58+
if (element.type == 'ClassDeclaration' && element.id.name == 'Quiz') {
59+
element.body.body.forEach(el => {
60+
el.body.body.forEach(el2 => {
61+
if (el2.type) {
62+
if (el2.type == 'ExpressionStatement') {
63+
if (el2.expression) {
64+
if (el2.expression.callee) {
65+
if (el2.expression.callee.type) {
66+
if (el2.expression.callee.type == 'Super') {
67+
call_to_super = call_to_super + 1
68+
}
69+
}
70+
}
71+
}
72+
}
73+
}
74+
if (el2.type) {
75+
if (el2.type == 'ExpressionStatement') {
76+
if (el2.expression) {
77+
if (el2.expression.arguments && el2.expression.arguments.length != 0) {
78+
if (el2.expression.arguments[0].name) {
79+
if (el2.expression.arguments[0].name == 'props') {
80+
call_to_super_with_props_argument = call_to_super_with_props_argument + 1
81+
}
82+
}
83+
}
84+
}
6785
}
68-
constructor_function_found = constructor_function_found + 1;
6986
}
7087
})
71-
}
88+
})
7289
}
7390
})
7491

75-
assert(constructor_function_found > 0, "We couldn't find a constructor function in your class.")
76-
assert(constructor_function_found == 1, "We found more than one constructor function, but there's only supposed to be one.")
92+
assert(call_to_super > 0, "You're not calling `super()` inside of the Quiz classes' constructor function.")
93+
assert(call_to_super == 1, "We see that you're calling `super()` more than once - please just call it once.")
94+
assert(call_to_super_with_props_argument == 1, "You're not passing `props` when you call `super()`.")
7795
})
7896

7997
})

‎src/__tests__/part2/quiz-component-has-quiz-class.test.js‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { shallow } from 'enzyme';
55
import { assert } from 'chai';
66

77
let fs = require('fs');
8-
let acorn_loose = require("acorn/dist/acorn_loose");
8+
let babylon = require("babylon");
99

1010
describe('Quiz Component', () => {
1111
it('has a Quiz class that extends Component @quiz-component-has-quiz-class', () => {
@@ -16,11 +16,11 @@ describe('Quiz Component', () => {
1616
assert(false, "The Quiz.js file hasn't been created yet.")
1717
}
1818

19-
var ast = acorn_loose.parse_dammit(file, { sourceType: 'module' });
19+
let ast = babylon.parse(file, { sourceType: "module", plugins: ["jsx"] })
2020

2121
let class_declaration_count = 0;
2222

23-
ast['body'].forEach(element => {
23+
ast['program']['body'].forEach(element => {
2424
if (element.type == 'ClassDeclaration') {
2525
if (element.id.name == 'Quiz') {
2626
if (element.superClass.name == 'Component') {

‎src/__tests__/part2/quiz-component-has-quiz-question-div.test.js‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ try {
1414
}
1515

1616
let fs = require('fs');
17-
let acorn_loose = require("acorn/dist/acorn_loose");
1817
let quiz_data = require('../../quiz_data.json')
1918

2019
describe('Quiz Component', () => {

‎src/__tests__/part2/quiz-component-has-render-method.test.js‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ try {
1414
}
1515

1616
let fs = require('fs');
17-
let acorn_loose = require("acorn/dist/acorn_loose");
1817
let quiz_data = require('../../quiz_data.json')
1918

2019
describe('Quiz Component', () => {

‎src/__tests__/part2/quiz-component-imports-css.test.js‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { shallow } from 'enzyme';
55
import { assert } from 'chai';
66

77
let fs = require('fs');
8-
let acorn_loose = require("acorn/dist/acorn_loose");
8+
let babylon = require("babylon");
99

1010
describe('Quiz Component', () => {
1111
it('imports App.css @quiz-component-imports-css', () => {
@@ -16,11 +16,11 @@ describe('Quiz Component', () => {
1616
assert(false, "The Quiz.js file hasn't been created yet.")
1717
}
1818

19-
var ast = acorn_loose.parse_dammit(file, { sourceType: 'module' });
19+
let ast = babylon.parse(file, { sourceType: "module", plugins: ["jsx"] })
2020

2121
let css_import_found = false;
2222

23-
ast['body'].forEach(element => {
23+
ast['program']['body'].forEach(element => {
2424
if (element.type == 'ImportDeclaration') {
2525
if (element.source.value == './App.css') {
2626
css_import_found = true

‎src/__tests__/part2/quiz-component-imports-react.test.js‎

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ import { shallow } from 'enzyme';
55
import { assert } from 'chai';
66

77
let fs = require('fs');
8-
var esprima = require('esprima');
9-
let acorn = require("acorn");
10-
let acorn_loose = require("acorn/dist/acorn_loose");
8+
let babylon = require('babylon')
119

1210
describe('Quiz Component', () => {
1311
it('imports the React and Component classes @quiz-component-imports-react', () => {
@@ -18,12 +16,12 @@ describe('Quiz Component', () => {
1816
assert(false, "The Quiz.js file hasn't been created yet.")
1917
}
2018

21-
var ast = acorn_loose.parse_dammit(file, { sourceType: 'module' });
19+
let ast = babylon.parse(file, { sourceType: "module", plugins: ["jsx"] })
2220

2321
let react_class_import_found = false;
2422
let component_class_import_found = false;
2523

26-
ast['body'].forEach(element => {
24+
ast['program']['body'].forEach(element => {
2725
if (element.type == 'ImportDeclaration') {
2826
element.specifiers.forEach(el => {
2927
if (el.type == 'ImportDefaultSpecifier' && el.local.name == 'React') {

0 commit comments

Comments
 (0)