Skip to content

Commit

Permalink
Forcing the usage of a certain CultureInfo for conversions. Closes GH…
Browse files Browse the repository at this point in the history
  • Loading branch information
jeremydmiller committed Apr 19, 2016
1 parent e6648c8 commit 11af81c
Show file tree
Hide file tree
Showing 7 changed files with 136 additions and 114 deletions.
204 changes: 106 additions & 98 deletions documentation/content/st.usage.xml
Expand Up @@ -3,48 +3,98 @@
<ApplicationName>st</ApplicationName>
<Commands>
<CommandReport>
<Name>open</Name>
<Description>Opens the specification editor web tool</Description>
<Arguments>
<ArgumentReport>
<Name>path</Name>
<Description>Path to the StoryTeller project file or the project directory</Description>
</ArgumentReport>
</Arguments>
<Name>doc-run</Name>
<Description>Run the documentation in a live mode</Description>
<Arguments />
<Flags>
<FlagReport>
<UsageDescription>[-b, --build &lt;build&gt;]</UsageDescription>
<Description>Specify a build target to force Storyteller to choose that profile. By default, ST will use 'Debug'</Description>
<UsageDescription>[-d, --directory &lt;directory&gt;]</UsageDescription>
<Description>The documentation directory. The default is 'documentation'</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-p, --profile &lt;profile&gt;]</UsageDescription>
<Description>Storyteller test mode profile for systems like Serenity that use this</Description>
<UsageDescription>[-v, --version &lt;version&gt;]</UsageDescription>
<Description>Override the application version. Default is 'Unknown'</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-t, --timeout &lt;timeout&gt;]</UsageDescription>
<Description>Optional. Default project timeout in seconds.</Description>
<UsageDescription>[-p, --project &lt;project&gt;]</UsageDescription>
<Description>GitHub project name when exporting to project pages of a GitHub repo</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-l, --lifecycle Acceptance|Regression|Any]</UsageDescription>
<Description>Optional. Only runs tests with desired lifecyle</Description>
<UsageDescription>[-c, --code [&lt;code1 code2 code3 ...&gt;]]</UsageDescription>
<Description>Override the directories where sample scanning should be enabled. Default is [src]</Description>
</FlagReport>
</Flags>
<Usages>
<UsageReport>
<Description>Run the documentation in a live mode</Description>
<Usage>st doc-run [-d, --directory &lt;directory&gt;] [-v, --version &lt;version&gt;] [-p, --project &lt;project&gt;] [-c, --code [&lt;code1 code2 code3 ...&gt;]]</Usage>
</UsageReport>
</Usages>
</CommandReport>
<CommandReport>
<Name>doc-seed</Name>
<Description>Seeds a topic file structure from an outline.txt file</Description>
<Arguments />
<Flags>
<FlagReport>
<UsageDescription>[-z, --teamcity]</UsageDescription>
<Description>Optional. Applies extra logging to see progress within TeamCity during CI runs</Description>
<UsageDescription>[-d, --directory &lt;directory&gt;]</UsageDescription>
<Description>The documentation directory. The default is 'documentation'</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-c, --config &lt;confi&gt;]</UsageDescription>
<Description>Optional. Override the config file selection of the Storyteller test running AppDomain</Description>
<UsageDescription>[-v, --version &lt;version&gt;]</UsageDescription>
<Description>Override the application version. Default is 'Unknown'</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-r, --retries &lt;retries&gt;]</UsageDescription>
<Description>Sets a minimum number of retry attempts for this execution</Description>
<UsageDescription>[-p, --project &lt;project&gt;]</UsageDescription>
<Description>GitHub project name when exporting to project pages of a GitHub repo</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-c, --code [&lt;code1 code2 code3 ...&gt;]]</UsageDescription>
<Description>Override the directories where sample scanning should be enabled. Default is [src]</Description>
</FlagReport>
</Flags>
<Usages>
<UsageReport>
<Description>Opens the specification editor web tool</Description>
<Usage>st open &lt;path&gt; [-b, --build &lt;build&gt;] [-p, --profile &lt;profile&gt;] [-t, --timeout &lt;timeout&gt;] [-l, --lifecycle Acceptance|Regression|Any] [-z, --teamcity] [-c, --config &lt;confi&gt;] [-r, --retries &lt;retries&gt;]</Usage>
<Description>Seeds a topic file structure from an outline.txt file</Description>
<Usage>st doc-seed [-d, --directory &lt;directory&gt;] [-v, --version &lt;version&gt;] [-p, --project &lt;project&gt;] [-c, --code [&lt;code1 code2 code3 ...&gt;]]</Usage>
</UsageReport>
</Usages>
</CommandReport>
<CommandReport>
<Name>doc-export</Name>
<Description>Export a documentation project to static html</Description>
<Arguments>
<ArgumentReport>
<Name>destination</Name>
<Description>The destination folder where the docs should be exported to</Description>
</ArgumentReport>
<ArgumentReport>
<Name>exportmode</Name>
<Description>Controls how the urls within the documentation topic pages are generated</Description>
</ArgumentReport>
</Arguments>
<Flags>
<FlagReport>
<UsageDescription>[-d, --directory &lt;directory&gt;]</UsageDescription>
<Description>The documentation directory. The default is 'documentation'</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-v, --version &lt;version&gt;]</UsageDescription>
<Description>Override the application version. Default is 'Unknown'</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-p, --project &lt;project&gt;]</UsageDescription>
<Description>GitHub project name when exporting to project pages of a GitHub repo</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-c, --code [&lt;code1 code2 code3 ...&gt;]]</UsageDescription>
<Description>Override the directories where sample scanning should be enabled. Default is [src]</Description>
</FlagReport>
</Flags>
<Usages>
<UsageReport>
<Description>Export a documentation project to static html</Description>
<Usage>st doc-export &lt;destination&gt; FileDump|Website|ProjectWebsite [-d, --directory &lt;directory&gt;] [-v, --version &lt;version&gt;] [-p, --project &lt;project&gt;] [-c, --code [&lt;code1 code2 code3 ...&gt;]]</Usage>
</UsageReport>
</Usages>
</CommandReport>
Expand Down Expand Up @@ -114,111 +164,69 @@
<UsageDescription>[-r, --retries &lt;retries&gt;]</UsageDescription>
<Description>Sets a minimum number of retry attempts for this execution</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-c, --culture &lt;culture&gt;]</UsageDescription>
<Description>Force Storyteller to use this culture in all value conversions</Description>
</FlagReport>
</Flags>
<Usages>
<UsageReport>
<Description>Execute</Description>
<Usage>st run &lt;path&gt; [-r, --results-path &lt;resultspath&gt;] [-w, --workspace &lt;workspace&gt;] [-e, --exclude-tags &lt;excludetags&gt;] [-o, --open] [-c, --csv &lt;csv&gt;] [-j, --json &lt;json&gt;] [-d, --dump &lt;dump&gt;] [-b, --build &lt;build&gt;] [-p, --profile &lt;profile&gt;] [-t, --timeout &lt;timeout&gt;] [-l, --lifecycle Acceptance|Regression|Any] [-z, --teamcity] [-c, --config &lt;confi&gt;] [-r, --retries &lt;retries&gt;]</Usage>
<Usage>st run &lt;path&gt; [-r, --results-path &lt;resultspath&gt;] [-w, --workspace &lt;workspace&gt;] [-e, --exclude-tags &lt;excludetags&gt;] [-o, --open] [-c, --csv &lt;csv&gt;] [-j, --json &lt;json&gt;] [-d, --dump &lt;dump&gt;] [-b, --build &lt;build&gt;] [-p, --profile &lt;profile&gt;] [-t, --timeout &lt;timeout&gt;] [-l, --lifecycle Acceptance|Regression|Any] [-z, --teamcity] [-c, --config &lt;confi&gt;] [-r, --retries &lt;retries&gt;] [-c, --culture &lt;culture&gt;]</Usage>
</UsageReport>
<UsageReport>
<Description>Execute and save results</Description>
<Usage>st run &lt;path&gt; [-r, --results-path &lt;resultspath&gt;] [-w, --workspace &lt;workspace&gt;] [-e, --exclude-tags &lt;excludetags&gt;] [-o, --open] [-c, --csv &lt;csv&gt;] [-j, --json &lt;json&gt;] [-d, --dump &lt;dump&gt;] [-b, --build &lt;build&gt;] [-p, --profile &lt;profile&gt;] [-t, --timeout &lt;timeout&gt;] [-l, --lifecycle Acceptance|Regression|Any] [-z, --teamcity] [-c, --config &lt;confi&gt;] [-r, --retries &lt;retries&gt;]</Usage>
<Usage>st run &lt;path&gt; [-r, --results-path &lt;resultspath&gt;] [-w, --workspace &lt;workspace&gt;] [-e, --exclude-tags &lt;excludetags&gt;] [-o, --open] [-c, --csv &lt;csv&gt;] [-j, --json &lt;json&gt;] [-d, --dump &lt;dump&gt;] [-b, --build &lt;build&gt;] [-p, --profile &lt;profile&gt;] [-t, --timeout &lt;timeout&gt;] [-l, --lifecycle Acceptance|Regression|Any] [-z, --teamcity] [-c, --config &lt;confi&gt;] [-r, --retries &lt;retries&gt;] [-c, --culture &lt;culture&gt;]</Usage>
</UsageReport>
</Usages>
</CommandReport>
<CommandReport>
<Name>doc-run</Name>
<Description>Run the documentation in a live mode</Description>
<Arguments />
<Flags>
<FlagReport>
<UsageDescription>[-d, --directory &lt;directory&gt;]</UsageDescription>
<Description>The documentation directory. The default is 'documentation'</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-v, --version &lt;version&gt;]</UsageDescription>
<Description>Override the application version. Default is 'Unknown'</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-p, --project &lt;project&gt;]</UsageDescription>
<Description>GitHub project name when exporting to project pages of a GitHub repo</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-c, --code [&lt;code1 code2 code3 ...&gt;]]</UsageDescription>
<Description>Override the directories where sample scanning should be enabled. Default is [src]</Description>
</FlagReport>
</Flags>
<Usages>
<UsageReport>
<Description>Run the documentation in a live mode</Description>
<Usage>st doc-run [-d, --directory &lt;directory&gt;] [-v, --version &lt;version&gt;] [-p, --project &lt;project&gt;] [-c, --code [&lt;code1 code2 code3 ...&gt;]]</Usage>
</UsageReport>
</Usages>
</CommandReport>
<CommandReport>
<Name>doc-seed</Name>
<Description>Seeds a topic file structure from an outline.txt file</Description>
<Arguments />
<Name>open</Name>
<Description>Opens the specification editor web tool</Description>
<Arguments>
<ArgumentReport>
<Name>path</Name>
<Description>Path to the StoryTeller project file or the project directory</Description>
</ArgumentReport>
</Arguments>
<Flags>
<FlagReport>
<UsageDescription>[-d, --directory &lt;directory&gt;]</UsageDescription>
<Description>The documentation directory. The default is 'documentation'</Description>
<UsageDescription>[-b, --build &lt;build&gt;]</UsageDescription>
<Description>Specify a build target to force Storyteller to choose that profile. By default, ST will use 'Debug'</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-v, --version &lt;version&gt;]</UsageDescription>
<Description>Override the application version. Default is 'Unknown'</Description>
<UsageDescription>[-p, --profile &lt;profile&gt;]</UsageDescription>
<Description>Storyteller test mode profile for systems like Serenity that use this</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-p, --project &lt;project&gt;]</UsageDescription>
<Description>GitHub project name when exporting to project pages of a GitHub repo</Description>
<UsageDescription>[-t, --timeout &lt;timeout&gt;]</UsageDescription>
<Description>Optional. Default project timeout in seconds.</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-c, --code [&lt;code1 code2 code3 ...&gt;]]</UsageDescription>
<Description>Override the directories where sample scanning should be enabled. Default is [src]</Description>
<UsageDescription>[-l, --lifecycle Acceptance|Regression|Any]</UsageDescription>
<Description>Optional. Only runs tests with desired lifecyle</Description>
</FlagReport>
</Flags>
<Usages>
<UsageReport>
<Description>Seeds a topic file structure from an outline.txt file</Description>
<Usage>st doc-seed [-d, --directory &lt;directory&gt;] [-v, --version &lt;version&gt;] [-p, --project &lt;project&gt;] [-c, --code [&lt;code1 code2 code3 ...&gt;]]</Usage>
</UsageReport>
</Usages>
</CommandReport>
<CommandReport>
<Name>doc-export</Name>
<Description>Export a documentation project to static html</Description>
<Arguments>
<ArgumentReport>
<Name>destination</Name>
<Description>The destination folder where the docs should be exported to</Description>
</ArgumentReport>
<ArgumentReport>
<Name>exportmode</Name>
<Description>Controls how the urls within the documentation topic pages are generated</Description>
</ArgumentReport>
</Arguments>
<Flags>
<FlagReport>
<UsageDescription>[-d, --directory &lt;directory&gt;]</UsageDescription>
<Description>The documentation directory. The default is 'documentation'</Description>
<UsageDescription>[-z, --teamcity]</UsageDescription>
<Description>Optional. Applies extra logging to see progress within TeamCity during CI runs</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-v, --version &lt;version&gt;]</UsageDescription>
<Description>Override the application version. Default is 'Unknown'</Description>
<UsageDescription>[-c, --config &lt;confi&gt;]</UsageDescription>
<Description>Optional. Override the config file selection of the Storyteller test running AppDomain</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-p, --project &lt;project&gt;]</UsageDescription>
<Description>GitHub project name when exporting to project pages of a GitHub repo</Description>
<UsageDescription>[-r, --retries &lt;retries&gt;]</UsageDescription>
<Description>Sets a minimum number of retry attempts for this execution</Description>
</FlagReport>
<FlagReport>
<UsageDescription>[-c, --code [&lt;code1 code2 code3 ...&gt;]]</UsageDescription>
<Description>Override the directories where sample scanning should be enabled. Default is [src]</Description>
<UsageDescription>[-c, --culture &lt;culture&gt;]</UsageDescription>
<Description>Force Storyteller to use this culture in all value conversions</Description>
</FlagReport>
</Flags>
<Usages>
<UsageReport>
<Description>Export a documentation project to static html</Description>
<Usage>st doc-export &lt;destination&gt; FileDump|Website|ProjectWebsite [-d, --directory &lt;directory&gt;] [-v, --version &lt;version&gt;] [-p, --project &lt;project&gt;] [-c, --code [&lt;code1 code2 code3 ...&gt;]]</Usage>
<Description>Opens the specification editor web tool</Description>
<Usage>st open &lt;path&gt; [-b, --build &lt;build&gt;] [-p, --profile &lt;profile&gt;] [-t, --timeout &lt;timeout&gt;] [-l, --lifecycle Acceptance|Regression|Any] [-z, --teamcity] [-c, --config &lt;confi&gt;] [-r, --retries &lt;retries&gt;] [-c, --culture &lt;culture&gt;]</Usage>
</UsageReport>
</Usages>
</CommandReport>
Expand Down
15 changes: 3 additions & 12 deletions src/ST/Client/RemoteController.cs
Expand Up @@ -67,22 +67,13 @@ public string BinPath
set { _remoteSetup.Setup.PrivateBinPath = value; }
}

