Skip to content

Commit

Permalink
#63: Add Configuration.BaseUrl (#95)
Browse files Browse the repository at this point in the history
* Add BaseUrl property to Configuration
Add tests for BaseUrl

* #63: Add Configuration.BaseUrl

Add BaseUrl property to Configuration
Add tests for BaseUrl

* Fix automatic IDE alignments in Configuration.cs

* Fix IDE auto alignment in Configuration_Specs.cs

---------

Co-authored-by: Dmitriy Grinevich <[email protected]>
  • Loading branch information
davespoon and Dmitriy Grinevich authored Feb 9, 2024
1 parent b27e3ce commit d063a03
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 18 deletions.
47 changes: 41 additions & 6 deletions NSelene/Configuration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public interface _SeleneSettings_
bool? ClickByJs { get; set; }
bool? WaitForNoOverlapFoundByJs { get; set; }
Action<object, Func<string>, Action> _HookWaitAction { get; set; }
string BaseUrl { get; set; }
}

/// Configuration is considered as a defined group of all settings
Expand Down Expand Up @@ -165,6 +166,14 @@ Action<object, Func<string>, Action> _SeleneSettings_._HookWaitAction
}
}

private Ref<string> _refBaseUrl = new Ref<string>();

string _SeleneSettings_.BaseUrl
{
get { return this._refBaseUrl.Value; }
set { this._refBaseUrl.Value = value; }
}

private Configuration(
Ref<IWebDriver> refDriver,
Ref<double?> refTimeout,
Expand All @@ -173,8 +182,8 @@ private Configuration(
Ref<bool?> refTypeByJs,
Ref<bool?> refClickByJs,
Ref<bool?> refWaitForNoOverlapFoundByJs,
Ref<Action<object, Func<string>, Action>> _ref_HookWaitAction
)
Ref<Action<object, Func<string>, Action>> _ref_HookWaitAction,
Ref<string> refBaseUrl)
{
_refDriver = refDriver ?? new Ref<IWebDriver>();
_refTimeout = refTimeout ?? new Ref<double?>();
Expand All @@ -184,6 +193,7 @@ Ref<Action<object, Func<string>, Action>> _ref_HookWaitAction
_refClickByJs = refClickByJs ?? new Ref<bool?>();
_refWaitForNoOverlapFoundByJs = refWaitForNoOverlapFoundByJs ?? new Ref<bool?>();
this._ref_HookWaitAction = _ref_HookWaitAction ?? new Ref<Action<object, Func<string>, Action>>();
_refBaseUrl = refBaseUrl ?? new Ref<string>();
}

// TODO: consider making public
Expand All @@ -198,7 +208,8 @@ internal Configuration()
refTypeByJs: null,
refClickByJs: null,
refWaitForNoOverlapFoundByJs: null,
_ref_HookWaitAction: null
_ref_HookWaitAction: null,
refBaseUrl: null
) {}

public static _SeleneSettings_ _New_(
Expand All @@ -209,7 +220,8 @@ public static _SeleneSettings_ _New_(
bool typeByJs = false,
bool clickByJs = false,
bool waitForNoOverlapFoundByJs = false,
Action<object, Func<string>, Action> _hookWaitAction = null
Action<object, Func<string>, Action> _hookWaitAction = null,
string baseUrl = ""
)
{
_SeleneSettings_ next = new Configuration();
Expand All @@ -222,6 +234,7 @@ public static _SeleneSettings_ _New_(
next.ClickByJs = clickByJs;
next.WaitForNoOverlapFoundByJs = waitForNoOverlapFoundByJs;
next._HookWaitAction = _hookWaitAction;
next.BaseUrl = baseUrl;

return next;
}
Expand Down Expand Up @@ -260,6 +273,10 @@ internal static _SeleneSettings_ Shared
_ref_HookWaitAction: new Ref<Action<object, Func<string>, Action>>(
getter: () => Configuration._HookWaitAction,
setter: value => Configuration._HookWaitAction = value
),
refBaseUrl: new Ref<string>(
getter: () => Configuration.BaseUrl,
setter: value => Configuration.BaseUrl = value ?? ""
)
);

Expand All @@ -274,7 +291,8 @@ public static _SeleneSettings_ _With_(
bool? typeByJs = null,
bool? clickByJs = null,
bool? waitForNoOverlapFoundByJs = null,
Action<object, Func<string>, Action> _hookWaitAction = null
Action<object, Func<string>, Action> _hookWaitAction = null,
string baseUrl = null
)
{
_SeleneSettings_ next = new Configuration();
Expand All @@ -287,6 +305,7 @@ public static _SeleneSettings_ _With_(
next.ClickByJs = clickByJs;
next.WaitForNoOverlapFoundByJs = waitForNoOverlapFoundByJs;
next._HookWaitAction = _hookWaitAction;
next.BaseUrl = baseUrl;

return Configuration.Shared.With(next);
}
Expand Down Expand Up @@ -319,7 +338,10 @@ _SeleneSettings_ overrides
: new Ref<bool?>(overrides.WaitForNoOverlapFoundByJs),
_ref_HookWaitAction: overrides._HookWaitAction == null
? this._ref_HookWaitAction
: new Ref<Action<object, Func<string>, Action>>(overrides._HookWaitAction)
: new Ref<Action<object, Func<string>, Action>>(overrides._HookWaitAction),
refBaseUrl: overrides.BaseUrl == null
? this._refBaseUrl
: new Ref<string>(overrides.BaseUrl)
);
}

