Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
P
protobuf
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
protobuf
Commits
19ed9c07
Commit
19ed9c07
authored
Aug 14, 2008
by
Jon Skeet
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
UnknownFieldSet tests, and a fix to repeated extension elements.
parent
a80a37cc
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
323 additions
and
4 deletions
+323
-4
MessageTest.cs
csharp/ProtocolBuffers.Test/MessageTest.cs
+5
-2
ProtocolBuffers.Test.csproj
csharp/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj
+3
-0
ServiceTest.cs
csharp/ProtocolBuffers.Test/ServiceTest.cs
+10
-0
TextFormatTest.cs
csharp/ProtocolBuffers.Test/TextFormatTest.cs
+10
-0
UnknownFieldSetTest.cs
csharp/ProtocolBuffers.Test/UnknownFieldSetTest.cs
+284
-0
AbstractBuilder.cs
csharp/ProtocolBuffers/AbstractBuilder.cs
+5
-0
GeneratedExtensionBase.cs
csharp/ProtocolBuffers/GeneratedExtensionBase.cs
+2
-1
GeneratedRepeatException.cs
csharp/ProtocolBuffers/GeneratedRepeatException.cs
+1
-1
IBuilder.cs
csharp/ProtocolBuffers/IBuilder.cs
+3
-0
No files found.
csharp/ProtocolBuffers.Test/MessageTest.cs
View file @
19ed9c07
...
...
@@ -58,8 +58,11 @@ namespace Google.ProtocolBuffers {
Assert
.
AreEqual
(
MergeResultText
,
result
.
ToString
());
}
/** Test merging two DynamicMessages. */
public
void
testDynamicMergeFrom
()
{
/// <summary>
/// Test merging two DynamicMessages.
/// </summary>
[
Test
]
public
void
DynamicMergeFrom
()
{
DynamicMessage
result
=
(
DynamicMessage
)
DynamicMessage
.
CreateBuilder
(
MergeDest
)
.
MergeFrom
((
DynamicMessage
)
DynamicMessage
.
CreateBuilder
(
MergeSource
).
Build
())
.
Build
();
...
...
csharp/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj
View file @
19ed9c07
...
...
@@ -54,6 +54,7 @@
<Compile
Include=
"MessageTest.cs"
/>
<Compile
Include=
"Properties\AssemblyInfo.cs"
/>
<Compile
Include=
"ReflectionTester.cs"
/>
<Compile
Include=
"ServiceTest.cs"
/>
<Compile
Include=
"TestProtos\EnumWithNoOuter.cs"
/>
<Compile
Include=
"TestProtos\MessageWithNoOuter.cs"
/>
<Compile
Include=
"TestProtos\MultiFileProto.cs"
/>
...
...
@@ -64,6 +65,8 @@
<Compile
Include=
"TestProtos\UnitTestOptimizeForProtoFile.cs"
/>
<Compile
Include=
"TestProtos\UnitTestProtoFile.cs"
/>
<Compile
Include=
"TestUtil.cs"
/>
<Compile
Include=
"TextFormatTest.cs"
/>
<Compile
Include=
"UnknownFieldSetTest.cs"
/>
<Compile
Include=
"WireFormatTest.cs"
/>
</ItemGroup>
<ItemGroup>
...
...
csharp/ProtocolBuffers.Test/ServiceTest.cs
0 → 100644
View file @
19ed9c07
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
using
NUnit.Framework
;
namespace
Google.ProtocolBuffers
{
[
TestFixture
]
public
class
ServiceTest
{
}
}
csharp/ProtocolBuffers.Test/TextFormatTest.cs
0 → 100644
View file @
19ed9c07
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
using
NUnit.Framework
;
namespace
Google.ProtocolBuffers
{
[
TestFixture
]
public
class
TextFormatTest
{
}
}
csharp/ProtocolBuffers.Test/UnknownFieldSetTest.cs
0 → 100644
View file @
19ed9c07
using
System
;
using
System.Collections.Generic
;
using
Google.ProtocolBuffers.Descriptors
;
using
Google.ProtocolBuffers.TestProtos
;
using
NUnit.Framework
;
namespace
Google.ProtocolBuffers
{
[
TestFixture
]
public
class
UnknownFieldSetTest
{
private
MessageDescriptor
descriptor
;
private
TestAllTypes
allFields
;
private
ByteString
allFieldsData
;
/// <summary>
/// An empty message that has been parsed from allFieldsData. So, it has
/// unknown fields of every type.
/// </summary>
private
TestEmptyMessage
emptyMessage
;
private
UnknownFieldSet
unknownFields
;
[
SetUp
]
public
void
SetUp
()
{
descriptor
=
TestAllTypes
.
Descriptor
;
allFields
=
TestUtil
.
GetAllSet
();
allFieldsData
=
allFields
.
ToByteString
();
emptyMessage
=
TestEmptyMessage
.
ParseFrom
(
allFieldsData
);
unknownFields
=
emptyMessage
.
UnknownFields
;
}
private
UnknownField
GetField
(
String
name
)
{
FieldDescriptor
field
=
descriptor
.
FindDescriptor
<
FieldDescriptor
>(
name
);
Assert
.
IsNotNull
(
field
);
return
unknownFields
.
FieldDictionary
[
field
.
FieldNumber
];
}
/// <summary>
/// Constructs a protocol buffer which contains fields with all the same
/// numbers as allFieldsData except that each field is some other wire
/// type.
/// </summary>
private
ByteString
GetBizarroData
()
{
UnknownFieldSet
.
Builder
bizarroFields
=
UnknownFieldSet
.
CreateBuilder
();
UnknownField
varintField
=
UnknownField
.
CreateBuilder
().
AddVarint
(
1
).
Build
();
UnknownField
fixed32Field
=
UnknownField
.
CreateBuilder
().
AddFixed32
(
1
).
Build
();
foreach
(
KeyValuePair
<
int
,
UnknownField
>
entry
in
unknownFields
.
FieldDictionary
)
{
if
(
entry
.
Value
.
VarintList
.
Count
==
0
)
{
// Original field is not a varint, so use a varint.
bizarroFields
.
AddField
(
entry
.
Key
,
varintField
);
}
else
{
// Original field *is* a varint, so use something else.
bizarroFields
.
AddField
(
entry
.
Key
,
fixed32Field
);
}
}
return
bizarroFields
.
Build
().
ToByteString
();
}
// =================================================================
[
Test
]
public
void
Varint
()
{
UnknownField
field
=
GetField
(
"optional_int32"
);
Assert
.
AreEqual
(
1
,
field
.
VarintList
.
Count
);
Assert
.
AreEqual
(
allFields
.
OptionalInt32
,
(
long
)
field
.
VarintList
[
0
]);
}
[
Test
]
public
void
Fixed32
()
{
UnknownField
field
=
GetField
(
"optional_fixed32"
);
Assert
.
AreEqual
(
1
,
field
.
Fixed32List
.
Count
);
Assert
.
AreEqual
(
allFields
.
OptionalFixed32
,
(
int
)
field
.
Fixed32List
[
0
]);
}
[
Test
]
public
void
Fixed64
()
{
UnknownField
field
=
GetField
(
"optional_fixed64"
);
Assert
.
AreEqual
(
1
,
field
.
Fixed64List
.
Count
);
Assert
.
AreEqual
(
allFields
.
OptionalFixed64
,
(
long
)
field
.
Fixed64List
[
0
]);
}
[
Test
]
public
void
LengthDelimited
()
{
UnknownField
field
=
GetField
(
"optional_bytes"
);
Assert
.
AreEqual
(
1
,
field
.
LengthDelimitedList
.
Count
);
Assert
.
AreEqual
(
allFields
.
OptionalBytes
,
field
.
LengthDelimitedList
[
0
]);
}
[
Test
]
public
void
Group
()
{
FieldDescriptor
nestedFieldDescriptor
=
TestAllTypes
.
Types
.
OptionalGroup
.
Descriptor
.
FindDescriptor
<
FieldDescriptor
>(
"a"
);
Assert
.
IsNotNull
(
nestedFieldDescriptor
);
UnknownField
field
=
GetField
(
"optionalgroup"
);
Assert
.
AreEqual
(
1
,
field
.
GroupList
.
Count
);
UnknownFieldSet
group
=
field
.
GroupList
[
0
];
Assert
.
AreEqual
(
1
,
group
.
FieldDictionary
.
Count
);
Assert
.
IsTrue
(
group
.
HasField
(
nestedFieldDescriptor
.
FieldNumber
));
UnknownField
nestedField
=
group
[
nestedFieldDescriptor
.
FieldNumber
];
Assert
.
AreEqual
(
1
,
nestedField
.
VarintList
.
Count
);
Assert
.
AreEqual
(
allFields
.
OptionalGroup
.
A
,
(
long
)
nestedField
.
VarintList
[
0
]);
}
[
Test
]
public
void
Serialize
()
{
// Check that serializing the UnknownFieldSet produces the original data again.
ByteString
data
=
emptyMessage
.
ToByteString
();
Assert
.
AreEqual
(
allFieldsData
,
data
);
}
[
Test
]
public
void
CopyFrom
()
{
TestEmptyMessage
message
=
TestEmptyMessage
.
CreateBuilder
().
MergeFrom
(
emptyMessage
).
Build
();
Assert
.
AreEqual
(
emptyMessage
.
ToString
(),
message
.
ToString
());
}
[
Test
]
public
void
MergeFrom
()
{
TestEmptyMessage
source
=
TestEmptyMessage
.
CreateBuilder
()
.
SetUnknownFields
(
UnknownFieldSet
.
CreateBuilder
()
.
AddField
(
2
,
UnknownField
.
CreateBuilder
()
.
AddVarint
(
2
).
Build
())
.
AddField
(
3
,
UnknownField
.
CreateBuilder
()
.
AddVarint
(
4
).
Build
())
.
Build
())
.
Build
();
TestEmptyMessage
destination
=
TestEmptyMessage
.
CreateBuilder
()
.
SetUnknownFields
(
UnknownFieldSet
.
CreateBuilder
()
.
AddField
(
1
,
UnknownField
.
CreateBuilder
()
.
AddVarint
(
1
).
Build
())
.
AddField
(
3
,
UnknownField
.
CreateBuilder
()
.
AddVarint
(
3
).
Build
())
.
Build
())
.
MergeFrom
(
source
)
.
Build
();
Assert
.
AreEqual
(
"1: 1\n"
+
"2: 2\n"
+
"3: 3\n"
+
"3: 4\n"
,
destination
.
ToString
());
}
[
Test
]
public
void
Clear
()
{
UnknownFieldSet
fields
=
UnknownFieldSet
.
CreateBuilder
().
MergeFrom
(
unknownFields
).
Clear
().
Build
();
Assert
.
AreEqual
(
0
,
fields
.
FieldDictionary
.
Count
);
}
[
Test
]
public
void
ClearMessage
()
{
TestEmptyMessage
message
=
TestEmptyMessage
.
CreateBuilder
().
MergeFrom
(
emptyMessage
).
Clear
().
Build
();
Assert
.
AreEqual
(
0
,
message
.
SerializedSize
);
}
[
Test
]
public
void
ParseKnownAndUnknown
()
{
// Test mixing known and unknown fields when parsing.
UnknownFieldSet
fields
=
UnknownFieldSet
.
CreateBuilder
(
unknownFields
)
.
AddField
(
123456
,
UnknownField
.
CreateBuilder
().
AddVarint
(
654321
).
Build
())
.
Build
();
ByteString
data
=
fields
.
ToByteString
();
TestAllTypes
destination
=
TestAllTypes
.
ParseFrom
(
data
);
TestUtil
.
AssertAllFieldsSet
(
destination
);
Assert
.
AreEqual
(
1
,
destination
.
UnknownFields
.
FieldDictionary
.
Count
);
UnknownField
field
=
destination
.
UnknownFields
[
123456
];
Assert
.
AreEqual
(
1
,
field
.
VarintList
.
Count
);
Assert
.
AreEqual
(
654321
,
(
long
)
field
.
VarintList
[
0
]);
}
[
Test
]
public
void
WrongTypeTreatedAsUnknown
()
{
// Test that fields of the wrong wire type are treated like unknown fields
// when parsing.
ByteString
bizarroData
=
GetBizarroData
();
TestAllTypes
allTypesMessage
=
TestAllTypes
.
ParseFrom
(
bizarroData
);
TestEmptyMessage
emptyMessage
=
TestEmptyMessage
.
ParseFrom
(
bizarroData
);
// All fields should have been interpreted as unknown, so the debug strings
// should be the same.
Assert
.
AreEqual
(
emptyMessage
.
ToString
(),
allTypesMessage
.
ToString
());
}
[
Test
]
public
void
UnknownExtensions
()
{
// Make sure fields are properly parsed to the UnknownFieldSet even when
// they are declared as extension numbers.
TestEmptyMessageWithExtensions
message
=
TestEmptyMessageWithExtensions
.
ParseFrom
(
allFieldsData
);
Assert
.
AreEqual
(
unknownFields
.
FieldDictionary
.
Count
,
message
.
UnknownFields
.
FieldDictionary
.
Count
);
Assert
.
AreEqual
(
allFieldsData
,
message
.
ToByteString
());
}
[
Test
]
public
void
WrongExtensionTypeTreatedAsUnknown
()
{
// Test that fields of the wrong wire type are treated like unknown fields
// when parsing extensions.
ByteString
bizarroData
=
GetBizarroData
();
TestAllExtensions
allExtensionsMessage
=
TestAllExtensions
.
ParseFrom
(
bizarroData
);
TestEmptyMessage
emptyMessage
=
TestEmptyMessage
.
ParseFrom
(
bizarroData
);
// All fields should have been interpreted as unknown, so the debug strings
// should be the same.
Assert
.
AreEqual
(
emptyMessage
.
ToString
(),
allExtensionsMessage
.
ToString
());
}
[
Test
]
public
void
ParseUnknownEnumValue
()
{
FieldDescriptor
singularField
=
TestAllTypes
.
Descriptor
.
FindDescriptor
<
FieldDescriptor
>(
"optional_nested_enum"
);
FieldDescriptor
repeatedField
=
TestAllTypes
.
Descriptor
.
FindDescriptor
<
FieldDescriptor
>(
"repeated_nested_enum"
);
Assert
.
IsNotNull
(
singularField
);
Assert
.
IsNotNull
(
repeatedField
);
ByteString
data
=
UnknownFieldSet
.
CreateBuilder
()
.
AddField
(
singularField
.
FieldNumber
,
UnknownField
.
CreateBuilder
()
.
AddVarint
((
int
)
TestAllTypes
.
Types
.
NestedEnum
.
BAR
)
.
AddVarint
(
5
)
// not valid
.
Build
())
.
AddField
(
repeatedField
.
FieldNumber
,
UnknownField
.
CreateBuilder
()
.
AddVarint
((
int
)
TestAllTypes
.
Types
.
NestedEnum
.
FOO
)
.
AddVarint
(
4
)
// not valid
.
AddVarint
((
int
)
TestAllTypes
.
Types
.
NestedEnum
.
BAZ
)
.
AddVarint
(
6
)
// not valid
.
Build
())
.
Build
()
.
ToByteString
();
{
TestAllTypes
message
=
TestAllTypes
.
ParseFrom
(
data
);
Assert
.
AreEqual
(
TestAllTypes
.
Types
.
NestedEnum
.
BAR
,
message
.
OptionalNestedEnum
);
TestUtil
.
AssertEqual
(
new
[]
{
TestAllTypes
.
Types
.
NestedEnum
.
FOO
,
TestAllTypes
.
Types
.
NestedEnum
.
BAZ
},
message
.
RepeatedNestedEnumList
);
TestUtil
.
AssertEqual
(
new
[]
{
5U
L
},
message
.
UnknownFields
[
singularField
.
FieldNumber
].
VarintList
);
TestUtil
.
AssertEqual
(
new
[]
{
4U
L
,
6U
L
},
message
.
UnknownFields
[
repeatedField
.
FieldNumber
].
VarintList
);
}
{
TestAllExtensions
message
=
TestAllExtensions
.
ParseFrom
(
data
,
TestUtil
.
CreateExtensionRegistry
());
Assert
.
AreEqual
(
TestAllTypes
.
Types
.
NestedEnum
.
BAR
,
message
.
GetExtension
(
UnitTestProtoFile
.
OptionalNestedEnumExtension
));
TestUtil
.
AssertEqual
(
new
[]
{
TestAllTypes
.
Types
.
NestedEnum
.
FOO
,
TestAllTypes
.
Types
.
NestedEnum
.
BAZ
},
message
.
GetExtension
(
UnitTestProtoFile
.
RepeatedNestedEnumExtension
));
TestUtil
.
AssertEqual
(
new
[]
{
5U
L
},
message
.
UnknownFields
[
singularField
.
FieldNumber
].
VarintList
);
TestUtil
.
AssertEqual
(
new
[]
{
4U
L
,
6U
L
},
message
.
UnknownFields
[
repeatedField
.
FieldNumber
].
VarintList
);
}
}
}
}
csharp/ProtocolBuffers/AbstractBuilder.cs
View file @
19ed9c07
...
...
@@ -84,6 +84,11 @@ namespace Google.ProtocolBuffers {
}
#
endregion
public
TBuilder
SetUnknownFields
(
UnknownFieldSet
fields
)
{
UnknownFields
=
fields
;
return
ThisBuilder
;
}
public
virtual
TBuilder
Clear
()
{
foreach
(
FieldDescriptor
field
in
AllFields
.
Keys
)
{
ClearField
(
field
);
...
...
csharp/ProtocolBuffers/GeneratedExtensionBase.cs
View file @
19ed9c07
...
...
@@ -78,7 +78,8 @@ namespace Google.ProtocolBuffers {
}
case
MappedType
.
Enum
:
// Just return a boxed int - that can be unboxed to the enum
return
((
EnumValueDescriptor
)
value
).
Number
;
EnumValueDescriptor
enumValue
=
(
EnumValueDescriptor
)
value
;
return
enumValue
.
Number
;
default
:
return
value
;
}
...
...
csharp/ProtocolBuffers/GeneratedRepeatException.cs
View file @
19ed9c07
...
...
@@ -31,7 +31,7 @@ namespace Google.ProtocolBuffers {
// Must convert the whole list.
List
<
TExtensionElement
>
result
=
new
List
<
TExtensionElement
>();
foreach
(
object
element
in
(
IEnumerable
)
value
)
{
((
IList
)
result
).
Add
(
SingularFromReflectionType
(
element
));
result
.
Add
((
TExtensionElement
)
SingularFromReflectionType
(
element
));
}
return
result
;
}
else
{
...
...
csharp/ProtocolBuffers/IBuilder.cs
View file @
19ed9c07
...
...
@@ -123,6 +123,9 @@ namespace Google.ProtocolBuffers {
public
interface
IBuilder
<
TMessage
,
TBuilder
>
:
IBuilder
where
TMessage
:
IMessage
<
TMessage
,
TBuilder
>
where
TBuilder
:
IBuilder
<
TMessage
,
TBuilder
>
{
TBuilder
SetUnknownFields
(
UnknownFieldSet
unknownFields
);
/// <summary>
/// Resets all fields to their default values.
/// </summary>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment