From 62941d4321824a50d79b7487c1fc1b729002ad0e Mon Sep 17 00:00:00 2001 From: ThePlenkov Date: Thu, 18 Aug 2022 09:55:42 +0000 Subject: [PATCH] unit test for issue #1783 --- tests/comp_import_extend.js | 18 +++++++++ tests/comp_import_extend.ts | 37 +++++++++++++++++++ tests/data/test-import-extend/main.proto | 6 +++ tests/data/test-import-extend/source_a.proto | 5 +++ tests/data/test-import-extend/source_b.proto | 5 +++ .../data/test-import-extend/validation.proto | 15 ++++++++ 6 files changed, 86 insertions(+) create mode 100644 tests/comp_import_extend.js create mode 100644 tests/comp_import_extend.ts create mode 100644 tests/data/test-import-extend/main.proto create mode 100644 tests/data/test-import-extend/source_a.proto create mode 100644 tests/data/test-import-extend/source_b.proto create mode 100644 tests/data/test-import-extend/validation.proto diff --git a/tests/comp_import_extend.js b/tests/comp_import_extend.js new file mode 100644 index 000000000..30eb40f64 --- /dev/null +++ b/tests/comp_import_extend.js @@ -0,0 +1,18 @@ +"use strict"; +exports.__esModule = true; +var path = require("path"); +var tape = require("tape"); +var protobuf = require("../index"); +// to extend Root +require("../ext/descriptor"); +tape.test("extensions", function (test) { + // load document with extended field imported multiple times + var root = protobuf.loadSync(path.resolve(__dirname, "data/test-import-extend/main.proto")); + root.resolveAll(); + // convert to Descriptor Set + var decodedDescriptorSet = root.toDescriptor("proto3"); + // load back from descriptor set + var root2 = protobuf.Root.fromDescriptor(decodedDescriptorSet); + test.pass("should parse and resolve without errors"); + test.end(); +}); diff --git a/tests/comp_import_extend.ts b/tests/comp_import_extend.ts new file mode 100644 index 000000000..914930a1f --- /dev/null +++ b/tests/comp_import_extend.ts @@ -0,0 +1,37 @@ +import path = require("path"); +import * as tape from "tape"; + +import * as protobuf from "../index"; +import { IFileDescriptorSet } from "../ext/descriptor"; +// to extend Root +require("../ext/descriptor"); + +interface Descriptor { + toDescriptor( + protoVersion: string + ): protobuf.Message & IFileDescriptorSet; + fromDescriptor( + descriptor: IFileDescriptorSet | protobuf.Reader | Uint8Array + ): protobuf.Root; +} + +tape.test("extensions", function (test) { + // load document with extended field imported multiple times + const root = protobuf.loadSync( + path.resolve(__dirname, "data/test-import-extend/main.proto") + ); + root.resolveAll(); + + // convert to Descriptor Set + const decodedDescriptorSet = (root as unknown as Descriptor).toDescriptor( + "proto3" + ); + + // load back from descriptor set + const root2 = (protobuf.Root as unknown as Descriptor).fromDescriptor( + decodedDescriptorSet + ); + + test.pass("should parse and resolve without errors"); + test.end(); +}); diff --git a/tests/data/test-import-extend/main.proto b/tests/data/test-import-extend/main.proto new file mode 100644 index 000000000..d466d3570 --- /dev/null +++ b/tests/data/test-import-extend/main.proto @@ -0,0 +1,6 @@ +syntax = "proto3"; + +package test.import.extend; + +import "source_a.proto"; +import "source_b.proto"; \ No newline at end of file diff --git a/tests/data/test-import-extend/source_a.proto b/tests/data/test-import-extend/source_a.proto new file mode 100644 index 000000000..d6d2a3f88 --- /dev/null +++ b/tests/data/test-import-extend/source_a.proto @@ -0,0 +1,5 @@ +syntax = "proto3"; + +package source.a; + +import "validation.proto"; \ No newline at end of file diff --git a/tests/data/test-import-extend/source_b.proto b/tests/data/test-import-extend/source_b.proto new file mode 100644 index 000000000..f9b7ff66b --- /dev/null +++ b/tests/data/test-import-extend/source_b.proto @@ -0,0 +1,5 @@ +syntax = "proto3"; + +package source.b; + +import "validation.proto"; \ No newline at end of file diff --git a/tests/data/test-import-extend/validation.proto b/tests/data/test-import-extend/validation.proto new file mode 100644 index 000000000..18582955b --- /dev/null +++ b/tests/data/test-import-extend/validation.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; + +package validation; + +import "../google/protobuf/descriptor.proto"; + +option java_package = "com.reserve.validation"; +option java_outer_classname = "ValidationRules"; + +extend google.protobuf.FieldOptions { FieldRules rules = 70001; } + +message FieldRules { + reserved 1; + reserved "optional"; +} \ No newline at end of file