diff --git a/.gitignore b/.gitignore index 27dd5ac9b8..0c85dce8cc 100644 --- a/.gitignore +++ b/.gitignore @@ -106,6 +106,7 @@ csharp/sbe-generated/baseline csharp/sbe-generated/baseline-bigendian csharp/sbe-generated/extension csharp/sbe-generated/issue435 +csharp/sbe-generated/issue483 csharp/sbe-generated/since-deprecated csharp/sbe-generated/mktdata/*.cs csharp/sbe-generated/uk_co_real_logic_sbe_benchmarks_fix diff --git a/build.gradle b/build.gradle index 55f6fe6c53..be6dd79325 100644 --- a/build.gradle +++ b/build.gradle @@ -551,6 +551,7 @@ task(generateCSharpCodecs, type: JavaExec) { 'sbe.validation.xsd': validationXsdPath) args = ['sbe-tool/src/test/resources/FixBinary.xml', 'sbe-tool/src/test/resources/issue435.xml', + 'sbe-tool/src/test/resources/issue483.xml', 'sbe-tool/src/test/resources/since-deprecated-test-schema.xml', 'sbe-tool/src/test/resources/example-bigendian-test-schema.xml', 'sbe-samples/src/main/resources/example-schema.xml', diff --git a/csharp/runtests.sh b/csharp/runtests.sh index 29f310cdad..4fb5797c82 100755 --- a/csharp/runtests.sh +++ b/csharp/runtests.sh @@ -1,3 +1,3 @@ MSTEST='/c/Program Files (x86)/Microsoft Visual Studio 14.0/Common7/IDE/MSTest.exe' -"$MSTEST" /testcontainer:sbe-tests/bin/Debug/Org.SbeTool.Sbe.UnitTests.dll +"$MSTEST" /testcontainer:sbe-tests/bin/Debug/net45/Org.SbeTool.Sbe.UnitTests.dll diff --git a/csharp/sbe-generated/sbe-generated.csproj b/csharp/sbe-generated/sbe-generated.csproj index 6dc8e9cc09..1c48f28476 100644 --- a/csharp/sbe-generated/sbe-generated.csproj +++ b/csharp/sbe-generated/sbe-generated.csproj @@ -8,6 +8,11 @@ + + + + + diff --git a/csharp/sbe-tests/Issue483Tests.cs b/csharp/sbe-tests/Issue483Tests.cs new file mode 100644 index 0000000000..bd6f9b0640 --- /dev/null +++ b/csharp/sbe-tests/Issue483Tests.cs @@ -0,0 +1,44 @@ +// Copyright (C) 2017 MarketFactory, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Org.SbeTool.Sbe.Dll; + +namespace Org.SbeTool.Sbe.Tests +{ + [TestClass] + public unsafe class Issue483Tests + { + private Issue483.Issue483 _issue483; + + [TestInitialize] + public void SetUp() + { + _issue483 = new Issue483.Issue483(); + + } + + [TestMethod] + public void PresenceTest() + { + // Check our attributes for their presence meta attribute + Assert.AreEqual(Issue483.Issue483.UnsetMetaAttribute(Issue483.MetaAttribute.Presence), "required"); + Assert.AreEqual(Issue483.Issue483.RequiredMetaAttribute(Issue483.MetaAttribute.Presence), "required"); + Assert.AreEqual(Issue483.Issue483.ConstantMetaAttribute(Issue483.MetaAttribute.Presence), "constant"); + Assert.AreEqual(Issue483.Issue483.OptionalMetaAttribute(Issue483.MetaAttribute.Presence), "optional"); + } + + } +} diff --git a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/csharp/CSharpGenerator.java b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/csharp/CSharpGenerator.java index fe53c6391d..2c371ade7b 100644 --- a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/csharp/CSharpGenerator.java +++ b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/csharp/CSharpGenerator.java @@ -559,7 +559,8 @@ private void generateMetaAttributeEnum() throws IOException INDENT + "{\n" + INDENT + INDENT + "Epoch,\n" + INDENT + INDENT + "TimeUnit,\n" + - INDENT + INDENT + "SemanticType\n" + + INDENT + INDENT + "SemanticType,\n" + + INDENT + INDENT + "Presence\n" + INDENT + "}\n" + "}\n" ); @@ -1092,6 +1093,7 @@ private void generateFieldMetaAttributeMethod(final StringBuilder sb, final Toke final String epoch = encoding.epoch() == null ? "" : encoding.epoch(); final String timeUnit = encoding.timeUnit() == null ? "" : encoding.timeUnit(); final String semanticType = encoding.semanticType() == null ? "" : encoding.semanticType(); + final String presence = encoding.presence() == null ? "" : encoding.presence().toString().toLowerCase(); sb.append(String.format( "\n" + @@ -1102,13 +1104,15 @@ private void generateFieldMetaAttributeMethod(final StringBuilder sb, final Toke indent + INDENT + INDENT + "case MetaAttribute.Epoch: return \"%s\";\n" + indent + INDENT + INDENT + "case MetaAttribute.TimeUnit: return \"%s\";\n" + indent + INDENT + INDENT + "case MetaAttribute.SemanticType: return \"%s\";\n" + + indent + INDENT + INDENT + "case MetaAttribute.Presence: return \"%s\";\n" + indent + INDENT + "}\n\n" + indent + INDENT + "return \"\";\n" + indent + "}\n", toUpperFirstChar(token.name()), epoch, timeUnit, - semanticType)); + semanticType, + presence)); } private CharSequence generateEnumFieldNotPresentCondition( diff --git a/sbe-tool/src/test/resources/issue483.xml b/sbe-tool/src/test/resources/issue483.xml new file mode 100644 index 0000000000..ae8411584b --- /dev/null +++ b/sbe-tool/src/test/resources/issue483.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + +