Skip to content

Commit

Permalink
test: Package - Add unit test project
Browse files Browse the repository at this point in the history
  • Loading branch information
sGeeK44 committed May 17, 2024
1 parent 02fbab7 commit d1477af
Show file tree
Hide file tree
Showing 30 changed files with 288 additions and 0 deletions.
6 changes: 6 additions & 0 deletions AndroidX.Work.Testing.UnitTest/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application android:allowBackup="true" android:icon="@mipmap/appicon" android:label="@string/app_name" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true">
</application>
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-android</TargetFramework>
<SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
<OutputType>Exe</OutputType>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<ApplicationId>ai.smartway.androidx.work.testing.unittests</ApplicationId>
<ApplicationVersion>1</ApplicationVersion>
<ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NFluent" Version="3.0.4" />
<PackageReference Include="Xamarin.AndroidX.AppCompat" Version="1.6.1.8" />
<PackageReference Include="Xamarin.AndroidX.Work.Runtime" Version="2.9.0.2" />
<PackageReference Include="Xamarin.Legacy.NUnitLite" Version="0.0.1-alpha" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AndroidX.Work.Testing\AndroidX.Work.Testing.csproj" />
</ItemGroup>
</Project>
20 changes: 20 additions & 0 deletions AndroidX.Work.Testing.UnitTest/MainActivity.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System.Reflection;
using Xamarin.Android.NUnitLite;

namespace AndroidApp1
{
[Activity(Label = "@string/app_name", MainLauncher = true)]
public class MainActivity : TestSuiteActivity
{
protected override void OnCreate(Bundle bundle)
{
// tests can be inside the main assembly
AddTest(Assembly.GetExecutingAssembly());
// or in any reference assemblies
// AddTest(typeof(Your.Library.TestClass).Assembly);

// Once you called base.OnCreate(), you cannot add more assemblies.
base.OnCreate(bundle);
}
}
}
44 changes: 44 additions & 0 deletions AndroidX.Work.Testing.UnitTest/Resources/AboutResources.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
Images, layout descriptions, binary blobs and string dictionaries can be included
in your application as resource files. Various Android APIs are designed to
operate on the resource IDs instead of dealing with images, strings or binary blobs
directly.

For example, a sample Android app that contains a user interface layout (main.xml),
an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png)
would keep its resources in the "Resources" directory of the application:

Resources/
drawable/
icon.png

layout/
main.xml

values/
strings.xml

In order to get the build system to recognize Android resources, set the build action to
"AndroidResource". The native Android APIs do not operate directly with filenames, but
instead operate on resource IDs. When you compile an Android application that uses resources,
the build system will package the resources for distribution and generate a class called "Resource"
(this is an Android convention) that contains the tokens for each one of the resources
included. For example, for the above Resources layout, this is what the Resource class would expose:

public class Resource {
public class Drawable {
public const int icon = 0x123;
}

public class Layout {
public const int main = 0x456;
}

public class Strings {
public const int first_string = 0xabc;
public const int second_string = 0xbcd;
}
}

You would then use Resource.Drawable.icon to reference the drawable/icon.png file, or
Resource.Layout.main to reference the layout/main.xml file, or Resource.Strings.first_string
to reference the first string in the dictionary file values/strings.xml.
13 changes: 13 additions & 0 deletions AndroidX.Work.Testing.UnitTest/Resources/layout/activity_main.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/app_text"
/>
</RelativeLayout>
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/appicon_background" />
<foreground android:drawable="@mipmap/appicon_foreground" />
</adaptive-icon>
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/appicon_background" />
<foreground android:drawable="@mipmap/appicon_foreground" />
</adaptive-icon>
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#2C3E50</color>
</resources>
4 changes: 4 additions & 0 deletions AndroidX.Work.Testing.UnitTest/Resources/values/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<resources>
<string name="app_name">AndroidApp1</string>
<string name="app_text">Hello, Android!</string>
</resources>
30 changes: 30 additions & 0 deletions AndroidX.Work.Testing.UnitTest/RetryWorker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using Android.Content;

namespace AndroidX.Work.Testing.UnitTests
{
public class RetryWorker : Worker
{
public RetryWorker(Context context, WorkerParameters workerParams)
: base(context, workerParams) { }

public static PeriodicWorkRequest Build()
{
Constraints constraints = new Constraints.Builder()
.SetRequiresCharging(true)
.Build();

var syncWorkRequest = PeriodicWorkRequest
.Builder
.From<RetryWorker>(TimeSpan.FromMinutes(15))
.SetConstraints(constraints)
.Build();

return syncWorkRequest;
}

public override Result DoWork()
{
return Result.InvokeRetry();
}
}
}
31 changes: 31 additions & 0 deletions AndroidX.Work.Testing.UnitTest/SuccessWorker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using Android.Content;
using System;

