Skip to content

Commit

Permalink
Merge pull request #228 from Backs/master
Browse files Browse the repository at this point in the history
Allow to replace/update template file
  • Loading branch information
pwelter34 authored Oct 27, 2016
2 parents a199ada + e0b1d4c commit e7b6e84
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ Template File 1
";
private static string _templateReplaced =
_template.Replace("${TemplateItem}", "**Item1**").Replace("${item2}", "**Item2**")
.Replace("${CASEInsenSiTiveTest}", "**Item3**")
.Replace("${Template.Item.With.Dot}", "**Item4**");
.Replace("${CASEInsenSiTiveTest}", "**Item3**")
.Replace("${Template.Item.With.Dot}", "**Item4**");
private static string _templateFilename;
private string _replacedFilename;

Expand All @@ -30,7 +30,7 @@ public void FixtureInit()
{
MockBuild buildEngine = new MockBuild();
TaskUtility.makeTestDirectory(buildEngine);
_templateFilename = Path.Combine(TaskUtility.TestDirectory, typeof (TemplateFileTest).Name + ".txt");
_templateFilename = Path.Combine(TaskUtility.TestDirectory, typeof(TemplateFileTest).Name + ".txt");
}

[SetUp]
Expand Down Expand Up @@ -74,9 +74,9 @@ private TaskItem[] GetTaskItems(bool includeMetaData)
item = new TaskItem("caseInsensitiveTest");
SetMetaData(item, "**Item3**", includeMetaData);
result.Add(item);
item = new TaskItem("Template.Item.With.Dot");
SetMetaData(item, "**Item4**", includeMetaData);
result.Add(item);
item = new TaskItem("Template.Item.With.Dot");
SetMetaData(item, "**Item4**", includeMetaData);
result.Add(item);
return result.ToArray();
}

Expand Down Expand Up @@ -156,7 +156,7 @@ public void TemplateFileNoMetaData()
string replaced = File.ReadAllText(tf.OutputFile.ItemSpec);
string shouldBeReplaced =
_template.Replace("${TemplateItem}", "").Replace("${item2}", "").Replace("${CASEInsenSiTiveTest}", "")
.Replace("${Template.Item.With.Dot}", "");
.Replace("${Template.Item.With.Dot}", "");
Assert.AreEqual(shouldBeReplaced, replaced);
}

Expand Down Expand Up @@ -190,8 +190,27 @@ public void TemplateFileMissingToken()
_replacedFilename = tf.OutputFile.ItemSpec;
Assert.AreEqual(Path.ChangeExtension(_templateFilename, ".out"), _replacedFilename);
string replaced = File.ReadAllText(tf.OutputFile.ItemSpec);
string shouldBeReplaced = _template.Replace("${TemplateItem}", "**Item1**").Replace("${CASEInsenSiTiveTest}", "**Item3**");
string shouldBeReplaced = _template.Replace("${TemplateItem}", "**Item1**")
.Replace("${CASEInsenSiTiveTest}", "**Item3**");
Assert.AreEqual(shouldBeReplaced, replaced);
}

[Test]
public void TemplateFileReplace()
{
MockBuild build = new MockBuild();
TemplateFile tf = new TemplateFile();
tf.BuildEngine = build;
tf.Template = new TaskItem(_templateFilename);
tf.OutputFilename = _templateFilename;
tf.Tokens = GetTaskItems();
Assert.IsTrue(tf.Execute());
Assert.IsNotNull(tf.OutputFile);
Assert.IsTrue(File.Exists(tf.OutputFile.ItemSpec));
_replacedFilename = tf.OutputFile.ItemSpec;
Assert.AreEqual(_templateFilename, _replacedFilename);
string replaced = File.ReadAllText(tf.OutputFile.ItemSpec);
Assert.AreEqual(_templateReplaced, replaced);
}
}
}
29 changes: 16 additions & 13 deletions Source/MSBuild.Community.Tasks/TemplateFile/TemplateFile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ namespace MSBuild.Community.Tasks
/// </Tokens>
/// </ItemGroup>
///
/// <TemplateFile Template="ATemplateFile.template" OutputFilename="ReplacedFile.txt" Tokens="@(Tokens)" />
/// <TemplateFile Template="ATemplateFile.template" OutputFilename="ReplacedFile.txt" Tokens="@(Tokens)" />
/// ]]></code>
/// </example>
/// <remarks>Tokens in the template file are formatted using ${var} syntax and names are not
Expand All @@ -36,13 +36,13 @@ public class TemplateFile : Task
private Dictionary<string, string> _tokenPairs;
private ITaskItem[] _tokens;
private static readonly string DefaultExt = ".out";

/// <summary>
/// Default constructor. Creates a new TemplateFile task.
/// </summary>
public TemplateFile()
{
_regex = new Regex(@"(?<token>\$\{(?<identifier>[^}]*)\})", RegexOptions.Singleline | RegexOptions.Compiled
_regex = new Regex(@"(?<token>\$\{(?<identifier>[^}]*)\})", RegexOptions.Singleline | RegexOptions.Compiled
| RegexOptions.Multiline | RegexOptions.IgnoreCase);
}

Expand Down Expand Up @@ -85,7 +85,7 @@ public ITaskItem[] Tokens
get { return _tokens; }
set { _tokens = value; }
}

/// <summary>
/// Executes the task.
/// </summary>
Expand All @@ -96,17 +96,20 @@ public override bool Execute()
if (File.Exists(_templateFile.ItemSpec))
{
ParseTokens();
string text2;
using (StreamReader reader = new StreamReader(_templateFile.ItemSpec))
{
string text2 = _regex.Replace(reader.ReadToEnd(), new MatchEvaluator(MatchEval));
using (StreamWriter w = new StreamWriter(GetOutputFilename()))
{
w.Write(text2);
w.Flush();
Log.LogMessage("Template replaced and written to '{0}'", _outputFilename);
result = true;
}
text2 = _regex.Replace(reader.ReadToEnd(), new MatchEvaluator(MatchEval));
}

using (StreamWriter w = new StreamWriter(GetOutputFilename()))
{
w.Write(text2);
w.Flush();
Log.LogMessage("Template replaced and written to '{0}'", _outputFilename);
result = true;
}

}
else
{
Expand All @@ -121,7 +124,7 @@ private string GetOutputFilename()
{
_outputFilename = Path.ChangeExtension(_templateFile.ItemSpec, DefaultExt);
}
_outputFilename = Path.IsPathRooted(_outputFilename) ? _outputFilename :
_outputFilename = Path.IsPathRooted(_outputFilename) ? _outputFilename :
Path.Combine(Path.GetDirectoryName(_templateFile.ItemSpec), _outputFilename);
_outputFile = new TaskItem(_outputFilename);
return _outputFilename;
Expand Down

0 comments on commit e7b6e84

Please sign in to comment.