private string XlatModule(string pyModule) { var rdr = new StringReader(pyModule); var lex = new Lexer("foo.py", rdr); var flt = new CommentFilter(lex); var par = new Parser("foo.py", flt); var stm = par.stmt(); var unt = new CodeCompileUnit(); var gen = new CodeGenerator(unt, "test", "testModule"); var types = new TypeReferenceTranslator(new Dictionary <Node, DataType>()); var xlt = new StatementTranslator(types, gen, new SymbolGenerator(), new HashSet <string>()); stm[0].Accept(xlt); var pvd = new CSharpCodeProvider(); var writer = new StringWriter(); foreach (CodeNamespace ns in unt.Namespaces) { foreach (CodeNamespaceImport imp in ns.Imports) { writer.WriteLine("using {0};", SanitizeNamespace(imp.Namespace, gen)); } foreach (CodeTypeDeclaration type in ns.Types) { pvd.GenerateCodeFromType( type, writer, new CodeGeneratorOptions { }); } } return(writer.ToString()); }
private string XlatStmts(string pyStmt) { var rdr = new StringReader(pyStmt); var lex = new Lexer("foo.py", rdr); var flt = new CommentFilter(lex); var par = new Parser("foo.py", flt); var stm = par.stmt(); var gen = new CodeGenerator(new CodeCompileUnit(), "", "module"); gen.SetCurrentMethod(new CodeMemberMethod()); var types = new TypeReferenceTranslator(new Dictionary <Node, DataType>()); var xlt = new StatementTranslator(types, gen, new SymbolGenerator(), new HashSet <string>()); stm[0].Accept(xlt); var pvd = new CSharpCodeProvider(); var writer = new StringWriter(); foreach (CodeStatement csStmt in gen.Scope) { pvd.GenerateCodeFromStatement( csStmt, writer, new CodeGeneratorOptions { }); } return(writer.ToString()); }
private string XlatMember(string pyModule) { var rdr = new StringReader(pyModule); var lex = new Lexer("foo.py", rdr); var par = new Parser("foo.py", lex); var stm = par.stmt(); var unt = new CodeCompileUnit(); var gen = new CodeGenerator(unt, "test", "testModule"); var types = new TypeReferenceTranslator(new Dictionary <Node, DataType>()); var xlt = new StatementTranslator(types, gen, new SymbolGenerator(), new HashSet <string>()); stm[0].Accept(xlt); var pvd = new CSharpCodeProvider(); var writer = new StringWriter(); foreach (CodeNamespace ns in unt.Namespaces) { foreach (var member in ns.Types[0].Members) { pvd.GenerateCodeFromMember( member, writer, new CodeGeneratorOptions { }); writer.WriteLine(); } } return(writer.ToString()); }
public void Match_GivenNullSpan_ReturnsFalse() { var sut = new StatementTranslator(); var result = sut.Match(null); Assert.IsFalse(result); }
public void Translate_CallsMatchOnCodeSpanTranslator() { var span = SpanHelper.BuildSpan("a"); var sut = new StatementTranslator(this._codeSpanTranslator.Object); sut.Translate(span, this._templateBuilder.Object); this._codeSpanTranslator.Verify(c => c.Match(span)); }
public void Translate_FoundMatchingCodeSpanTranslator_CallsTranslater() { this._codeSpanTranslator.Setup(c => c.Match(It.IsAny <Span>())).Returns(true); var span = SpanHelper.BuildSpan("a"); var sut = new StatementTranslator(this._codeSpanTranslator.Object); sut.Translate(span, this._templateBuilder.Object); this._codeSpanTranslator.Verify(c => c.Translate(span.Content, this._templateBuilder.Object)); }
public void Translate_GivenCodeWithLineBreaks_CleanLineBreaksWhenHandingToTranslator() { this._codeSpanTranslator.Setup(c => c.Match(It.IsAny <Span>())).Returns(true); var span = SpanHelper.BuildSpan("a\r\nb"); var sut = new StatementTranslator(this._codeSpanTranslator.Object); sut.Translate(span, this._templateBuilder.Object); this._codeSpanTranslator.Verify(c => c.Translate("ab", It.IsAny <ITemplateBuilder>())); }
public void Translate_NoMatchingCodeSpanTranslator_DoNotCallTranslater() { this._codeSpanTranslator.Setup(c => c.Match(It.IsAny <Span>())).Returns(false); var span = SpanHelper.BuildSpan("a"); var sut = new StatementTranslator(this._codeSpanTranslator.Object); sut.Translate(span, this._templateBuilder.Object); this._codeSpanTranslator.Verify(c => c.Translate(It.IsAny <string>(), It.IsAny <ITemplateBuilder>()), Times.Never()); }
public void Match_GivenMarkupCodeGeneratorSpan_ReturnsTrue() { var span = new Span(new SpanBuilder() { CodeGenerator = new MarkupCodeGenerator() }); var sut = new StatementTranslator(); var result = sut.Match(span); Assert.IsFalse(result); }
public void Translate_MultipleMatchingCodeSpanTranslator_CallsFirstTranslater() { Mock <ICodeSpanTranslator> secondTranslator = new Mock <ICodeSpanTranslator>(); secondTranslator.Setup(c => c.Match(It.IsAny <Span>())).Returns(true); this._codeSpanTranslator.Setup(c => c.Match(It.IsAny <Span>())).Returns(true); var span = SpanHelper.BuildSpan("a"); var sut = new StatementTranslator(this._codeSpanTranslator.Object, secondTranslator.Object); sut.Translate(span, this._templateBuilder.Object); this._codeSpanTranslator.Verify(c => c.Translate(span.Content, this._templateBuilder.Object)); secondTranslator.Verify(c => c.Translate(It.IsAny <string>(), It.IsAny <ITemplateBuilder>()), Times.Never()); }
public void Translate_GivenNullTemplateBuilder_ThrowsArgumentNullException() { var sut = new StatementTranslator(); sut.Translate(new Span(new SpanBuilder()), null); }
public void Translate_GivenNullSpan_ThrowsArgumentNullException() { var sut = new StatementTranslator(); sut.Translate(null, this._templateBuilder.Object); }
/// <summary> /// This Translate signature is what the others call into - it doesn't try to hide the fact that externalDependencies should be a NonNullImmutableList /// of strings and it requires an ILogInformation implementation to deal with logging warnings /// </summary> public static NonNullImmutableList <TranslatedStatement> Translate( string scriptContent, NonNullImmutableList <string> externalDependencies, OuterScopeBlockTranslator.OutputTypeOptions outputType, ILogInformation logger) { if (scriptContent == null) { throw new ArgumentNullException("scriptContent"); } if (externalDependencies == null) { throw new ArgumentNullException("externalDependencies"); } if ((outputType != OuterScopeBlockTranslator.OutputTypeOptions.Executable) && (outputType != OuterScopeBlockTranslator.OutputTypeOptions.WithoutScaffolding)) { throw new ArgumentOutOfRangeException("outputType"); } if (logger == null) { throw new ArgumentNullException("logger"); } var startNamespace = new CSharpName("TranslatedProgram"); var startClassName = new CSharpName("Runner"); var startMethodName = new CSharpName("Go"); var runtimeDateLiteralValidatorClassName = new CSharpName("RuntimeDateLiteralValidator"); var supportRefName = new CSharpName("_"); var envClassName = new CSharpName("EnvironmentReferences"); var envRefName = new CSharpName("_env"); var outerClassName = new CSharpName("GlobalReferences"); var outerRefName = new CSharpName("_outer"); VBScriptNameRewriter nameRewriter = name => new CSharpName(DefaultRuntimeSupportClassFactory.DefaultNameRewriter(name.Content)); var tempNameGeneratorNextNumber = 0; TempValueNameGenerator tempNameGenerator = (optionalPrefix, scopeAccessInformation) => { // To get unique names for any given translation, a running counter is maintained and appended to the end of the generated // name. This is only run during translation (this code is not used during execution) so there will be a finite number of // times that this is called (so there should be no need to worry about the int value overflowing!) return(new CSharpName(((optionalPrefix == null) ? "temp" : optionalPrefix.Name) + (++tempNameGeneratorNextNumber).ToString())); }; var statementTranslator = new StatementTranslator(supportRefName, envRefName, outerRefName, nameRewriter, tempNameGenerator, logger); var codeBlockTranslator = new OuterScopeBlockTranslator( startNamespace, startClassName, startMethodName, runtimeDateLiteralValidatorClassName, supportRefName, envClassName, envRefName, outerClassName, outerRefName, nameRewriter, tempNameGenerator, statementTranslator, new ValueSettingStatementsTranslator(supportRefName, envRefName, outerRefName, nameRewriter, statementTranslator, logger), externalDependencies.Select(name => new NameToken(name, 0)).ToNonNullImmutableList(), outputType, logger ); return(codeBlockTranslator.Translate( Parse(scriptContent).ToNonNullImmutableList() )); }