Skip to content

Commit

Permalink
Tests for function calls without args (#106)
Browse files Browse the repository at this point in the history
  • Loading branch information
aherlihy authored and mcasimir committed Jun 25, 2021
1 parent 99dd61a commit 20f1766
Show file tree
Hide file tree
Showing 20 changed files with 935 additions and 333 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ module.exports = (superclass) => class ExtendedVisitor extends superclass {
ctx.type = this.Types.Date;

// we need to return a string if just the Date() gets called
if (!ctx.wasNew && this.visit(ctx.singleExpression()) !== 'ISODate') {
if (!ctx.wasNew && !ctx.getText().includes('ISODate')) {
ctx.type = this.Types._string;
toStr = '.ToString("ddd MMM dd yyyy HH\':\'mm\':\'ss UTC")';
}
Expand Down
8 changes: 5 additions & 3 deletions packages/bson-transpilers/codegeneration/java/Generator.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ module.exports = (superClass) => class ExtendedVisitor extends superClass {
*/
emitDate(ctx, date) {
let toStr = (d) => d;
if (!ctx.wasNew && this.visit(ctx.singleExpression()) !== 'ISODate') {
if (!ctx.wasNew && !ctx.getText().includes('ISODate')) {
ctx.type = this.Types._string;
toStr = (d) => `new SimpleDateFormat("EEE MMMMM dd yyyy HH:mm:ss").format(${d})`;
}
Expand Down Expand Up @@ -83,10 +83,12 @@ module.exports = (superClass) => class ExtendedVisitor extends superClass {
ctx.type = 'createFromTime' in this.Symbols.ObjectId.attr ? this.Symbols.ObjectId.attr.createFromTime : this.Symbols.ObjectId.attr.fromDate;
const argList = ctx.arguments().argumentList();
const args = this.checkArguments(ctx.type.args, argList);
const template = ctx.type.template ? ctx.type.template() : '';
if (argList.singleExpression()[0].type.id === 'Date') {
return ctx.type.argsTemplate('', args[0]);
return `${template}${ctx.type.argsTemplate('', args[0])}`;
}
return ctx.type.argsTemplate('', `new java.util.Date(${args[0]})`);
return `${template}${ctx.type.argsTemplate(
'', `new java.util.Date(${args[0]})`)}`;
}

};
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ module.exports = (superClass) => class ExtendedVisitor extends superClass {

emitDate(ctx, date) {
let newstr = '';
if (!ctx.wasNew && this.visit(ctx.singleExpression()) === 'ISODate') {
if (!ctx.wasNew && ctx.getText().includes('ISODate')) {
newstr = 'new ';
}
if (date === undefined) {
Expand Down
8 changes: 5 additions & 3 deletions packages/bson-transpilers/codegeneration/python/Generator.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ module.exports = (superClass) => class ExtendedVisitor extends superClass {

let toStr = '';

if (!ctx.wasNew && this.visit(ctx.singleExpression()) !== 'ISODate') {
if (!ctx.wasNew && !ctx.getText().includes('ISODate')) {
ctx.type = this.Types._string;
toStr = '.strftime(\'%a %b %d %Y %H:%M:%S %Z\')';
}
Expand Down Expand Up @@ -92,9 +92,11 @@ module.exports = (superClass) => class ExtendedVisitor extends superClass {
this.Symbols.ObjectId.attr.fromDate;
const argList = ctx.arguments().argumentList();
const args = this.checkArguments(ctx.type.args, argList);
const template = ctx.type.template ? ctx.type.template() : '';
if (argList.singleExpression()[0].type.id === 'Date') {
return ctx.type.argsTemplate('', args[0]);
return `${template}${ctx.type.argsTemplate('', args[0])}`;
}
return ctx.type.argsTemplate('', `datetime.datetime.fromtimestamp(${args[0]} / 1000)`);
return `${template}${ctx.type.argsTemplate(
'', `datetime.datetime.fromtimestamp(${args[0]} / 1000)`)}`;
}
};

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion packages/bson-transpilers/lib/symbol-table/shelltojava.js

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

127 changes: 76 additions & 51 deletions packages/bson-transpilers/symbols/csharp/templates.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -106,14 +106,14 @@ Templates:
ObjectIdToStringArgsTemplate: &ObjectIdToStringArgsTemplate null
ObjectIdEqualsTemplate: &ObjectIdEqualsTemplate !!js/function >
(lhs) => {
return '';
return `${lhs}.Equals`;
}
ObjectIdEqualsArgsTemplate: &ObjectIdEqualsArgsTemplate !!js/function >
(lhs, arg) => {
if (arg.indexOf('new') === 0) {
arg = arg.replace(/new /g, '')
}
return `new ObjectId().Equals(new ${arg})`;
return `(new ${arg})`;
}

ObjectIdGetTimestampTemplate: &ObjectIdGetTimestampTemplate !!js/function >
Expand Down Expand Up @@ -224,6 +224,11 @@ Templates:
() => {
return '';
}
LongToStringTemplate: &LongToStringTemplate !!js/function > # Also has emit method
(lhs) => {
return lhs;
}
LongToStringArgsTemplate: &LongToStringArgsTemplate null # Also has emit method
LongToNumberTemplate: &LongToNumberTemplate !!js/function >
(lhs) => {
return `(double) ${lhs}`;
Expand All @@ -234,83 +239,83 @@ Templates:
}
LongAddTemplate: &LongAddTemplate !!js/function >
(lhs) => {
return `${lhs}`;
return `${lhs} +`;
}
LongAddArgsTemplate: &LongAddArgsTemplate !!js/function >
(lhs, arg) => {
return ` + ${arg}`;
return ` ${arg}`;
}
LongSubtractTemplate: &LongSubtractTemplate !!js/function >
(lhs) => {
return `${lhs}`;
return `${lhs} -`;
}
LongSubtractArgsTemplate: &LongSubtractArgsTemplate !!js/function >
(lhs, arg) => {
return ` - ${arg}`;
return ` ${arg}`;
}
LongMultiplyTemplate: &LongMultiplyTemplate !!js/function >
(lhs) => {
return `${lhs}`;
return `${lhs} *`;
}
LongMultiplyArgsTemplate: &LongMultiplyArgsTemplate !!js/function >
(lhs, arg) => {
return ` * ${arg}`;
return ` ${arg}`;
}
LongDivTemplate: &LongDivTemplate !!js/function >
(lhs) => {
return `${lhs}`;
return `${lhs} /`;
}
LongDivArgsTemplate: &LongDivArgsTemplate !!js/function >
(lhs, arg) => {
return ` / ${arg}`;
return ` ${arg}`;
}
LongModuloTemplate: &LongModuloTemplate !!js/function >
(lhs) => {
return `${lhs}`;
return `${lhs} %`;
}
LongModuloArgsTemplate: &LongModuloArgsTemplate !!js/function >
(lhs, arg) => {
return ` % ${arg}`;
return ` ${arg}`;
}
LongAndTemplate: &LongAndTemplate !!js/function >
(lhs) => {
return `${lhs}`;
return `${lhs} &`;
}
LongAndArgsTemplate: &LongAndArgsTemplate !!js/function >
(lhs, arg) => {
return ` & ${arg}`;
return ` ${arg}`;
}
LongOrTemplate: &LongOrTemplate !!js/function >
(lhs) => {
return `${lhs}`;
return `${lhs} |`;
}
LongOrArgsTemplate: &LongOrArgsTemplate !!js/function >
(lhs, arg) => {
return ` | ${arg}`;
return ` ${arg}`;
}
LongXorTemplate: &LongXorTemplate !!js/function >
(lhs) => {
return `${lhs}`;
return `${lhs} ^`;
}
LongXorArgsTemplate: &LongXorArgsTemplate !!js/function >
(lhs, arg) => {
return ` ^ ${arg}`;
return ` ${arg}`;
}
LongShiftLeftTemplate: &LongShiftLeftTemplate !!js/function >
() => {
return '';
(lhs) => {
return `${lhs} <<`;
}
LongShiftLeftArgsTemplate: &LongShiftLeftArgsTemplate !!js/function >
(lhs, arg) => {
return `${lhs} << ${arg}`;
return ` ${arg}`;
}
LongShiftRightTemplate: &LongShiftRightTemplate !!js/function >
() => {
return '';
(lhs) => {
return `${lhs} >>`;
}
LongShiftRightArgsTemplate: &LongShiftRightArgsTemplate !!js/function >
(lhs, arg) => {
return `${lhs} >> ${arg}`;
return ` ${arg}`;
}
LongCompareTemplate: &LongCompareTemplate !!js/function >
(lhs) => {
Expand Down Expand Up @@ -346,19 +351,19 @@ Templates:
}
LongNegateTemplate: &LongNegateTemplate !!js/function >
() => {
return '';
return '-';
}
LongNegateArgsTemplate: &LongNegateArgsTemplate !!js/function >
(lhs) => {
return `-${lhs}`;
return `${lhs}`;
}
LongNotTemplate: &LongNotTemplate !!js/function >
() => {
return '';
return '~';
}
LongNotArgsTemplate: &LongNotArgsTemplate !!js/function >
(lhs) => {
return `~${lhs}`;
return `${lhs}`;
}
LongNotEqualsTemplate: &LongNotEqualsTemplate !!js/function >
(lhs) => {
Expand Down Expand Up @@ -429,11 +434,11 @@ Templates:
TimestampGetLowBitsArgsTemplate: &TimestampGetLowBitsArgsTemplate null
TimestampGetHighBitsTemplate: &TimestampGetHighBitsTemplate !!js/function >
(lhs) => {
return '';
return `${lhs}.Increment`;
}
TimestampGetHighBitsArgsTemplate: &TimestampGetHighBitsArgsTemplate !!js/function >
(lhs) => {
return `${lhs}.Increment`;
return '';
}
TimestampTTemplate: &TimestampTTemplate !!js/function >
(lhs) => {
Expand Down Expand Up @@ -513,9 +518,9 @@ Templates:
return '';
}
# Symbol Templates
CodeSymbolTemplate: &CodeSymbolTemplate !!js/function >
CodeSymbolTemplate: &CodeSymbolTemplate !!js/function > # Also has process method
() => {
return '';
return 'BsonJavaScript';
}
CodeSymbolArgsTemplate: &CodeSymbolArgsTemplate !!js/function >
(lhs, code, scope) => {
Expand All @@ -528,7 +533,7 @@ Templates:
newStr = str.substr(1, str.length - 2);
}
code = `"${newStr.replace(/\\([\s\S])|(")/g, '\\$1$2')}"`;
return (scope === undefined) ? `BsonJavaScript(${code})` : `BsonJavaScriptWithScope(${code}, ${scope})`;
return (scope === undefined) ? `(${code})` : `WithScope(${code}, ${scope})`;
}
ObjectIdSymbolTemplate: &ObjectIdSymbolTemplate !!js/function >
() => {
Expand Down Expand Up @@ -668,7 +673,10 @@ Templates:
return '-1L';
}
LongSymbolNegOneArgsTemplate: &LongSymbolNegOneArgsTemplate null
LongSymbolFromBitsTemplate: &LongSymbolFromBitsTemplate null
LongSymbolFromBitsTemplate: &LongSymbolFromBitsTemplate !!js/function > # Also has process method
() => {
return '';
}
LongSymbolFromBitsArgsTemplate: &LongSymbolFromBitsArgsTemplate null
LongSymbolFromIntTemplate: &LongSymbolFromIntTemplate !!js/function >
() => {
Expand All @@ -682,20 +690,31 @@ Templates:
LongSymbolFromNumberArgsTemplate: &LongSymbolFromNumberArgsTemplate null
LongSymbolFromStringTemplate: &LongSymbolFromStringTemplate !!js/function >
() => {
return '';
return 'Convert.ToInt64';
}
LongSymbolFromStringArgsTemplate: &LongSymbolFromStringArgsTemplate !!js/function >
(lhs, arg1, arg2) => {
if (arg2) {
return `Convert.ToInt64(${arg1}, ${arg2})`
return `(${arg1}, ${arg2})`
}
return `Convert.ToInt64(${arg1}, 10)`
return `(${arg1}, 10)`
}
MinKeySymbolTemplate: &MinKeySymbolTemplate !!js/function > # Also has emit method
() => {
return 'BsonMinKey';
}
MinKeySymbolArgsTemplate: &MinKeySymbolArgsTemplate !!js/function > # Also has emit method
() => {
return '.Value';
}
MaxKeySymbolTemplate: &MaxKeySymbolTemplate !!js/function > # Also has emit method
() => {
return 'BsonMaxKey';
}
MaxKeySymbolArgsTemplate: &MaxKeySymbolArgsTemplate !!js/function > # Also has emit method
() => {
return '.Value';
}

MinKeySymbolTemplate: &MinKeySymbolTemplate null # Has emit method
MinKeySymbolArgsTemplate: &MinKeySymbolArgsTemplate null # Has emit method
MaxKeySymbolTemplate: &MaxKeySymbolTemplate null # Has emit method
MaxKeySymbolArgsTemplate: &MaxKeySymbolArgsTemplate null # Has emit method
TimestampSymbolTemplate: &TimestampSymbolTemplate !!js/function >
() => {
return 'BsonTimestamp';
Expand All @@ -720,12 +739,12 @@ Templates:
Decimal128SymbolTemplate: &Decimal128SymbolTemplate null
Decimal128SymbolArgsTemplate: &Decimal128SymbolArgsTemplate null
Decimal128SymbolFromStringTemplate: &Decimal128SymbolFromStringTemplate !!js/function >
() => {
return '';
(lhs) => {
return `${lhs}.Parse`;
}
Decimal128SymbolFromStringArgsTemplate: &Decimal128SymbolFromStringArgsTemplate !!js/function >
(lhs, arg) => {
return `${lhs}.Parse(${arg})`;
return `(${arg})`;
}
Decimal128ToStringTemplate: &Decimal128ToStringTemplate !!js/function >
(lhs) => {
Expand All @@ -738,16 +757,16 @@ Templates:
return `new ${lhs}`;
}
ObjectIdCreateFromHexStringArgsTemplate: &ObjectIdCreateFromHexStringArgsTemplate null
ObjectIdCreateFromTimeTemplate: &ObjectIdCreateFromTimeTemplate !!js/function >
ObjectIdCreateFromTimeTemplate: &ObjectIdCreateFromTimeTemplate !!js/function > # Also has emit method
(lhs) => {
return '';
return `new ${lhs}.GenerateNewId`;
}
ObjectIdCreateFromTimeArgsTemplate: &ObjectIdCreateFromTimeArgsTemplate !!js/function >
(lhs, arg) => {
if (!Number.isNaN(parseInt(arg, 10))) {
return `new ${lhs}.GenerateNewId(Convert.ToInt32(${arg}))`;
return `(Convert.ToInt32(${arg}))`;
}
return `new ${lhs}.GenerateNewId(${arg})`;
return `(${arg})`;
}
ObjectIdIsValidTemplate: &ObjectIdIsValidTemplate !!js/function >
(lhs) => {
Expand Down Expand Up @@ -782,9 +801,15 @@ Templates:

return `(int) ${arg}`;
}
DateSymbolTemplate: &DateSymbolTemplate null # Has emit method
DateSymbolTemplate: &DateSymbolTemplate !!js/function > # Also has emit method
() => {
return 'Datetime';
}
DateSymbolArgsTemplate: &DateSymbolArgsTemplate null # Has emit method
DateSymbolNowTemplate: &DateSymbolNowTemplate null # Has emit method
DateSymbolNowArgsTemplate: &DateSymbolNowArgsTemplate null # Has emit method
RegExpSymbolTemplate: &RegExpSymbolTemplate null
RegExpSymbolTemplate: &RegExpSymbolTemplate !!js/function > # Also has process method
() => {
return 'Regex';
}
RegExpSymbolArgsTemplate: &RegExpSymbolArgsTemplate null
Loading

0 comments on commit 20f1766

Please sign in to comment.