Skip to content

Commit 44ff277

Browse files
authored
Release 1.3.0 (#7)
- Added support to generate ui object as attributes
1 parent 6d70448 commit 44ff277

File tree

10 files changed

+166
-28
lines changed

10 files changed

+166
-28
lines changed

src/Testura.Android.PageObjectCreator.Tests/Services/CodeServiceTests.cs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,23 @@ public void SetUp()
1919
_codeService = new CodeService();
2020
}
2121

22+
[Test]
23+
public void GeneratePageObject_WhenHavingUiObjectWithOneAttribueAndShouldGenerateWithAttributes_ShouldGenerateCorrectAssignStatement()
24+
{
25+
var pageObjectInfo = new UiObjectInfo
26+
{
27+
Name = "myObject",
28+
Node = new Node(new XElement("node", new XAttribute("class", "myClass")), null),
29+
FindWith = new List<AttributeTags>
30+
{
31+
AttributeTags.Class,
32+
}
33+
};
34+
35+
var code = _codeService.GeneratePageObject("test", "test", new List<UiObjectInfo> { pageObjectInfo }, true);
36+
Assert.IsTrue(code.Contains("[Create(with: AttributeTags.Class, value: \"myClass\")]"));
37+
}
38+
2239
[Test]
2340
public void GeneratePageObject_WhenHavingUiObjectWithTwoAttributes_ShouldGenerateCorrectAssignStatement()
2441
{
@@ -33,7 +50,7 @@ public void GeneratePageObject_WhenHavingUiObjectWithTwoAttributes_ShouldGenerat
3350
}
3451
};
3552

36-
var code = _codeService.GeneratePageObject("test", "test", new List<UiObjectInfo> {pageObjectInfo});
53+
var code = _codeService.GeneratePageObject("test", "test", new List<UiObjectInfo> {pageObjectInfo}, false);
3754
Assert.IsTrue(code.Contains("CreateUiObject(With.Class(\"myClass\"), With.ResourceId(\"myResourceId\"));"));
3855
}
3956

@@ -52,7 +69,7 @@ public void GeneratePageObject_WhenHavingUiObjectWithOptimalThatJustHaveAttribut
5269
}
5370
};
5471

55-
var code = _codeService.GeneratePageObject("test", "test", new List<UiObjectInfo> { pageObjectInfo });
72+
var code = _codeService.GeneratePageObject("test", "test", new List<UiObjectInfo> { pageObjectInfo }, false);
5673
Assert.IsTrue(code.Contains("CreateUiObject(With.Class(\"myClass\"), With.ResourceId(\"myResourceId\"));"));
5774
}
5875

@@ -85,7 +102,7 @@ public void GeneratePageObject_WhenHavingUiObjectWithOptimalThatHaveParent_Shoul
85102
}
86103
};
87104

88-
var code = _codeService.GeneratePageObject("test", "test", new List<UiObjectInfo> { pageObjectInfo });
105+
var code = _codeService.GeneratePageObject("test", "test", new List<UiObjectInfo> { pageObjectInfo }, false);
89106
Assert.IsTrue(code.Contains("n => n.Parent?.Package == \"package\" && n.Class == \"myClass\" && n.ResourceId == \"myResourceId\""));
90107
}
91108

@@ -128,7 +145,7 @@ public void GeneratePageObject_WhenHavingUiObjectWithOptimalThatHaveTwoParent_Sh
128145
}
129146
};
130147

131-
var code = _codeService.GeneratePageObject("test", "test", new List<UiObjectInfo> { pageObjectInfo });
148+
var code = _codeService.GeneratePageObject("test", "test", new List<UiObjectInfo> { pageObjectInfo }, false);
132149
Assert.IsTrue(code.Contains("n.Parent?.Parent?.Class == \"oldi\""));
133150
}
134151
}

