Skip to content

Commit e7b6e84

Browse files
authoredOct 27, 2016
Merge pull request #228 from Backs/master
Allow to replace/update template file
2 parents a199ada + e0b1d4c commit e7b6e84

File tree

2 files changed

+43
-21
lines changed

2 files changed

+43
-21
lines changed
 

‎Source/MSBuild.Community.Tasks.Tests/TemplateFile/TemplateFileTest.cs

+27-8
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ Template File 1
2020
";
2121
private static string _templateReplaced =
2222
_template.Replace("${TemplateItem}", "**Item1**").Replace("${item2}", "**Item2**")
23-
.Replace("${CASEInsenSiTiveTest}", "**Item3**")
24-
.Replace("${Template.Item.With.Dot}", "**Item4**");
23+
.Replace("${CASEInsenSiTiveTest}", "**Item3**")
24+
.Replace("${Template.Item.With.Dot}", "**Item4**");
2525
private static string _templateFilename;
2626
private string _replacedFilename;
2727

@@ -30,7 +30,7 @@ public void FixtureInit()
3030
{
3131
MockBuild buildEngine = new MockBuild();
3232
TaskUtility.makeTestDirectory(buildEngine);
33-
_templateFilename = Path.Combine(TaskUtility.TestDirectory, typeof (TemplateFileTest).Name + ".txt");
33+
_templateFilename = Path.Combine(TaskUtility.TestDirectory, typeof(TemplateFileTest).Name + ".txt");
3434
}
3535

3636
[SetUp]
@@ -74,9 +74,9 @@ private TaskItem[] GetTaskItems(bool includeMetaData)
7474
item = new TaskItem("caseInsensitiveTest");
7575
SetMetaData(item, "**Item3**", includeMetaData);
7676
result.Add(item);
77-
item = new TaskItem("Template.Item.With.Dot");
78-
SetMetaData(item, "**Item4**", includeMetaData);
79-
result.Add(item);
77+
item = new TaskItem("Template.Item.With.Dot");
78+
SetMetaData(item, "**Item4**", includeMetaData);
79+
result.Add(item);
8080
return result.ToArray();
8181
}
8282

@@ -156,7 +156,7 @@ public void TemplateFileNoMetaData()
156156
string replaced = File.ReadAllText(tf.OutputFile.ItemSpec);
157157
string shouldBeReplaced =
158158
_template.Replace("${TemplateItem}", "").Replace("${item2}", "").Replace("${CASEInsenSiTiveTest}", "")
159-
.Replace("${Template.Item.With.Dot}", "");
159+
.Replace("${Template.Item.With.Dot}", "");
160160
Assert.AreEqual(shouldBeReplaced, replaced);
161161
}
162162

@@ -190,8 +190,27 @@ public void TemplateFileMissingToken()
190190
_replacedFilename = tf.OutputFile.ItemSpec;
191191
Assert.AreEqual(Path.ChangeExtension(_templateFilename, ".out"), _replacedFilename);
192192
string replaced = File.ReadAllText(tf.OutputFile.ItemSpec);
193-
string shouldBeReplaced = _template.Replace("${TemplateItem}", "**Item1**").Replace("${CASEInsenSiTiveTest}", "**Item3**");
193+
string shouldBeReplaced = _template.Replace("${TemplateItem}", "**Item1**")
194+
.Replace("${CASEInsenSiTiveTest}", "**Item3**");
194195
Assert.AreEqual(shouldBeReplaced, replaced);
195196
}
197+
198+
[Test]
199+
public void TemplateFileReplace()
200+
{
201+
MockBuild build = new MockBuild();
202+
TemplateFile tf = new TemplateFile();
203+
tf.BuildEngine = build;
204+
tf.Template = new TaskItem(_templateFilename);
205+
tf.OutputFilename = _templateFilename;
206+
tf.Tokens = GetTaskItems();
207+
Assert.IsTrue(tf.Execute());
208+
Assert.IsNotNull(tf.OutputFile);
209+
Assert.IsTrue(File.Exists(tf.OutputFile.ItemSpec));
210+
_replacedFilename = tf.OutputFile.ItemSpec;
211+
Assert.AreEqual(_templateFilename, _replacedFilename);
212+
string replaced = File.ReadAllText(tf.OutputFile.ItemSpec);
213+
Assert.AreEqual(_templateReplaced, replaced);
214+
}
196215
}
197216
}