public MessagingHub Messaging
{
get { return _messaging; }
}
public MessagingHub Messaging => _messaging;

public void Dispose()
{
if (_watcher != null)
{
_watcher.Dispose();
}
_watcher?.Dispose();

if (_proxy != null)
{
_proxy.Dispose();
}
_proxy?.Dispose();

if (_domain != null)
{
Expand Down
8 changes: 8 additions & 0 deletions src/ST/CommandLine/ProjectInput.cs
Expand Up @@ -43,11 +43,17 @@ public ProjectInput()
[Description("Sets a minimum number of retry attempts for this execution")]
public int RetriesFlag { get; set; }

[Description("Force Storyteller to use this culture in all value conversions")]
public string CultureFlag { get; set; }

public RemoteController BuildRemoteController()
{
var path = Path.ToFullPath();

var controller = new RemoteController(path);
controller.Project.Culture = CultureFlag;


if (BuildFlag.IsNotEmpty())
{
controller.UseBuildProfile(BuildFlag);
Expand All @@ -63,6 +69,8 @@ public RemoteController BuildRemoteController()
controller.Project.TracingStyle = "TeamCity";
}



controller.Project.MaxRetries = RetriesFlag;
controller.Project.Profile = ProfileFlag;

Expand Down
5 changes: 1 addition & 4 deletions src/StoryTeller/Conversion/Conversions.cs
Expand Up @@ -45,10 +45,7 @@ public Conversions()
});
}

