Skip to content

Commit 4de253b

Browse files
authored
Merge pull request #487 from MarketFactory/issue483-dotnet-squash
[CSharp] Add meta attribute PRESENCE to generated codecs. Issue #483.
2 parents 5bab050 + a1a6819 commit 4de253b

File tree

7 files changed

+77
-4
lines changed

7 files changed

+77
-4
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ csharp/sbe-generated/baseline
106106
csharp/sbe-generated/baseline-bigendian
107107
csharp/sbe-generated/extension
108108
csharp/sbe-generated/issue435
109+
csharp/sbe-generated/issue483
109110
csharp/sbe-generated/since-deprecated
110111
csharp/sbe-generated/mktdata/*.cs
111112
csharp/sbe-generated/uk_co_real_logic_sbe_benchmarks_fix

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,7 @@ task(generateCSharpCodecs, type: JavaExec) {
551551
'sbe.validation.xsd': validationXsdPath)
552552
args = ['sbe-tool/src/test/resources/FixBinary.xml',
553553
'sbe-tool/src/test/resources/issue435.xml',
554+
'sbe-tool/src/test/resources/issue483.xml',
554555
'sbe-tool/src/test/resources/since-deprecated-test-schema.xml',
555556
'sbe-tool/src/test/resources/example-bigendian-test-schema.xml',
556557
'sbe-samples/src/main/resources/example-schema.xml',

csharp/runtests.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
MSTEST='/c/Program Files (x86)/Microsoft Visual Studio 14.0/Common7/IDE/MSTest.exe'
2-
"$MSTEST" /testcontainer:sbe-tests/bin/Debug/Org.SbeTool.Sbe.UnitTests.dll
2+
"$MSTEST" /testcontainer:sbe-tests/bin/Debug/net45/Org.SbeTool.Sbe.UnitTests.dll
33

csharp/sbe-generated/sbe-generated.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
<ProjectReference Include="..\sbe-dll\sbe-dll.csproj" />
1313
</ItemGroup>
1414

15-
</Project>
15+
</Project>

csharp/sbe-tests/Issue483Tests.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// Copyright (C) 2017 MarketFactory, Inc
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
using System;
16+
using Microsoft.VisualStudio.TestTools.UnitTesting;
17+
using Org.SbeTool.Sbe.Dll;
18+
19+
namespace Org.SbeTool.Sbe.Tests
20+
{
21+
[TestClass]
22+
public unsafe class Issue483Tests
23+
{
24+
private Issue483.Issue483 _issue483;
25+
26+
[TestInitialize]
27+
public void SetUp()
28+
{
29+
_issue483 = new Issue483.Issue483();
30+
31+
}
32+
33+
[TestMethod]
34+
public void PresenceTest()
35+
{
36+
// Check our attributes for their presence meta attribute
37+
Assert.AreEqual(Issue483.Issue483.UnsetMetaAttribute(Issue483.MetaAttribute.Presence), "required");
38+
Assert.AreEqual(Issue483.Issue483.RequiredMetaAttribute(Issue483.MetaAttribute.Presence), "required");
39+
Assert.AreEqual(Issue483.Issue483.ConstantMetaAttribute(Issue483.MetaAttribute.Presence), "constant");
40+
Assert.AreEqual(Issue483.Issue483.OptionalMetaAttribute(Issue483.MetaAttribute.Presence), "optional");
41+
}
42+
43+
}
44+
}

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/csharp/CSharpGenerator.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,8 @@ private void generateMetaAttributeEnum() throws IOException
559559
INDENT + "{\n" +
560560
INDENT + INDENT + "Epoch,\n" +
561561
INDENT + INDENT + "TimeUnit,\n" +
562-
INDENT + INDENT + "SemanticType\n" +
562+
INDENT + INDENT + "SemanticType,\n" +
563+
INDENT + INDENT + "Presence\n" +
563564
INDENT + "}\n" +
564565
"}\n"
565566
);
@@ -1092,6 +1093,7 @@ private void generateFieldMetaAttributeMethod(final StringBuilder sb, final Toke
10921093
final String epoch = encoding.epoch() == null ? "" : encoding.epoch();
10931094
final String timeUnit = encoding.timeUnit() == null ? "" : encoding.timeUnit();
10941095
final String semanticType = encoding.semanticType() == null ? "" : encoding.semanticType();
1096+
final String presence = encoding.presence() == null ? "" : encoding.presence().toString().toLowerCase();
10951097

10961098
sb.append(String.format(
10971099
"\n" +
@@ -1102,13 +1104,15 @@ private void generateFieldMetaAttributeMethod(final StringBuilder sb, final Toke
11021104
indent + INDENT + INDENT + "case MetaAttribute.Epoch: return \"%s\";\n" +
11031105
indent + INDENT + INDENT + "case MetaAttribute.TimeUnit: return \"%s\";\n" +
11041106
indent + INDENT + INDENT + "case MetaAttribute.SemanticType: return \"%s\";\n" +
1107+
indent + INDENT + INDENT + "case MetaAttribute.Presence: return \"%s\";\n" +
11051108
indent + INDENT + "}\n\n" +
11061109
indent + INDENT + "return \"\";\n" +
11071110
indent + "}\n",
11081111
toUpperFirstChar(token.name()),
11091112
epoch,
11101113
timeUnit,
1111-
semanticType));
1114+
semanticType,
1115+
presence));
11121116
}
11131117

11141118
private CharSequence generateEnumFieldNotPresentCondition(
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2+
<sbe:messageSchema xmlns:sbe="http://fixprotocol.io/2016/sbe"
3+
package="issue483"
4+
id="483"
5+
version="0"
6+
semanticVersion="1.0"
7+
description="issue 483 test case"
8+
byteOrder="bigEndian">
9+
<types>
10+
<composite name="messageHeader" description="Message identifiers and length of message root">
11+
<type name="blockLength" primitiveType="uint16"/>
12+
<type name="templateId" primitiveType="uint16"/>
13+
<type name="schemaId" primitiveType="uint16"/>
14+
<type name="version" primitiveType="uint16"/>
15+
</composite>
16+
</types>
17+
<sbe:message name="issue483" id="1" description="issue 483 test">
18+
<field name="unset" type="uint64" id="2"/>
19+
<field name="required" type="uint64" id="3" presence="required"/>
20+
<field name="constant" type="uint64" id="4" presence="constant"/>
21+
<field name="optional" type="uint64" id="5" presence="optional"/>
22+
</sbe:message>
23+
</sbe:messageSchema>

0 commit comments

Comments
 (0)