src/Testura.Android.PageObjectCreator.Tests/Testura.Android.PageObjectCreator.Tests.csproj

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,21 @@
4444
<Reference Include="MedallionShell, Version=1.2.1.0, Culture=neutral, processorArchitecture=MSIL">
4545
<HintPath>..\..\packages\MedallionShell.1.2.1\lib\net45\MedallionShell.dll</HintPath>
4646
</Reference>
47+
<Reference Include="Microsoft.CodeAnalysis, Version=1.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
48+
<HintPath>..\..\packages\Microsoft.CodeAnalysis.Common.1.3.2\lib\net45\Microsoft.CodeAnalysis.dll</HintPath>
49+
</Reference>
50+
<Reference Include="Microsoft.CodeAnalysis.CSharp, Version=1.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
51+
<HintPath>..\..\packages\Microsoft.CodeAnalysis.CSharp.1.3.2\lib\net45\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
52+
</Reference>
53+
<Reference Include="Microsoft.CodeAnalysis.CSharp.Workspaces, Version=1.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
54+
<HintPath>..\..\packages\Microsoft.CodeAnalysis.CSharp.Workspaces.1.3.2\lib\net45\Microsoft.CodeAnalysis.CSharp.Workspaces.dll</HintPath>
55+
</Reference>
56+
<Reference Include="Microsoft.CodeAnalysis.Workspaces, Version=1.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
57+
<HintPath>..\..\packages\Microsoft.CodeAnalysis.Workspaces.Common.1.3.2\lib\net45\Microsoft.CodeAnalysis.Workspaces.dll</HintPath>
58+
</Reference>
59+
<Reference Include="Microsoft.CodeAnalysis.Workspaces.Desktop, Version=1.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
60+
<HintPath>..\..\packages\Microsoft.CodeAnalysis.Workspaces.Common.1.3.2\lib\net45\Microsoft.CodeAnalysis.Workspaces.Desktop.dll</HintPath>
61+
</Reference>
4762
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
4863
<HintPath>..\..\packages\MSTest.TestFramework.1.0.8-rc2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
4964
</Reference>
@@ -57,10 +72,34 @@
5772
<HintPath>..\..\packages\NUnit.3.6.1\lib\net45\nunit.framework.dll</HintPath>
5873
</Reference>
5974
<Reference Include="System" />
75+
<Reference Include="System.Collections.Immutable, Version=1.1.37.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
76+
<HintPath>..\..\packages\System.Collections.Immutable.1.1.37\lib\dotnet\System.Collections.Immutable.dll</HintPath>
77+
</Reference>
78+
<Reference Include="System.Composition.AttributedModel, Version=1.0.27.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
79+
<HintPath>..\..\packages\Microsoft.Composition.1.0.27\lib\portable-net45+win8+wp8+wpa81\System.Composition.AttributedModel.dll</HintPath>
80+
</Reference>
81+
<Reference Include="System.Composition.Convention, Version=1.0.27.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
82+
<HintPath>..\..\packages\Microsoft.Composition.1.0.27\lib\portable-net45+win8+wp8+wpa81\System.Composition.Convention.dll</HintPath>
83+
</Reference>
84+
<Reference Include="System.Composition.Hosting, Version=1.0.27.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
85+
<HintPath>..\..\packages\Microsoft.Composition.1.0.27\lib\portable-net45+win8+wp8+wpa81\System.Composition.Hosting.dll</HintPath>
86+
</Reference>
87+
<Reference Include="System.Composition.Runtime, Version=1.0.27.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
88+
<HintPath>..\..\packages\Microsoft.Composition.1.0.27\lib\portable-net45+win8+wp8+wpa81\System.Composition.Runtime.dll</HintPath>
89+
</Reference>
90+
<Reference Include="System.Composition.TypedParts, Version=1.0.27.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
91+
<HintPath>..\..\packages\Microsoft.Composition.1.0.27\lib\portable-net45+win8+wp8+wpa81\System.Composition.TypedParts.dll</HintPath>
92+
</Reference>
6093
<Reference Include="System.Core" />
94+
<Reference Include="System.Reflection.Metadata, Version=1.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
95+
<HintPath>..\..\packages\System.Reflection.Metadata.1.2.0\lib\portable-net45+win8\System.Reflection.Metadata.dll</HintPath>
96+
</Reference>
6197
<Reference Include="System.Xml.Linq" />
62-
<Reference Include="Testura.Android, Version=0.9.2.0, Culture=neutral, processorArchitecture=MSIL">
63-
<HintPath>..\..\packages\Testura.Android.0.9.2\lib\net452\Testura.Android.dll</HintPath>
98+
<Reference Include="Testura.Android, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
99+
<HintPath>..\..\packages\Testura.Android.1.0.1\lib\net452\Testura.Android.dll</HintPath>
100+
</Reference>
101+
<Reference Include="Testura.Code, Version=0.7.0.0, Culture=neutral, processorArchitecture=MSIL">
102+
<HintPath>..\..\packages\Testura.Code.0.7.0\lib\net452\Testura.Code.dll</HintPath>
64103
</Reference>
65104
</ItemGroup>
66105
<ItemGroup>
@@ -128,6 +167,10 @@
128167
<Name>Testura.Android.PageObjectCreator</Name>
129168
</ProjectReference>
130169
</ItemGroup>
170+
<ItemGroup>
171+
<Analyzer Include="..\..\packages\Microsoft.CodeAnalysis.Analyzers.1.1.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll" />
172+
<Analyzer Include="..\..\packages\Microsoft.CodeAnalysis.Analyzers.1.1.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll" />
173+
</ItemGroup>
131174
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
132175
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
133176
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
@@ -136,8 +179,8 @@
136179
</PropertyGroup>
137180
<Error Condition="!Exists('..\..\packages\MSTest.TestAdapter.1.1.8-rc2\build\net45\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\MSTest.TestAdapter.1.1.8-rc2\build\net45\MSTest.TestAdapter.props'))" />
138181
<Error Condition="!Exists('..\..\packages\MSTest.TestAdapter.1.1.8-rc2\build\net45\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\MSTest.TestAdapter.1.1.8-rc2\build\net45\MSTest.TestAdapter.targets'))" />
139-
<Error Condition="!Exists('..\..\packages\Testura.Android.0.9.2\build\testura.android.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Testura.Android.0.9.2\build\testura.android.targets'))" />
182+
<Error Condition="!Exists('..\..\packages\Testura.Android.1.0.1\build\testura.android.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Testura.Android.1.0.1\build\testura.android.targets'))" />
140183
</Target>
141184
<Import Project="..\..\packages\MSTest.TestAdapter.1.1.8-rc2\build\net45\MSTest.TestAdapter.targets" Condition="Exists('..\..\packages\MSTest.TestAdapter.1.1.8-rc2\build\net45\MSTest.TestAdapter.targets')" />
142-
<Import Project="..\..\packages\Testura.Android.0.9.2\build\testura.android.targets" Condition="Exists('..\..\packages\Testura.Android.0.9.2\build\testura.android.targets')" />
185+
<Import Project="..\..\packages\Testura.Android.1.0.1\build\testura.android.targets" Condition="Exists('..\..\packages\Testura.Android.1.0.1\build\testura.android.targets')" />
143186
</Project>

