| var tape = require("tape"); |
| |
| var protobuf = require(".."); |
| |
| var protoRequired = "message Test {\ |
| required group MyGroup = 1 {\ |
| option foo = \"bar\";\ |
| required uint32 a = 2;\ |
| };\ |
| }"; |
| |
| var protoRepeated = "message Test {\ |
| repeated group MyGroup = 1 {\ |
| option foo = \"bar\";\ |
| required uint32 a = 2;\ |
| };\ |
| }"; |
| |
| tape.test("legacy groups", function(test) { |
| var root = protobuf.parse(protoRequired).root; |
| |
| var Test = root.resolveAll().lookup("Test"); |
| var MyGroupType = Test.get("MyGroup"); |
| var MyGroupField = Test.get("myGroup"); |
| var msg = { |
| myGroup: { |
| a: 111 |
| } |
| }; |
| |
| test.ok(MyGroupType instanceof protobuf.Type && MyGroupField instanceof protobuf.Field, "should parse to a type and a field"); |
| test.equal(MyGroupType.group, true, "should have the group flag set on the type"); |
| test.equal(MyGroupField.resolvedType, MyGroupType, "should reference the type from the field"); |
| var json = MyGroupType.toJSON(); |
| test.equal(json.group, true, "should export group=true to JSON"); |
| var MyGroupType2 = protobuf.Type.fromJSON("MyGroup", json); |
| test.equal(MyGroupType2.group, true, "should import group=true from JSON"); |
| // NOTE: fromJSON alone does not add the sister-field. |
| // The parser does this explicitly and the field is part of the exported JSON itself. |
| |
| test.test(test.name + " - should encode required", (function(Test, msg) { return function(test) { |
| var buf = Test.encode(msg).finish(); |
| test.equal(buf.length, 4, "a total of 4 bytes"); |
| test.equal(buf[0], 1 << 3 | 3, "id 1, wireType 3"); |
| test.equal(buf[1], 2 << 3 | 0, "id 2, wireType 0"); |
| test.equal(buf[2], 111, "111"); |
| test.equal(buf[3], 1 << 3 | 4, "id 1, wireType 4"); |
| test.same(Test.decode(buf), msg, "and decode back the original message"); |
| test.end(); |
| };})(Test, msg)); |
| |
| // Same but repeated |
| root = protobuf.parse(protoRepeated).root; |
| Test = root.resolveAll().lookup("Test"); |
| msg = { |
| myGroup: [{ |
| a: 111 |
| },{ |
| a: 112 |
| }] |
| }; |
| |
| test.test(test.name + " - should encode repeated", (function(Test, msg) { return function(test) { |
| var buf = Test.encode(msg).finish(); |
| test.equal(buf.length, 8, "a total of 8 bytes"); |
| test.equal(buf[0], 1 << 3 | 3, "id 1, wireType 3"); |
| test.equal(buf[1], 2 << 3 | 0, "id 2, wireType 0"); |
| test.equal(buf[2], 111, "111"); |
| test.equal(buf[3], 1 << 3 | 4, "id 1, wireType 4"); |
| test.equal(buf[4], 1 << 3 | 3, "id 1, wireType 3"); |
| test.equal(buf[5], 2 << 3 | 0, "id 2, wireType 0"); |
| test.equal(buf[6], 112, "112"); |
| test.equal(buf[7], 1 << 3 | 4, "id 1, wireType 4"); |
| test.same(Test.decode(buf), msg, "and decode back the original message"); |
| test.end(); |
| };})(Test, msg)); |
| |
| test.end(); |
| }); |