Skip to content

Commit 0276d9a

Browse files
committed
Merge pull request #40 from jonpryor/jonp-jcw-tests
[Java.Interop.Tools.JavaCallableWrappers-Tests] Add unit tests.
2 parents dd1d972 + ae9c356 commit 0276d9a

File tree

8 files changed

+861
-40
lines changed

8 files changed

+861
-40
lines changed

Java.Interop.sln

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Java.Interop.Tools.TypeName
9191
EndProject
9292
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "jcw-gen", "tools\jcw-gen\jcw-gen.csproj", "{52C7D9B6-E8C8-47D0-9471-652D278D7D77}"
9393
EndProject
94+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Java.Interop.Tools.JavaCallableWrappers-Tests.csproj", "src\Java.Interop.Tools.JavaCallableWrappers\Test\Java.Interop.Tools.JavaCallableWrappers-Tests.csproj", "{58B564A1-570D-4DA2-B02D-25BDDB1A9F4F}"
95+
EndProject
9496
Global
9597
GlobalSection(SolutionConfigurationPlatforms) = preSolution
9698
Debug|Any CPU = Debug|Any CPU
@@ -303,6 +305,14 @@ Global
303305
{D14A1B5C-2060-4930-92BE-F7190256C735}.XAIntegrationDebug|Any CPU.Build.0 = Debug|Any CPU
304306
{D14A1B5C-2060-4930-92BE-F7190256C735}.XAIntegrationRelease|Any CPU.ActiveCfg = Release|Any CPU
305307
{D14A1B5C-2060-4930-92BE-F7190256C735}.XAIntegrationRelease|Any CPU.Build.0 = Release|Any CPU
308+
{58B564A1-570D-4DA2-B02D-25BDDB1A9F4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
309+
{58B564A1-570D-4DA2-B02D-25BDDB1A9F4F}.Debug|Any CPU.Build.0 = Debug|Any CPU
310+
{58B564A1-570D-4DA2-B02D-25BDDB1A9F4F}.Release|Any CPU.ActiveCfg = Release|Any CPU
311+
{58B564A1-570D-4DA2-B02D-25BDDB1A9F4F}.Release|Any CPU.Build.0 = Release|Any CPU
312+
{58B564A1-570D-4DA2-B02D-25BDDB1A9F4F}.XAIntegrationDebug|Any CPU.ActiveCfg = Debug|Any CPU
313+
{58B564A1-570D-4DA2-B02D-25BDDB1A9F4F}.XAIntegrationDebug|Any CPU.Build.0 = Debug|Any CPU
314+
{58B564A1-570D-4DA2-B02D-25BDDB1A9F4F}.XAIntegrationRelease|Any CPU.ActiveCfg = Release|Any CPU
315+
{58B564A1-570D-4DA2-B02D-25BDDB1A9F4F}.XAIntegrationRelease|Any CPU.Build.0 = Release|Any CPU
306316
EndGlobalSection
307317
GlobalSection(NestedProjects) = preSolution
308318
{0C001D50-4176-45AE-BDC8-BA626508B0CC} = {C8F58966-94BF-407F-914A-8654F8B8AE3B}
@@ -342,5 +352,6 @@ Global
342352
{64CC4E44-CE3A-4319-BF3F-6CF8BD513870} = {0998E45F-8BCE-4791-A944-962CD54E2D80}
343353
{E706B6F2-5562-4765-8F07-8CF84A797B30} = {0998E45F-8BCE-4791-A944-962CD54E2D80}
344354
{52C7D9B6-E8C8-47D0-9471-652D278D7D77} = {C8F58966-94BF-407F-914A-8654F8B8AE3B}
355+
{58B564A1-570D-4DA2-B02D-25BDDB1A9F4F} = {271C9F30-F679-4793-942B-0D9527CB3E2F}
345356
EndGlobalSection
346357
EndGlobal

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ TESTS = \
2929
bin/Test$(CONFIGURATION)/Java.Interop-Tests.dll \
3030
bin/Test$(CONFIGURATION)/Java.Interop.Dynamic-Tests.dll \
3131
bin/Test$(CONFIGURATION)/Java.Interop.Export-Tests.dll \
32+
bin/Test$(CONFIGURATION)/Java.Interop.Tools.JavaCallableWrappers-Tests.dll \
3233
bin/Test$(CONFIGURATION)/LogcatParse-Tests.dll \
3334
bin/Test$(CONFIGURATION)/generator-Tests.dll \
3435
bin/Test$(CONFIGURATION)/Xamarin.Android.Tools.ApiXmlAdjuster-Tests.dll \

src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers/JavaCallableWrapperGenerator.cs

Lines changed: 45 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ void AddNestedTypes (TypeDefinition type)
9494
this.type = type;
9595
this.log = log;
9696

97-
if (!type.IsClass)
97+
if (type.IsEnum || type.IsInterface || type.IsValueType)
9898
Diagnostic.Error (4200, LookupSource (type), "Can only generate Java wrappers for 'class' types, not type '{0}'.", type.FullName);
9999

100100
string jniName = JniType.ToJniName (type);
@@ -431,42 +431,47 @@ static string GetJniSignature (MethodDefinition ctor)
431431
// private native void n_onCreate (android.os.Bundle bundle);
432432
// }
433433

434-
public void Generate (string outputPath)
434+
public void Generate (TextWriter writer)
435435
{
436-
using (StreamWriter sw = OpenStream (outputPath)) {
437-
if (!string.IsNullOrEmpty (package)) {
438-
sw.WriteLine ("package " + package + ";");
439-
sw.WriteLine ();
440-
}
436+
if (!string.IsNullOrEmpty (package)) {
437+
writer.WriteLine ("package " + package + ";");
438+
writer.WriteLine ();
439+
}
441440

442-
GenerateHeader (sw);
441+
GenerateHeader (writer);
443442

444-
sw.WriteLine ("/** @hide */");
445-
sw.WriteLine ("\tpublic static final String __md_methods;");
446-
if (children != null) {
447-
foreach (var i in Enumerable.Range(1, children.Count))
448-
sw.WriteLine ("\tstatic final String __md_{0}_methods;", i);
449-
}
450-
sw.WriteLine ("\tstatic {");
451-
GenerateRegisterType (sw, this, "__md_methods");
452-
if (children != null) {
453-
for (int i = 0; i < children.Count; ++i) {
454-
string methods = string.Format ("__md_{0}_methods", i+1);
455-
GenerateRegisterType (sw, children [i], methods);
456-
}
443+
writer.WriteLine ("/** @hide */");
444+
writer.WriteLine ("\tpublic static final String __md_methods;");
445+
if (children != null) {
446+
foreach (var i in Enumerable.Range (1, children.Count))
447+
writer.WriteLine ("\tstatic final String __md_{0}_methods;", i);
448+
}
449+
writer.WriteLine ("\tstatic {");
450+
GenerateRegisterType (writer, this, "__md_methods");
451+
if (children != null) {
452+
for (int i = 0; i < children.Count; ++i) {
453+
string methods = string.Format ("__md_{0}_methods", i + 1);
454+
GenerateRegisterType (writer, children [i], methods);
457455
}
458-
sw.WriteLine ("\t}");
456+
}
457+
writer.WriteLine ("\t}");
459458

460-
GenerateBody (sw);
459+
GenerateBody (writer);
461460

462-
if (children != null)
463-
foreach (JavaCallableWrapperGenerator child in children) {
464-
child.GenerateHeader (sw);
465-
child.GenerateBody (sw);
466-
child.GenerateFooter (sw);
467-
}
461+
if (children != null)
462+
foreach (JavaCallableWrapperGenerator child in children) {
463+
child.GenerateHeader (writer);
464+
child.GenerateBody (writer);
465+
child.GenerateFooter (writer);
466+
}
467+
468+
GenerateFooter (writer);
469+
}
468470

469-
GenerateFooter (sw);
471+
public void Generate (string outputPath)
472+
{
473+
using (StreamWriter sw = OpenStream (outputPath)) {
474+
Generate (sw);
470475
}
471476
}
472477

@@ -515,7 +520,7 @@ static string ManagedValueToJavaSource (object value)
515520
return value.ToString ();
516521
}
517522

518-
void GenerateHeader (StreamWriter sw)
523+
void GenerateHeader (TextWriter sw)
519524
{
520525
sw.WriteLine ();
521526

@@ -541,7 +546,7 @@ void GenerateHeader (StreamWriter sw)
541546
sw.WriteLine ("{");
542547
}
543548

544-
void GenerateBody (StreamWriter sw)
549+
void GenerateBody (TextWriter sw)
545550
{
546551
foreach (Signature ctor in ctors) {
547552
if (string.IsNullOrEmpty (ctor.Params) && JniType.IsApplication (type))
@@ -584,7 +589,7 @@ void GenerateBody (StreamWriter sw)
584589
sw.WriteLine ("\t}");
585590
}
586591

587-
static void GenerateRegisterType (StreamWriter sw, JavaCallableWrapperGenerator self, string field)
592+
static void GenerateRegisterType (TextWriter sw, JavaCallableWrapperGenerator self, string field)
588593
{
589594
sw.WriteLine ("\t\t{0} = ", field);
590595
foreach (Signature method in self.methods)
@@ -595,7 +600,7 @@ static void GenerateRegisterType (StreamWriter sw, JavaCallableWrapperGenerator
595600
self.type.GetAssemblyQualifiedName (), self.name, field);
596601
}
597602

598-
void GenerateFooter (StreamWriter sw)
603+
void GenerateFooter (TextWriter sw)
599604
{
600605
sw.WriteLine ("}");
601606
}
@@ -738,7 +743,7 @@ public string Retval {
738743
public readonly string Annotations;
739744
}
740745

741-
void GenerateConstructor (Signature ctor, StreamWriter sw)
746+
void GenerateConstructor (Signature ctor, TextWriter sw)
742747
{
743748
// TODO: we only generate constructors so that Android types w/ no
744749
// default constructor can be subclasses by our generated code.
@@ -760,7 +765,7 @@ void GenerateConstructor (Signature ctor, StreamWriter sw)
760765
sw.WriteLine ("\t}");
761766
}
762767

763-
void GenerateApplicationConstructor (StreamWriter sw)
768+
void GenerateApplicationConstructor (TextWriter sw)
764769
{
765770
if (!JniType.IsApplication (type)) {
766771
return;
@@ -773,15 +778,15 @@ void GenerateApplicationConstructor (StreamWriter sw)
773778
sw.WriteLine ("\t}");
774779
}
775780

776-
void GenerateExportedField (JavaFieldInfo field, StreamWriter sw)
781+
void GenerateExportedField (JavaFieldInfo field, TextWriter sw)
777782
{
778783
sw.WriteLine ();
779784
if (field.Annotations != null)
780785
sw.WriteLine (field.Annotations);
781786
sw.WriteLine ("\t{0} {1}{2} {3} = {4} ();", field.GetJavaAccess (), field.IsStatic ? "static " : null, field.TypeName, field.FieldName, field.InitializerName);
782787
}
783788

784-
void GenerateMethod (Signature method, StreamWriter sw)
789+
void GenerateMethod (Signature method, TextWriter sw)
785790
{
786791
sw.WriteLine ();
787792
if (method.Annotations != null)
@@ -798,7 +803,7 @@ void GenerateMethod (Signature method, StreamWriter sw)
798803
sw.WriteLine ("\tprivate {0}native {1} n_{2} ({3});", method.IsStatic ? "static " : null, method.Retval, method.Name, method.Params);
799804
}
800805

801-
void WriteApplicationOnCreate (StreamWriter sw, Action<StreamWriter> extra)
806+
void WriteApplicationOnCreate (TextWriter sw, Action<TextWriter> extra)
802807
{
803808
sw.WriteLine ();
804809
sw.WriteLine ("\tpublic void onCreate ()");
@@ -807,7 +812,7 @@ void WriteApplicationOnCreate (StreamWriter sw, Action<StreamWriter> extra)
807812
sw.WriteLine ("\t}");
808813
}
809814

810-
void WriteInstrumentationOnCreate (StreamWriter sw, Action<StreamWriter> extra)
815+
void WriteInstrumentationOnCreate (TextWriter sw, Action<TextWriter> extra)
811816
{
812817
sw.WriteLine ();
813818
sw.WriteLine ("\tpublic void onCreate (android.os.Bundle arguments)");
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup>
4+
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
5+
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
6+
<ProductVersion>8.0.30703</ProductVersion>
7+
<SchemaVersion>2.0</SchemaVersion>
8+
<ProjectGuid>{58B564A1-570D-4DA2-B02D-25BDDB1A9F4F}</ProjectGuid>
9+
<OutputType>Library</OutputType>
10+
<RootNamespace>Java.Interop.Tools.JavaCallableWrappersTests</RootNamespace>
11+
<AssemblyName>Java.Interop.Tools.JavaCallableWrappers-Tests</AssemblyName>
12+
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
13+
</PropertyGroup>
14+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
15+
<DebugSymbols>true</DebugSymbols>
16+
<DebugType>full</DebugType>
17+
<Optimize>false</Optimize>
18+
<OutputPath>..\..\..\bin\TestDebug</OutputPath>
19+
<DefineConstants>DEBUG;JCW_ONLY_TYPE_NAMES</DefineConstants>
20+
<ErrorReport>prompt</ErrorReport>
21+
<WarningLevel>4</WarningLevel>
22+
<ConsolePause>false</ConsolePause>
23+
</PropertyGroup>
24+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
25+
<Optimize>true</Optimize>
26+
<OutputPath>..\..\..\bin\TestRelease</OutputPath>
27+
<DefineConstants>JCW_ONLY_TYPE_NAMES</DefineConstants>
28+
<ErrorReport>prompt</ErrorReport>
29+
<WarningLevel>4</WarningLevel>
30+
<ConsolePause>false</ConsolePause>
31+
</PropertyGroup>
32+
<ItemGroup>
33+
<Reference Include="System" />
34+
<Reference Include="nunit.framework">
35+
<HintPath>..\..\..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
36+
</Reference>
37+
<Reference Include="Mono.Cecil">
38+
<HintPath>..\..\..\packages\Mono.Cecil.0.9.6.1\lib\net45\Mono.Cecil.dll</HintPath>
39+
</Reference>
40+
<Reference Include="Mono.Cecil.Mdb">
41+
<HintPath>..\..\..\packages\Mono.Cecil.0.9.6.1\lib\net45\Mono.Cecil.Mdb.dll</HintPath>
42+
</Reference>
43+
<Reference Include="Mono.Cecil.Pdb">
44+
<HintPath>..\..\..\packages\Mono.Cecil.0.9.6.1\lib\net45\Mono.Cecil.Pdb.dll</HintPath>
45+
</Reference>
46+
<Reference Include="Mono.Cecil.Rocks">
47+
<HintPath>..\..\..\packages\Mono.Cecil.0.9.6.1\lib\net45\Mono.Cecil.Rocks.dll</HintPath>
48+
</Reference>
49+
</ItemGroup>
50+
<ItemGroup>
51+
<Compile Include="Java.Interop.Tools.JavaCallableWrappers\JavaCallableWrapperGeneratorTests.cs" />
52+
<Compile Include="Java.Interop.Tools.JavaCallableWrappers\TypeNameMapGeneratorTests.cs" />
53+
<Compile Include="Java.Interop.Tools.JavaCallableWrappers\SupportDeclarations.cs" />
54+
</ItemGroup>
55+
<ItemGroup>
56+
<None Include="packages.config" />
57+
</ItemGroup>
58+
<ItemGroup>
59+
<ProjectReference Include="..\jcw-gen.csproj">
60+
<Project>{52C7D9B6-E8C8-47D0-9471-652D278D7D77}</Project>
61+
<Name>jcw-gen</Name>
62+
</ProjectReference>
63+
<ProjectReference Include="..\Java.Interop.Tools.JavaCallableWrappers.csproj">
64+
<Project>{D18FCF91-8876-48A0-A693-2DC1E7D3D80A}</Project>
65+
<Name>Java.Interop.Tools.JavaCallableWrappers</Name>
66+
</ProjectReference>
67+
<ProjectReference Include="..\..\Java.Interop.Tools.Cecil\Java.Interop.Tools.Cecil.csproj">
68+
<Project>{D48EE8D0-0A0A-4493-AEF5-DAF5F8CF86AD}</Project>
69+
<Name>Java.Interop.Tools.Cecil</Name>
70+
</ProjectReference>
71+
<ProjectReference Include="..\..\Java.Interop.Tools.Diagnostics\Java.Interop.Tools.Diagnostics.csproj">
72+
<Project>{64CC4E44-CE3A-4319-BF3F-6CF8BD513870}</Project>
73+
<Name>Java.Interop.Tools.Diagnostics</Name>
74+
</ProjectReference>
75+
</ItemGroup>
76+
<ItemGroup>
77+
<Folder Include="Java.Interop.Tools.JavaCallableWrappers\" />
78+
</ItemGroup>
79+
<Import Project="..\..\Xamarin.Android.NamingCustomAttributes\Xamarin.Android.NamingCustomAttributes.projitems" Label="Shared" Condition="Exists('..\..\Xamarin.Android.NamingCustomAttributes\Xamarin.Android.NamingCustomAttributes.projitems')" />
80+
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
81+
</Project>

0 commit comments

Comments
 (0)