src/Testura.Android.PageObjectCreator.Tests/packages.config

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,27 @@
22
<packages>
33
<package id="Castle.Core" version="4.0.0" targetFramework="net452" />
44
<package id="MedallionShell" version="1.2.1" targetFramework="net452" />
5+
<package id="Microsoft.CodeAnalysis.Analyzers" version="1.1.0" targetFramework="net452" />
6+
<package id="Microsoft.CodeAnalysis.Common" version="1.3.2" targetFramework="net452" />
7+
<package id="Microsoft.CodeAnalysis.CSharp" version="1.3.2" targetFramework="net452" />
8+
<package id="Microsoft.CodeAnalysis.CSharp.Workspaces" version="1.3.2" targetFramework="net452" />
9+
<package id="Microsoft.CodeAnalysis.Workspaces.Common" version="1.3.2" targetFramework="net452" />
10+
<package id="Microsoft.Composition" version="1.0.27" targetFramework="net452" />
511
<package id="Moq" version="4.7.1" targetFramework="net452" />
612
<package id="MSTest.TestAdapter" version="1.1.8-rc2" targetFramework="net452" />
713
<package id="MSTest.TestFramework" version="1.0.8-rc2" targetFramework="net452" />
814
<package id="NUnit" version="3.6.1" targetFramework="net452" />
915
<package id="NUnit3TestAdapter" version="3.7.0" targetFramework="net452" />
10-
<package id="Testura.Android" version="0.9.2" targetFramework="net452" />
16+
<package id="System.Collections" version="4.0.0" targetFramework="net452" />
17+
<package id="System.Collections.Immutable" version="1.1.37" targetFramework="net452" />
18+
<package id="System.Diagnostics.Debug" version="4.0.0" targetFramework="net452" />
19+
<package id="System.Globalization" version="4.0.0" targetFramework="net452" />
20+
<package id="System.Linq" version="4.0.0" targetFramework="net452" />
21+
<package id="System.Reflection.Metadata" version="1.2.0" targetFramework="net452" />
22+
<package id="System.Resources.ResourceManager" version="4.0.0" targetFramework="net452" />
23+
<package id="System.Runtime" version="4.0.0" targetFramework="net452" />
24+
<package id="System.Runtime.Extensions" version="4.0.0" targetFramework="net452" />
25+
<package id="System.Threading" version="4.0.0" targetFramework="net452" />
26+
<package id="Testura.Android" version="1.0.1" targetFramework="net452" />
27+
<package id="Testura.Code" version="0.7.0" targetFramework="net452" />
1128
</packages>

