Vanara/UnitTests/Windows.Shell/WallpaperTests.cs

151 lines
5.7 KiB
C#

using NUnit.Framework;
using System;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using Vanara.Extensions;
using Vanara.InteropServices;
using Vanara.PInvoke.Tests;
using static Vanara.PInvoke.Shell32;
namespace Vanara.Windows.Shell.Tests
{
[TestFixture]
public class WallpaperTests
{
[Test]
public void ReadPropTest()
{
//Assert.IsTrue(WallpaperManager.Enabled);
TestContext.WriteLine($"Enabled={WallpaperManager.Enabled}, Bkg={WallpaperManager.BackgroundColor}, Pos={WallpaperManager.WallpaperFit}");
Assert.That(WallpaperManager.Monitors.Count, Is.GreaterThanOrEqualTo(1));
TestContext.WriteLine("Monitors:\n" + string.Join("\n", WallpaperManager.Monitors));
if (!WallpaperManager.Slideshow.IsEnabled) return;
TestContext.WriteLine($"Slideshow: Interval={WallpaperManager.Slideshow.Interval}, Shuffle={WallpaperManager.Slideshow.Shuffle}");
TestContext.WriteLine(string.Join("\n", WallpaperManager.Slideshow.Images));
}
[Test]
public void BackgroundColorTest()
{
var clr = WallpaperManager.BackgroundColor;
try
{
var newClr = Color.FromArgb(unchecked((byte)~clr.R), unchecked((byte)~clr.G), unchecked((byte)~clr.B));
Assert.That(() => WallpaperManager.BackgroundColor = newClr, Throws.Nothing);
Assert.That(newClr.ToArgb(), Is.EqualTo(WallpaperManager.BackgroundColor.ToArgb()));
}
finally
{
WallpaperManager.BackgroundColor = clr;
}
}
[Test]
public void EnabledTest()
{
var enabled = WallpaperManager.Enabled;
Assert.That(() => WallpaperManager.Enabled = !enabled, Throws.Nothing);
Assert.That(() => WallpaperManager.Enabled = enabled, Throws.Nothing);
}
[Test]
public void WallpaperPositionrTest()
{
var pos = WallpaperManager.WallpaperFit;
try
{
var newPos = (++pos).IsValid() ? pos : 0;
Assert.That(() => WallpaperManager.WallpaperFit = newPos, Throws.Nothing);
Assert.That(newPos, Is.EqualTo(WallpaperManager.WallpaperFit));
}
finally
{
WallpaperManager.WallpaperFit = pos;
}
}
[Test]
public void MonitorTest()
{
Assert.That(WallpaperManager.Monitors.Count, Is.GreaterThanOrEqualTo(1));
string prev = WallpaperManager.Slideshow.IsEnabled ? string.Join(";", WallpaperManager.Slideshow.Images.Select(shi => shi.FileSystemPath)) : '@' + WallpaperManager.Monitors[0].ImagePath;
try
{
Assert.That(() => WallpaperManager.Monitors[0].ImagePath = TestCaseSources.ImageFile, Throws.Nothing);
StringAssert.AreEqualIgnoringCase(WallpaperManager.Monitors[0].ImagePath, TestCaseSources.ImageFile);
}
finally
{
var files = prev.Split(';');
if (files.Length == 1 && files[0].StartsWith("@"))
WallpaperManager.Monitors[0].ImagePath = files[0].TrimStart('@');
else
WallpaperManager.Slideshow.Images = files.Select(f => new ShellItem(f)).ToArray();
}
}
[Test]
public void SlideShowTest()
{
Assert.That(WallpaperManager.Monitors.Count, Is.GreaterThanOrEqualTo(1));
string prev = WallpaperManager.Slideshow.IsEnabled ? string.Join(";", WallpaperManager.Slideshow.Images.Select(shi => shi.FileSystemPath)) : '@' + WallpaperManager.Monitors[0].ImagePath;
try
{
Assert.That(() => WallpaperManager.Slideshow.Images = new[] { new ShellItem(TestCaseSources.TempDir) }, Throws.Nothing);
Assert.That(WallpaperManager.Slideshow.Images.Count, Is.EqualTo(1));
Assert.That(() => WallpaperManager.Slideshow.Images = new[] { new ShellItem(TestCaseSources.ImageFile), new ShellItem(TestCaseSources.Image2File) }, Throws.Nothing);
Assert.That(WallpaperManager.Slideshow.Images.Count, Is.EqualTo(2));
var shuf = WallpaperManager.Slideshow.Shuffle;
Assert.That(() => WallpaperManager.Slideshow.Shuffle = !shuf, Throws.Nothing);
Assert.That(WallpaperManager.Slideshow.Shuffle, Is.EqualTo(!shuf));
Assert.That(() => WallpaperManager.Slideshow.Shuffle = shuf, Throws.Nothing);
var dur = WallpaperManager.Slideshow.Interval;
var newDur = dur + TimeSpan.FromDays(40);
Assert.That(() => WallpaperManager.Slideshow.Interval = newDur, Throws.Nothing);
Assert.That(WallpaperManager.Slideshow.Interval, Is.EqualTo(newDur));
Assert.That(() => WallpaperManager.Slideshow.Interval = dur, Throws.Nothing);
}
finally
{
var files = prev.Split(';');
if (files.Length == 1 && files[0].StartsWith("@"))
WallpaperManager.Monitors[0].ImagePath = files[0].TrimStart('@');
else
WallpaperManager.Slideshow.Images = files.Select(f => new ShellItem(f)).ToArray();
}
}
[Test]
public void SetTest()
{
string prev = WallpaperManager.Slideshow.IsEnabled ? string.Join(";", WallpaperManager.Slideshow.Images.Select(shi => shi.FileSystemPath)) : '@' + WallpaperManager.Monitors[0].ImagePath;
var pos = WallpaperManager.WallpaperFit;
var clr = WallpaperManager.BackgroundColor;
try
{
Assert.That(() => WallpaperManager.SetSolidBackground(Color.Black), Throws.Nothing);
Assert.That(WallpaperManager.Enabled, Is.False);
Assert.That(WallpaperManager.Monitors[0].ImagePath, Is.Empty);
Assert.That(() => WallpaperManager.SetPicture(TestCaseSources.ImageFile, WallpaperFit.Center, 0), Throws.Nothing);
Assert.That(WallpaperManager.Slideshow.Images, Is.Empty);
Assert.That(() => WallpaperManager.SetSlideshow(TestCaseSources.TempDir, WallpaperFit.Span), Throws.Nothing);
Assert.That(WallpaperManager.Monitors[0].ImagePath, Is.Not.Empty);
}
finally
{
var files = prev.Split(';');
if (files.Length == 1 && files[0].StartsWith("@"))
WallpaperManager.Monitors[0].ImagePath = files[0].TrimStart('@');
else
WallpaperManager.Slideshow.Images = files.Select(f => new ShellItem(f)).ToArray();
WallpaperManager.BackgroundColor = clr;
WallpaperManager.WallpaperFit = pos;
}
}
}
}