namespace AndroidX.Work.Testing.UnitTests
{
public class SuccessWorker : Worker
{
public SuccessWorker(Context context, WorkerParameters workerParams)
: base(context, workerParams) { }

public static PeriodicWorkRequest Build()
{
Constraints constraints = new Constraints.Builder()
.SetRequiresCharging(true)
.Build();

var syncWorkRequest = PeriodicWorkRequest
.Builder
.From<SuccessWorker>(TimeSpan.FromMinutes(15))
.SetConstraints(constraints)
.Build();

return syncWorkRequest;
}

public override Result DoWork()
{
return Result.InvokeSuccess();
}
}
}
39 changes: 39 additions & 0 deletions AndroidX.Work.Testing.UnitTest/TestRetryWorker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using Android.Content;
using Androidx.Work.Testing;
using NFluent;
using NUnit.Framework;

namespace AndroidX.Work.Testing.UnitTests
{
[TestFixture]
public class TestRetryWorker : TestWorker
{
public PeriodicWorkRequest Worker { get; private set; }

public IOperation Operation { get; private set; }

[SetUp]
public void Setup()
{
Worker = RetryWorker.Build();
Operation = WorkManager.EnqueueUniquePeriodicWork("Work", ExistingPeriodicWorkPolicy.Update, Worker);
}

[TearDown]
public void TearDown()
{
WorkManager.CancelUniqueWork("Work");
}

[Test]
public void Retry()
{
var driver = WorkManagerTestInitHelper.GetTestDriver(Context);

driver.SetAllConstraintsMet(Worker.Id);

var workInfo = (WorkInfo)WorkManager.GetWorkInfoById(Worker.Id).Get();
Check.That(workInfo.RunAttemptCount).IsEqualTo(1);
}
}
}
40 changes: 40 additions & 0 deletions AndroidX.Work.Testing.UnitTest/TestSuccessWorker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using Androidx.Work.Testing;
using NFluent;
using NUnit.Framework;

namespace AndroidX.Work.Testing.UnitTests
{

[TestFixture]
public class TestSuccessWorker : TestWorker
{
public PeriodicWorkRequest Worker { get; private set; }

public IOperation Operation { get; private set; }

[SetUp]
public void Setup()
{
Worker = SuccessWorker.Build();
Operation = WorkManager.EnqueueUniquePeriodicWork("Work", ExistingPeriodicWorkPolicy.Update, Worker);
}

[TearDown]
public void TearDown()
{
WorkManager.CancelUniqueWork("Work");
}

[Test]
public void Success()
{
var driver = WorkManagerTestInitHelper.GetTestDriver(Context);

driver.SetAllConstraintsMet(Worker.Id);

var workInfo = (WorkInfo)WorkManager.GetWorkInfoById(Worker.Id).Get();
Check.That(workInfo.RunAttemptCount).IsEqualTo(0);

}
}
}
20 changes: 20 additions & 0 deletions AndroidX.Work.Testing.UnitTest/TestWorker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using Android.Content;
using Androidx.Work.Testing;
using NUnit.Framework;

namespace AndroidX.Work.Testing.UnitTests
{
public class TestWorker
{
public Context Context { get; private set; }
public WorkManager WorkManager { get; private set; }

[TestFixtureSetUp]
public void OneTimeSetup()
{
Context = Application.Context;
WorkManagerTestInitHelper.InitializeTestWorkManager(Context);
WorkManager = WorkManager.GetInstance(Context);
}
}
}
8 changes: 8 additions & 0 deletions AndroidX.Work.Testing.sln
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ VisualStudioVersion = 17.9.34728.123
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AndroidX.Work.Testing", "AndroidX.Work.Testing\AndroidX.Work.Testing.csproj", "{900872E6-329C-4FAF-A35C-B11F452051E1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AndroidX.Work.Testing.UnitTests", "AndroidX.Work.Testing.UnitTest\AndroidX.Work.Testing.UnitTests.csproj", "{45B8E4B7-4B6A-4EAC-B921-068BE2204F41}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -15,6 +17,12 @@ Global
{900872E6-329C-4FAF-A35C-B11F452051E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{900872E6-329C-4FAF-A35C-B11F452051E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{900872E6-329C-4FAF-A35C-B11F452051E1}.Release|Any CPU.Build.0 = Release|Any CPU
{45B8E4B7-4B6A-4EAC-B921-068BE2204F41}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{45B8E4B7-4B6A-4EAC-B921-068BE2204F41}.Debug|Any CPU.Build.0 = Debug|Any CPU
{45B8E4B7-4B6A-4EAC-B921-068BE2204F41}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{45B8E4B7-4B6A-4EAC-B921-068BE2204F41}.Release|Any CPU.ActiveCfg = Release|Any CPU
{45B8E4B7-4B6A-4EAC-B921-068BE2204F41}.Release|Any CPU.Build.0 = Release|Any CPU
{45B8E4B7-4B6A-4EAC-B921-068BE2204F41}.Release|Any CPU.Deploy.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down

0 comments on commit d1477af

Please sign in to comment.