src/Testura.Android.PageObjectCreator/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,5 @@
3939
// You can specify all the values or you can default the Build and Revision Numbers
4040
// by using the '*' as shown below:
4141
// [assembly: AssemblyVersion("1.0.*")]
42-
[assembly: AssemblyVersion("1.2.1.0")]
43-
[assembly: AssemblyFileVersion("1.2.1.0")]
42+
[assembly: AssemblyVersion("1.3.0.0")]
43+
[assembly: AssemblyFileVersion("1.3.0.0")]

src/Testura.Android.PageObjectCreator/Services/CodeService.cs

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using Testura.Code.Models.References;
1919
using Testura.Code.Saver;
2020
using Testura.Code.Statements;
21+
using Attribute = Testura.Code.Models.Attribute;
2122

2223
namespace Testura.Android.PageObjectCreator.Services
2324
{
@@ -37,8 +38,9 @@ public CodeService()
3738
/// <param name="pageObejctName">Name of the new page object</param>
3839
/// <param name="namespace">Name of the namespace to generate</param>
3940
/// <param name="uiObjects">UiObject inside the class</param>
41+
/// <param name="useAttributes">If we should generate ui objects as attributes</param>
4042
/// <returns>The generated code as a string</returns>
41-
public string GeneratePageObject(string pageObejctName, string @namespace, IEnumerable<UiObjectInfo> uiObjects)
43+
public string GeneratePageObject(string pageObejctName, string @namespace, IEnumerable<UiObjectInfo> uiObjects, bool useAttributes)
4244
{
4345
var fields = new List<Field>();
4446
var statements = new List<StatementSyntax>();
@@ -48,9 +50,12 @@ public string GeneratePageObject(string pageObejctName, string @namespace, IEnum
4850

4951
foreach (var pageObjectUiNode in uiObjects)
5052
{
51-
var generatedUiObject = GenerateUiObject(pageObjectUiNode);
53+
var generatedUiObject = GenerateUiObject(pageObjectUiNode, useAttributes);
5254
fields.Add(generatedUiObject.field);
53-
statements.Add(generatedUiObject.statement);
55+
if (generatedUiObject.statement != null)
56+
{
57+
statements.Add(generatedUiObject.statement);
58+
}
5459
}
5560

5661
var classBuilder = new ClassBuilder(pageObejctName, @namespace)
@@ -65,15 +70,40 @@ public string GeneratePageObject(string pageObejctName, string @namespace, IEnum
6570
return _codeSaver.SaveCodeAsString(classBuilder);
6671
}
6772

68-
private(Field field, StatementSyntax statement) GenerateUiObject(UiObjectInfo pageObjectUiNode)
73+
private(Field field, StatementSyntax statement) GenerateUiObject(UiObjectInfo pageObjectUiNode, bool useAttribute)
6974
{
70-
var field = new Field(pageObjectUiNode.Name, typeof(UiObject), new[] { Modifiers.Private });
71-
var statement = Statement.Declaration.Assign(
75+
var attributes = new List<Attribute>();
76+
StatementSyntax statement = null;
77+
78+
if (useAttribute &&
79+
((pageObjectUiNode.AutoSelectedWith != null && pageObjectUiNode.AutoSelectedWith.Withs.Count == 1) || pageObjectUiNode.FindWith.Count == 1))
80+
{
81+
attributes.Add(GenerateAttribute(pageObjectUiNode));
82+
}
83+
else
84+
{
85+
statement = Statement.Declaration.Assign(
7286
pageObjectUiNode.Name,
7387
new VariableReference(DeviceName, new MemberReference("Ui", new MethodReference("CreateUiObject", GenerateWithArgument(pageObjectUiNode)))));
88+
}
89+
90+
var field = new Field(pageObjectUiNode.Name, typeof(UiObject), new[] { Modifiers.Private }, attributes);
7491
return (field, statement);
7592
}
7693

94+
private Attribute GenerateAttribute(UiObjectInfo pageObjectUiNode)
95+
{
96+
var with = pageObjectUiNode.AutoSelectedWith?.Withs[0] ?? pageObjectUiNode.FindWith[0];
97+
var name = Enum.GetName(typeof(AttributeTags), with);
98+
var arguments = new List<IArgument>
99+
{
100+
new VariableArgument($"AttributeTags.{name}", "with"),
101+
new ValueArgument(GetNodeValue(pageObjectUiNode.Node, with), StringType.Normal, "value")
102+
};
103+
104+
return new Attribute("Create", arguments);
105+
}
106+
77107
private IEnumerable<IArgument> GenerateWithArgument(UiObjectInfo uiObjectInfo)
78108
{
79109
var arguments = new List<IArgument>();

src/Testura.Android.PageObjectCreator/Services/ICodeService.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ public interface ICodeService
1111
/// <param name="pageObejctName">Name of the new page object</param>
1212
/// <param name="namespace">Name of the namespace to generate</param>
1313
/// <param name="uiObjects">UiObject inside the class</param>
14+
/// <param name="useAttributes">If we should generate ui objects as attributes</param>
1415
/// <returns>The generated code as a string</returns>
15-
string GeneratePageObject(string pageObejctName, string @namespace, IEnumerable<UiObjectInfo> uiObjects);
16+
string GeneratePageObject(string pageObejctName, string @namespace, IEnumerable<UiObjectInfo> uiObjects, bool useAttributes);
1617
}
1718
}

src/Testura.Android.PageObjectCreator/Testura.Android.PageObjectCreator.csproj

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -120,11 +120,11 @@
120120
<Reference Include="System.Xaml">
121121
<RequiredTargetFramework>4.0</RequiredTargetFramework>
122122
</Reference>
123-
<Reference Include="Testura.Android, Version=0.9.2.0, Culture=neutral, processorArchitecture=MSIL">
124-
<HintPath>..\..\packages\Testura.Android.0.9.2\lib\net452\Testura.Android.dll</HintPath>
123+
<Reference Include="Testura.Android, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
124+
<HintPath>..\..\packages\Testura.Android.1.0.1\lib\net452\Testura.Android.dll</HintPath>
125125
</Reference>
126-
<Reference Include="Testura.Code, Version=0.5.2.0, Culture=neutral, processorArchitecture=MSIL">
127-
<HintPath>..\..\packages\Testura.Code.0.5.2\lib\net452\Testura.Code.dll</HintPath>
126+
<Reference Include="Testura.Code, Version=0.7.0.0, Culture=neutral, processorArchitecture=MSIL">
127+
<HintPath>..\..\packages\Testura.Code.0.7.0\lib\net452\Testura.Code.dll</HintPath>
128128
</Reference>
129129
<Reference Include="WindowsBase" />
130130
<Reference Include="PresentationCore" />
@@ -406,8 +406,8 @@
406406
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
407407
</PropertyGroup>
408408
<Error Condition="!Exists('..\..\packages\Fody.1.29.2\build\dotnet\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Fody.1.29.2\build\dotnet\Fody.targets'))" />
409-
<Error Condition="!Exists('..\..\packages\Testura.Android.0.9.2\build\testura.android.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Testura.Android.0.9.2\build\testura.android.targets'))" />
409+
<Error Condition="!Exists('..\..\packages\Testura.Android.1.0.1\build\testura.android.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Testura.Android.1.0.1\build\testura.android.targets'))" />
410410
</Target>
411411
<Import Project="..\..\packages\Fody.1.29.2\build\dotnet\Fody.targets" Condition="Exists('..\..\packages\Fody.1.29.2\build\dotnet\Fody.targets')" />
412-
<Import Project="..\..\packages\Testura.Android.0.9.2\build\testura.android.targets" Condition="Exists('..\..\packages\Testura.Android.0.9.2\build\testura.android.targets')" />
412+
<Import Project="..\..\packages\Testura.Android.1.0.1\build\testura.android.targets" Condition="Exists('..\..\packages\Testura.Android.1.0.1\build\testura.android.targets')" />
413413
</Project>

0 commit comments

Comments
 (0)