‎Source/MSBuild.Community.Tasks/TemplateFile/TemplateFile.cs

+16-13
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace MSBuild.Community.Tasks
1818
/// </Tokens>
1919
/// </ItemGroup>
2020
///
21-
/// <TemplateFile Template="ATemplateFile.template" OutputFilename="ReplacedFile.txt" Tokens="@(Tokens)" />
21+
/// <TemplateFile Template="ATemplateFile.template" OutputFilename="ReplacedFile.txt" Tokens="@(Tokens)" />
2222
/// ]]></code>
2323
/// </example>
2424
/// <remarks>Tokens in the template file are formatted using ${var} syntax and names are not
@@ -36,13 +36,13 @@ public class TemplateFile : Task
3636
private Dictionary<string, string> _tokenPairs;
3737
private ITaskItem[] _tokens;
3838
private static readonly string DefaultExt = ".out";
39-
39+
4040
/// <summary>
4141
/// Default constructor. Creates a new TemplateFile task.
4242
/// </summary>
4343
public TemplateFile()
4444
{
45-
_regex = new Regex(@"(?<token>\$\{(?<identifier>[^}]*)\})", RegexOptions.Singleline | RegexOptions.Compiled
45+
_regex = new Regex(@"(?<token>\$\{(?<identifier>[^}]*)\})", RegexOptions.Singleline | RegexOptions.Compiled
4646
| RegexOptions.Multiline | RegexOptions.IgnoreCase);
4747
}
4848

@@ -85,7 +85,7 @@ public ITaskItem[] Tokens
8585
get { return _tokens; }
8686
set { _tokens = value; }
8787
}
88-
88+
8989
/// <summary>
9090
/// Executes the task.
9191
/// </summary>
@@ -96,17 +96,20 @@ public override bool Execute()
9696
if (File.Exists(_templateFile.ItemSpec))
9797
{
9898
ParseTokens();
99+
string text2;
99100
using (StreamReader reader = new StreamReader(_templateFile.ItemSpec))
100101
{
101-
string text2 = _regex.Replace(reader.ReadToEnd(), new MatchEvaluator(MatchEval));
102-
using (StreamWriter w = new StreamWriter(GetOutputFilename()))
103-
{
104-
w.Write(text2);
105-
w.Flush();
106-
Log.LogMessage("Template replaced and written to '{0}'", _outputFilename);
107-
result = true;
108-
}
102+
text2 = _regex.Replace(reader.ReadToEnd(), new MatchEvaluator(MatchEval));
109103
}
104+
105+
using (StreamWriter w = new StreamWriter(GetOutputFilename()))
106+
{
107+
w.Write(text2);
108+
w.Flush();
109+
Log.LogMessage("Template replaced and written to '{0}'", _outputFilename);
110+
result = true;
111+
}
112+
110113
}
111114
else
112115
{
@@ -121,7 +124,7 @@ private string GetOutputFilename()
121124
{
122125
_outputFilename = Path.ChangeExtension(_templateFile.ItemSpec, DefaultExt);
123126
}
124-
_outputFilename = Path.IsPathRooted(_outputFilename) ? _outputFilename :
127+
_outputFilename = Path.IsPathRooted(_outputFilename) ? _outputFilename :
125128
Path.Combine(Path.GetDirectoryName(_templateFile.ItemSpec), _outputFilename);
126129
_outputFile = new TaskItem(_outputFilename);
127130
return _outputFilename;

0 commit comments

Comments
 (0)