public IEnumerable<IRuntimeConverter> RuntimeConvertors
{
get { return _runtimeConvertors; }
}
public IEnumerable<IRuntimeConverter> RuntimeConvertors => _runtimeConvertors;

public void RegisterRuntimeConversion<T>() where T : IRuntimeConverter, new()
{
Expand Down
9 changes: 9 additions & 0 deletions src/StoryTeller/Engine/SpecExecutionRequest.cs
@@ -1,5 +1,8 @@
using System;
using System.Globalization;
using System.IO;
using System.Threading;
using FubuCore;
using StoryTeller.Grammars;
using StoryTeller.Messages;
using StoryTeller.Model;
Expand Down Expand Up @@ -51,6 +54,12 @@ public void ReadXml()

public void CreatePlan(FixtureLibrary library)
{
var culture = Project.CurrentProject?.Culture;
if (culture.IsNotEmpty())
{
Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
}

performAction(() =>
{
Plan = Specification.CreatePlan(library);
Expand Down
8 changes: 8 additions & 0 deletions src/StoryTeller/Engine/SpecificationEngine.cs
@@ -1,7 +1,9 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using FubuCore;
using StoryTeller.Model;
Expand Down Expand Up @@ -129,6 +131,12 @@ private void startTheConsumingQueues(FixtureLibrary library)
{
_planning = new ConsumingQueue(request =>
{
var culture = Project.CurrentProject?.Culture;
if (culture.IsNotEmpty())
{
Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
}
request.CreatePlan(library);
_executionQueue.Enqueue(request);
});
Expand Down

0 comments on commit 11af81c

Please sign in to comment.