Skip to content

Commit 167f9c7

Browse files
authored
Merge pull request #48 from nycdotnet/script-as-csharp
Implement v0.2.0-beta
2 parents 4c4ba3e + 818bc44 commit 167f9c7

30 files changed

+916
-11410
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
1+
Code/Packages/
22
Deploy/Binaries/
33

44
#################
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
using NUnit.Framework;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Data.SqlClient;
5+
using System.Linq;
6+
using System.Text;
7+
8+
namespace TSqlFlex.Core.Tests
9+
{
10+
[TestFixture()]
11+
class CSharpRenderTests
12+
{
13+
[Test()]
14+
public void two_simple_columns_returns_valid_class()
15+
{
16+
var resultSet = new FlexResultSet();
17+
var result = new FlexResult();
18+
result.schema = new List<SQLColumn>() {
19+
new SQLColumn() { ColumnName = "testa", DataType = "int" },
20+
new SQLColumn() { ColumnName = "testb", DataType = "varchar" }
21+
};
22+
result.data = new List<object[]>();
23+
resultSet.results.Add(result);
24+
25+
var srp = new SqlRunParameters(new SqlConnectionStringBuilder(), SqlRunParameters.TO_CSHARP, "");
26+
CSharpRenderer.renderAsCSharp(resultSet, srp);
27+
var expected = @"public class Result0
28+
{
29+
public int testa { get; set; }
30+
public string testb { get; set; }
31+
}
32+
";
33+
Assert.AreEqual(srp.resultsText.ToString(), expected);
34+
}
35+
36+
[Test()]
37+
public void handle_duplicate_column_names()
38+
{
39+
var resultSet = new FlexResultSet();
40+
var result = new FlexResult();
41+
result.schema = new List<SQLColumn>() {
42+
new SQLColumn() { ColumnName = "testa", DataType = "int" },
43+
new SQLColumn() { ColumnName = "testa", DataType = "varchar" }
44+
};
45+
result.data = new List<object[]>();
46+
resultSet.results.Add(result);
47+
48+
var srp = new SqlRunParameters(new SqlConnectionStringBuilder(), SqlRunParameters.TO_CSHARP, "");
49+
CSharpRenderer.renderAsCSharp(resultSet, srp);
50+
var expected = @"public class Result0
51+
{
52+
public int testa { get; set; }
53+
public string testa_2 { get; set; }
54+
}
55+
";
56+
Assert.AreEqual(srp.resultsText.ToString(), expected);
57+
58+
}
59+
60+
[TestCase("aaaa", 'a')]
61+
[TestCase("AAAA", 'A')]
62+
[TestCase("zzzz", 'z')]
63+
[TestCase("ZZZZ", 'Z')]
64+
[TestCase("____", '_')]
65+
[TestCase("@_", '@')]
66+
public void FieldNameStartsWithAZazUnderscoreAt_WhenProcessed_FirstCharIsSame(
67+
string fieldName, char expectedFirstChar)
68+
{
69+
Assert.AreEqual(CSharpRenderer.FieldNameToCSharpPropertyName(fieldName)[0], expectedFirstChar);
70+
}
71+
72+
[TestCase("@", "@")]
73+
[TestCase("@@", "@_")]
74+
[TestCase("@@@", "@__")]
75+
[TestCase("@a@", "@a_")]
76+
public void AtSignAfterFirstCharacter_WhenProcessed_IsReplaced(
77+
string fieldName, string expectedResult)
78+
{
79+
Assert.AreEqual(CSharpRenderer.FieldNameToCSharpPropertyName(fieldName), expectedResult);
80+
}
81+
82+
83+
[TestCase("-test", '_')]
84+
[TestCase(" test", '_')]
85+
[TestCase("!test", '_')]
86+
public void FieldNameStartsWithDashSpaceExclaim_WhenProcessed_FirstCharIsUnderscore(
87+
string fieldName, char expectedFirstChar)
88+
{
89+
Assert.AreEqual(CSharpRenderer.FieldNameToCSharpPropertyName(fieldName)[0], expectedFirstChar);
90+
}
91+
92+
[Test()]
93+
public void EscapedNamesLeadingToACollisionAreHandledCorrectly()
94+
{
95+
var resultSet = new FlexResultSet();
96+
var result = new FlexResult();
97+
result.schema = new List<SQLColumn>() {
98+
new SQLColumn() { ColumnName = "test_1", DataType = "varchar" },
99+
new SQLColumn() { ColumnName = "test?1", DataType = "varchar" }
100+
};
101+
result.data = new List<object[]>();
102+
resultSet.results.Add(result);
103+
104+
var srp = new SqlRunParameters(new SqlConnectionStringBuilder(), SqlRunParameters.TO_CSHARP, "");
105+
CSharpRenderer.renderAsCSharp(resultSet, srp);
106+
var expected = @"public class Result0
107+
{
108+
public string test_1 { get; set; }
109+
public string test_1_2 { get; set; }
110+
}
111+
";
112+
Assert.AreEqual(srp.resultsText.ToString(), expected);
113+
}
114+
115+
[Test()]
116+
public void AnonymousColumnsAreHandledCorrectly()
117+
{
118+
var resultSet = new FlexResultSet();
119+
var result = new FlexResult();
120+
result.schema = new List<SQLColumn>() {
121+
new SQLColumn() { ColumnName = "", DataType = "varchar" },
122+
new SQLColumn() { ColumnName = "", DataType = "int" }
123+
};
124+
result.data = new List<object[]>();
125+
resultSet.results.Add(result);
126+
127+
var srp = new SqlRunParameters(new SqlConnectionStringBuilder(), SqlRunParameters.TO_CSHARP, "");
128+
CSharpRenderer.renderAsCSharp(resultSet, srp);
129+
var expected = @"public class Result0
130+
{
131+
public string anonymousProperty { get; set; }
132+
public int anonymousProperty_2 { get; set; }
133+
}
134+
";
135+
Assert.AreEqual(srp.resultsText.ToString(), expected);
136+
}
137+
138+
}
139+
140+
141+
}

