Skip to content

Commit

Permalink
Added support for PHP 'use' statement to grammar
Browse files Browse the repository at this point in the history
  • Loading branch information
asmblah committed Feb 5, 2014
1 parent 6980959 commit e107a4d
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 1 deletion.
5 changes: 4 additions & 1 deletion languages/PHP/grammar.js
Original file line number Diff line number Diff line change
Expand Up @@ -516,7 +516,7 @@ define([
components: {oneOf: ['N_NAMESPACE_SCOPED_STATEMENT', 'N_NAMESPACE_STATEMENT']}
},
'N_NAMESPACE_SCOPED_STATEMENT': {
components: {oneOf: ['N_COMPOUND_STATEMENT', 'N_RETURN_STATEMENT', 'N_INLINE_HTML_STATEMENT', 'N_EMPTY_STATEMENT', 'N_ECHO_STATEMENT', 'N_BREAK_STATEMENT', 'N_CONTINUE_STATEMENT', 'N_EXPRESSION_STATEMENT', 'N_FUNCTION_STATEMENT', 'N_IF_STATEMENT', 'N_FOREACH_STATEMENT', 'N_FOR_STATEMENT', 'N_WHILE_STATEMENT', 'N_DO_WHILE_STATEMENT', 'N_CLASS_STATEMENT', 'N_SWITCH_STATEMENT', 'N_LABEL_STATEMENT', 'N_GOTO_STATEMENT']}
components: {oneOf: ['N_COMPOUND_STATEMENT', 'N_RETURN_STATEMENT', 'N_INLINE_HTML_STATEMENT', 'N_EMPTY_STATEMENT', 'N_ECHO_STATEMENT', 'N_BREAK_STATEMENT', 'N_CONTINUE_STATEMENT', 'N_EXPRESSION_STATEMENT', 'N_FUNCTION_STATEMENT', 'N_IF_STATEMENT', 'N_FOREACH_STATEMENT', 'N_FOR_STATEMENT', 'N_WHILE_STATEMENT', 'N_DO_WHILE_STATEMENT', 'N_CLASS_STATEMENT', 'N_SWITCH_STATEMENT', 'N_LABEL_STATEMENT', 'N_GOTO_STATEMENT', 'N_USE_STATEMENT']}
},
'N_STRING': {
components: {name: 'string', what: 'T_STRING'}
Expand Down Expand Up @@ -554,6 +554,9 @@ define([
'N_TERM': {
components: {oneOf: ['N_VARIABLE', 'N_FLOAT', 'N_INTEGER', 'N_BOOLEAN', 'N_STRING_LITERAL', 'N_ARRAY_LITERAL', 'N_LIST', 'N_ISSET', 'N_CLOSURE', 'N_STRING']}
},
'N_USE_STATEMENT': {
components: ['T_USE', {name: 'uses', oneOrMoreOf: [{name: 'source', what: 'N_CLASS_REFERENCE'}, {optionally: ['T_AS', {name: 'alias', what: 'T_STRING'}]}]}, (/;/)]
},
'N_VARIABLE': {
components: [
{optionally: {name: 'reference', what: (/&/)}},
Expand Down
88 changes: 88 additions & 0 deletions tests/bdd/integration/languages/PHP/grammar/statements/useTest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
/*
* Uniter - JavaScript PHP interpreter
* Copyright 2013 Dan Phillimore (asmblah)
* http://asmblah.github.com/uniter/
*
* Released under the MIT license
* https://github.com/asmblah/uniter/raw/master/MIT-LICENSE.txt
*/

/*global define */
define([
'../../tools',
'js/util'
], function (
tools,
util
) {
'use strict';

describe('PHP Parser grammar use statement integration', function () {
var parser;

beforeEach(function () {
parser = tools.createParser();
});

util.each({
'use outside of namespace for simple import': {
code: 'use Toolkit;',
expectedAST: {
name: 'N_PROGRAM',
statements: [{
name: 'N_USE_STATEMENT',
uses: [{
source: {
name: 'N_CLASS_REFERENCE',
path: 'Toolkit'
}
}]
}]
}
},
'use outside of namespace for simple aliasing': {
code: 'use Uniter as Library;',
expectedAST: {
name: 'N_PROGRAM',
statements: [{
name: 'N_USE_STATEMENT',
uses: [{
source: {
name: 'N_CLASS_REFERENCE',
path: 'Uniter'
},
alias: 'Library'
}]
}]
}
},
'use outside of namespace for aliasing deeply nested namespace': {
code: 'use Framework\\Network\\Http\\Request as MyFrameworkRequest;',
expectedAST: {
name: 'N_PROGRAM',
statements: [{
name: 'N_USE_STATEMENT',
uses: [{
source: {
name: 'N_CLASS_REFERENCE',
path: 'Framework\\Network\\Http\\Request'
},
alias: 'MyFrameworkRequest'
}]
}]
}
}
}, function (scenario, description) {
describe(description, function () {
var code = '<?php ' + scenario.code;

// Pretty-print the code strings so any non-printable characters are readable
describe('when the code is ' + JSON.stringify(code) + ' ?>', function () {
it('should return the expected AST', function () {
expect(parser.parse(code)).to.deep.equal(scenario.expectedAST);
});
});
});
});
});
});
1 change: 1 addition & 0 deletions tests/bdd/runner.js
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ define({
'bdd/integration/languages/PHP/grammar/statements/gotoTest',
'bdd/integration/languages/PHP/grammar/statements/ifTest',
'bdd/integration/languages/PHP/grammar/statements/switchTest',
'bdd/integration/languages/PHP/grammar/statements/useTest',
'bdd/integration/languages/PHP/grammar/statements/whileTest',
'bdd/integration/languages/PHP/grammar/smallTest',
'bdd/integration/languages/PHP/grammar/syntax/errorTest',
Expand Down

0 comments on commit e107a4d

Please sign in to comment.