diff --git a/Octokit.Tests.Conventions/Exception/MissingPublicParameterlessCtorException.cs b/Octokit.Tests.Conventions/Exception/MissingPublicParameterlessCtorException.cs new file mode 100644 index 00000000..806c70d0 --- /dev/null +++ b/Octokit.Tests.Conventions/Exception/MissingPublicParameterlessCtorException.cs @@ -0,0 +1,11 @@ +using System; + +namespace Octokit.Tests.Conventions +{ + public class MissingPublicParameterlessCtorException : Exception + { + public MissingPublicParameterlessCtorException(Type modelType) + : base(string.Format("Model type '{0}' is missing a Public Parameterless Constructor required by SimpleJson Deserializer.", modelType.FullName)) + { } + } +} \ No newline at end of file diff --git a/Octokit.Tests.Conventions/ModelTests.cs b/Octokit.Tests.Conventions/ModelTests.cs index 1d3f5e16..7da1fcec 100644 --- a/Octokit.Tests.Conventions/ModelTests.cs +++ b/Octokit.Tests.Conventions/ModelTests.cs @@ -37,6 +37,18 @@ namespace Octokit.Tests.Conventions } } + [Theory] + [MemberData("ResponseModelTypes")] + public void AllResponseModelsHavePublicParameterlessCtors(Type modelType) + { + var ctor = modelType.GetConstructor(Type.EmptyTypes); + + if (ctor == null || !ctor.IsPublic) + { + throw new MissingPublicParameterlessCtorException(modelType); + } + } + [Theory] [MemberData("ResponseModelTypes")] public void ResponseModelsHaveGetterOnlyProperties(Type modelType) diff --git a/Octokit.Tests.Conventions/Octokit.Tests.Conventions.csproj b/Octokit.Tests.Conventions/Octokit.Tests.Conventions.csproj index e06a67b8..412724b7 100644 --- a/Octokit.Tests.Conventions/Octokit.Tests.Conventions.csproj +++ b/Octokit.Tests.Conventions/Octokit.Tests.Conventions.csproj @@ -67,6 +67,7 @@ + diff --git a/Octokit/Models/Response/PunchCard.cs b/Octokit/Models/Response/PunchCard.cs index 4fdb5d79..02c0bdec 100644 --- a/Octokit/Models/Response/PunchCard.cs +++ b/Octokit/Models/Response/PunchCard.cs @@ -10,6 +10,9 @@ namespace Octokit [DebuggerDisplay("{DebuggerDisplay,nq}")] public class PunchCard { + public PunchCard() + { } + public PunchCard(IEnumerable> punchCardData) { Ensure.ArgumentNotNull(punchCardData, "punchCardData"); diff --git a/Octokit/Models/Response/RepositoryLanguage.cs b/Octokit/Models/Response/RepositoryLanguage.cs index 44fd9c7a..c1d762eb 100644 --- a/Octokit/Models/Response/RepositoryLanguage.cs +++ b/Octokit/Models/Response/RepositoryLanguage.cs @@ -7,6 +7,9 @@ namespace Octokit [DebuggerDisplay("{DebuggerDisplay,nq}")] public class RepositoryLanguage { + public RepositoryLanguage() + { } + public RepositoryLanguage(string name, long numberOfBytes) { Name = name;