Expand Down Expand Up @@ -439,6 +461,19 @@ public static Action<object, Func<string>, Action> _HookWaitAction
Configuration.__HookWaitAction.Value = value;
}
}

private static ThreadLocal<string> _BaseUrl = new ThreadLocal<string>();
public static string BaseUrl
{
get
{
return Configuration._BaseUrl.Value ?? "";
}
set
{
Configuration._BaseUrl.Value = value;
}
}

[Obsolete("Use Configuration.Driver over deprecated Configuration.WebDriver")]
public static IWebDriver WebDriver
Expand Down
40 changes: 28 additions & 12 deletions NSeleneTests/Integration/SharedDriver/Configuration_Specs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public void InitConfiguration()
Configuration.Timeout = 4;
Configuration.PollDuringWaits = 0.1;
Configuration.SetValueByJs = false;
Configuration.BaseUrl = "";
}

[OneTimeTearDown]
Expand All @@ -42,6 +43,7 @@ public void ResetConfiguration()
Configuration.Timeout = 4;
Configuration.PollDuringWaits = 0.1;
Configuration.SetValueByJs = false;
Configuration.BaseUrl = "";
}

[Test]
Expand All @@ -59,6 +61,7 @@ public void New_CreatesNewConfigWithAllSettingsDefaults()
Configuration.Timeout = 9.9;
Configuration.PollDuringWaits = 0.9;
Configuration.SetValueByJs = true;
Configuration.BaseUrl = "test url";

// WHEN
var fresh = Configuration._New_();
Expand All @@ -68,6 +71,7 @@ public void New_CreatesNewConfigWithAllSettingsDefaults()
Assert.AreEqual(4.0, fresh.Timeout);
Assert.AreEqual(0.1, fresh.PollDuringWaits);
Assert.AreEqual(false, fresh.SetValueByJs);
Assert.AreEqual("", fresh.BaseUrl);
}

[Test]
Expand All @@ -78,6 +82,7 @@ public void New_DoesNotTouchExistingSharedStaticConfiguration()
Configuration.Timeout = 9.9;
Configuration.PollDuringWaits = 0.9;
Configuration.SetValueByJs = true;
Configuration.BaseUrl = "test url";

// WHEN
var fresh = Configuration._New_();
Expand All @@ -87,6 +92,7 @@ public void New_DoesNotTouchExistingSharedStaticConfiguration()
Assert.AreEqual(9.9, Configuration.Timeout);
Assert.AreEqual(0.9, Configuration.PollDuringWaits);
Assert.AreEqual(true, Configuration.SetValueByJs);
Assert.AreEqual("test url", Configuration.BaseUrl);
}

[Test]
Expand All @@ -96,33 +102,39 @@ public void New_CanCustomizeManySettings()
driver: this._driver1,
timeout: 2.0,
pollDuringWaits: 0.2,
setValueByJs: true
setValueByJs: true,
baseUrl: "test url"
);

Assert.AreEqual(this._driver1, custom.Driver);
Assert.AreEqual(2.0, custom.Timeout);
Assert.AreEqual(0.2, custom.PollDuringWaits);
Assert.AreEqual(true, custom.SetValueByJs);
Assert.AreEqual("test url", custom.BaseUrl);
}

[Test]
public void New_CanCustomizeSetting()
{
Configuration.Timeout= 1.0;
Configuration.Timeout = 1.0;
Configuration.BaseUrl = "test url";

var custom = Configuration._New_(timeout: 2.0);
var custom = Configuration._New_(timeout: 2.0, baseUrl: "test2 url");

Assert.AreEqual(2.0, custom.Timeout);
Assert.AreEqual("test2 url", custom.BaseUrl);
}

[Test]
public void With_CustomizesSetting()
{
Configuration.Timeout= 1.0;
Configuration.Timeout = 1.0;
Configuration.BaseUrl = "test url";

var custom = Configuration._With_(timeout: 2.0);
var custom = Configuration._With_(timeout: 2.0, baseUrl: "test2 url");

Assert.AreEqual(2.0, custom.Timeout);
Assert.AreEqual("test2 url", custom.BaseUrl);
}

[Test]
Expand Down Expand Up @@ -157,28 +169,32 @@ public void WithConfig_TracksChangesOnlyInReusedSharedConfigSettings()
[Test]
public void NewConfig_StaysUnchangedOnFurtherSharedConfigUpdates()
{
var custom = Configuration._New_(timeout: 1.0);
var custom = Configuration._New_(timeout: 1.0, baseUrl: "test url");

Configuration.Timeout = 2.0;
Configuration.PollDuringWaits = 0.2;
Configuration.BaseUrl = "test2 url";

Assert.AreEqual(1.0, custom.Timeout);
Assert.AreEqual(0.1, custom.PollDuringWaits);
Assert.AreEqual("test url", custom.BaseUrl);
}

[Test]
public void Several_NewConfigs_Are_Different()
{ // TODO: consider broadening coverage
Configuration.Timeout = 0.5;
var first = Configuration._New_(timeout: 1.0);
var first = Configuration._New_(timeout: 1.0, baseUrl: "test url");

var second = Configuration._New_(timeout: 2.0);
var second = Configuration._New_(timeout: 2.0, baseUrl: "test2 url");

Assert.AreEqual(1.0, first.Timeout);
Assert.AreEqual(2.0, second.Timeout);

Assert.AreEqual("test url", first.BaseUrl);
Assert.AreEqual("test2 url", second.BaseUrl);
}

// TODO: ensure that switching Configuration.driver will work on S, etc.
}
}

}

0 comments on commit d063a03

Please sign in to comment.