Code/TSqlFlex.Core.Tests/DataScriptingTests.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,39 @@ public void NCHAR_Data_ScriptsCorrectly()
443443
Assert.AreEqual("That's fun!", FieldScripting.formatNchar(data, false), "nchar does not escape quotes in strings when not scripted for SQL.");
444444
}
445445

446+
[Test()]
447+
public void StringDataWithNulls_ScriptsCorrectly()
448+
{
449+
var leadingNull = new char[] { '\0', 'A', 'B', 'C' };
450+
var trailingNull = new char[] { 'A', 'B', 'C', '\0' };
451+
452+
string baseData = new string(leadingNull);
453+
object data = baseData;
454+
455+
var fieldInfo = SchemaScriptingTests.FakeColumn("test", "test", 15, "nvarchar", false, 0, 0);
456+
Assert.AreEqual("0x00414243", FieldScripting.valueAsTSQLLiteral(data, fieldInfo), "nvarchar");
457+
458+
baseData = new string(trailingNull);
459+
data = baseData;
460+
461+
462+
fieldInfo = SchemaScriptingTests.FakeColumn("test", "test", 15, "nvarchar", false, 0, 0);
463+
Assert.AreEqual("0x41424300", FieldScripting.valueAsTSQLLiteral(data, fieldInfo), "nvarchar");
464+
}
465+
466+
[Test()]
467+
public void String_IncludingHighChar_ScriptsCorrectly()
468+
{
469+
var highChar = new char[] { '\0', '†', 'B', 'C' };
470+
471+
string baseData = new string(highChar);
472+
object data = baseData;
473+
474+
var fieldInfo = SchemaScriptingTests.FakeColumn("test", "test", 15, "nvarchar", false, 0, 0);
475+
Assert.AreEqual("0x00864243", FieldScripting.valueAsTSQLLiteral(data, fieldInfo), "nvarchar");
476+
}
477+
478+
446479
[Test()]
447480
public void NVARCHAR_Data_ScriptsCorrectly()
448481
{

Code/TSqlFlex.Core.Tests/FlexResultSetTests.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ public void ResultSet_WithNoReturnedSchema_ResultsInNoReturnedSchemaComment()
2121
{
2222
FlexResultSet fsr = new FlexResultSet();
2323

24-
var dt = SchemaScriptingTests.FakeSchemaDataTable();
25-
2624
var result = new FlexResult();
2725

2826
fsr.results.Add(result);
@@ -35,10 +33,10 @@ public void ResultSet_WithNoReturnedData_ResultsInNoReturnedDataComment()
3533
{
3634
FlexResultSet fsr = new FlexResultSet();
3735

38-
var dt = SchemaScriptingTests.FakeSchemaDataTable();
39-
40-
dt.LoadDataRow(SchemaScriptingTests.FakeColumn("IntNotNull", "MyStuff", 32, "int", false, 255, 255), false);
41-
dt.LoadDataRow(SchemaScriptingTests.FakeColumn("IntNull", "MyStuff", 32, "int", true, 255, 255), false);
36+
var dt = new List<SQLColumn>() {
37+
SchemaScriptingTests.FakeColumn("IntNotNull", "MyStuff", 32, "int", false, 255, 255),
38+
SchemaScriptingTests.FakeColumn("IntNull", "MyStuff", 32, "int", true, 255, 255)
39+
};
4240

4341
FlexResult result = new FlexResult();
4442

Code/TSqlFlex.Core.Tests/InternationalTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ class InternationalTests
1212
private CultureInfo originalCulture;
1313
private CultureInfo originalUICulture;
1414

15-
[TestFixtureSetUp()]
15+
[OneTimeSetUp()]
1616
public void StartCultureTesting()
1717
{
1818
originalCulture = Thread.CurrentThread.CurrentCulture;
1919
originalUICulture = Thread.CurrentThread.CurrentUICulture;
2020
}
2121

22-
[TestFixtureTearDown()]
22+
[OneTimeTearDown()]
2323
public void EndCultureTesting()
2424
{
2525
Thread.CurrentThread.CurrentCulture = originalCulture;
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
using NUnit.Framework;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
7+
namespace TSqlFlex.Core.Tests
8+
{
9+
[TestFixture()]
10+
class QueryRunnerTests
11+
{
12+
13+
[Test()]
14+
public void EmptyResultsProducesEmptySqlColumnList()
15+
{
16+
var sut = SQLColumnList.CreateFromSchemaTable(null);
17+
Assert.IsNotNull(sut);
18+
Assert.AreEqual(0, sut.Count);
19+
}
20+
21+
[Test()]
22+
public void EmptyColumnList_NotRenderableAsCreateTable()
23+
{
24+
var sut = new FlexResult();
25+
sut.schema = new List<SQLColumn>();
26+
Assert.AreEqual(false, FieldScripting.ResultIsRenderableAsCreateTable(sut));
27+
}
28+
29+
[Test()]
30+
public void NullColumnList_NotRenderableAsCreateTable()
31+
{
32+
var sut = new FlexResult();
33+
Assert.AreEqual(false, FieldScripting.ResultIsRenderableAsCreateTable(sut));
34+
}
35+
36+
[Test()]
37+
public void PopulatedColumnList_IsRenderableAsCreateTable()
38+
{
39+
var sut = new FlexResult();
40+
sut.schema = new List<SQLColumn>() { new SQLColumn() { ColumnName = "test", DataType = "int" }};
41+
Assert.AreEqual(true, FieldScripting.ResultIsRenderableAsCreateTable(sut));
42+
}
43+
44+
}
45+
}

0 commit comments

Comments
 (0)