Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/RSuter/NJsonSchema
Browse files Browse the repository at this point in the history
  • Loading branch information
RicoSuter committed Oct 31, 2018
2 parents 527e525 + 05dd8f0 commit 3f9e6be
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using NJsonSchema.CodeGeneration.TypeScript;
using System.Threading.Tasks;
using System.Threading.Tasks;
using Xunit;

namespace NJsonSchema.CodeGeneration.TypeScript.Tests
Expand Down Expand Up @@ -53,27 +52,27 @@ public void When_extension_code_is_processed_then_code_and_classes_are_correctly
var code = Code;

//// Act
var ext = new TypeScriptExtensionCode(code, new[] { "Foo", "Bar" }, new [] { "BaseClass" });
var extensionCode = new TypeScriptExtensionCode(code, new[] { "Foo", "Bar" }, new [] { "BaseClass" });

//// Assert
Assert.True(ext.ExtensionClasses.ContainsKey("Foo"));
Assert.StartsWith("export class Foo extends Foo {", ext.ExtensionClasses["Foo"]);
Assert.True(extensionCode.ExtensionClasses.ContainsKey("Foo"));
Assert.StartsWith("export class Foo extends Foo {", extensionCode.ExtensionClasses["Foo"]);

Assert.True(ext.ExtensionClasses.ContainsKey("Bar"));
Assert.StartsWith("export class Bar extends Bar {", ext.ExtensionClasses["Bar"]);
Assert.True(extensionCode.ExtensionClasses.ContainsKey("Bar"));
Assert.StartsWith("export class Bar extends Bar {", extensionCode.ExtensionClasses["Bar"]);

Assert.Contains("<reference path", ext.ImportCode);
Assert.Contains("import foo = require(\"foo/bar\")", ext.ImportCode);
Assert.Contains("import bar = require(\"foo/bar\")", ext.ImportCode);
Assert.Contains("<reference path", extensionCode.ImportCode);
Assert.Contains("import foo = require(\"foo/bar\")", extensionCode.ImportCode);
Assert.Contains("import bar = require(\"foo/bar\")", extensionCode.ImportCode);

Assert.StartsWith("var clientClasses", ext.BottomCode);
Assert.Contains("if (clientClasses.hasOwnProperty(clientClass))", ext.BottomCode);
Assert.Contains("export class Test", ext.BottomCode);
Assert.EndsWith("var x = 10;", ext.BottomCode);
Assert.StartsWith("var clientClasses", extensionCode.BottomCode);
Assert.Contains("if (clientClasses.hasOwnProperty(clientClass))", extensionCode.BottomCode);
Assert.Contains("export class Test", extensionCode.BottomCode);
Assert.EndsWith("var x = 10;", extensionCode.BottomCode);

Assert.Contains("export abstract class BaseClass", ext.TopCode);
Assert.Contains("export abstract class BaseClass", extensionCode.TopCode);

var body = ext.GetExtensionClassBody("Foo");
var body = extensionCode.GetExtensionClassBody("Foo");
Assert.Contains("get title() {", body);
Assert.DoesNotContain("ignore();", body);
}
Expand Down Expand Up @@ -112,5 +111,27 @@ public async Task When_classes_have_extension_code_then_class_body_is_copied()
Assert.Contains("return this.firstName + ' ' + this.lastName;", code);
Assert.Contains("return this.bar ? this.bar.title : '';", code);
}

[Fact]
public void When_extension_code_has_comment_then_it_is_processed_correctly()
{
//// Arrange
var code = @"// This is the class that uses HTTP
export class UseHttpCookiesForApi {
protected transformOptions(options: RequestInit): Promise<RequestInit> {
options.credentials = 'same-origin';
return Promise.resolve(options);
}
}";

//// Act
var extensionCode = new TypeScriptExtensionCode(code, new string[0], new[] { "UseHttpCookiesForApi" });

//// Assert
Assert.Empty(extensionCode.ExtensionClasses);
Assert.DoesNotContain("UseHttpCookiesForApi", extensionCode.BottomCode);
Assert.Contains("UseHttpCookiesForApi", extensionCode.TopCode);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@ public TypeScriptExtensionCode(string code, string[] extendedClasses, string[] b
return string.Empty;
}, RegexOptions.Multiline);

code = Regex.Replace(code, "(@.*\n)?(export )?[^\n]*?class (.*?) ([\\s\\S]*?)\\n}", match =>
code = Regex.Replace(code, "(@.*\n)?((export )?[^\n]*?class ([\\S]*)(.*?)\n ([\\s\\S]*?)\n})", match =>
{
var hasExport = match.Groups[2].Success;
var className = match.Groups[3].Value;
var classCode = hasExport ? match.Groups[0].Value : match.Groups[0].Value.Replace("class " + className, "export class " + className);
var hasExport = match.Groups[3].Success;
var className = match.Groups[4].Value;
var classCode = hasExport ? match.Groups[2].Value : match.Groups[2].Value.Replace("class " + className, "export class " + className);

if (extendedClasses?.Contains(className) == true)
{
Expand Down

0 comments on commit 3f9e6be

Please sign in to comment.