mirror of
https://github.com/valitydev/thrift.git
synced 2024-11-07 02:45:22 +00:00
Thrift-2960: Fix namespace regression for Ruby
Client: rb Patch: Jan Brauer Add test that exposes the broken namespacing. Fixes a bug introduced by #140. This closes #363
This commit is contained in:
parent
176c9261ed
commit
4e16718e99
@ -295,11 +295,15 @@ string t_rb_generator::render_includes() {
|
||||
const vector<t_program*>& includes = program_->get_includes();
|
||||
string result = "";
|
||||
for (size_t i = 0; i < includes.size(); ++i) {
|
||||
t_program* included = includes[i];
|
||||
std::string included_require_prefix
|
||||
= rb_namespace_to_path_prefix(included->get_namespace("rb"));
|
||||
std::string included_name = included->get_name();
|
||||
result += "require '" + included_require_prefix + underscore(included_name) + "_types'\n";
|
||||
if (namespaced_) {
|
||||
t_program* included = includes[i];
|
||||
std::string included_require_prefix
|
||||
= rb_namespace_to_path_prefix(included->get_namespace("rb"));
|
||||
std::string included_name = included->get_name();
|
||||
result += "require '" + included_require_prefix + underscore(included_name) + "_types'\n";
|
||||
} else {
|
||||
result += "require '" + underscore(includes[i]->get_name()) + "_types'\n";
|
||||
}
|
||||
}
|
||||
if (includes.size() > 0) {
|
||||
result += "\n";
|
||||
|
@ -38,7 +38,7 @@ RSpec::Core::RakeTask.new(:'spec:rcov') do |t|
|
||||
end
|
||||
|
||||
desc 'Compile the .thrift files for the specs'
|
||||
task :'gen-rb' => [:'gen-rb:spec', :'gen-rb:namespaced_spec', :'gen-rb:benchmark', :'gen-rb:debug_proto']
|
||||
task :'gen-rb' => [:'gen-rb:spec', :'gen-rb:namespaced_spec', :'gen-rb:flat_spec', :'gen-rb:benchmark', :'gen-rb:debug_proto']
|
||||
namespace :'gen-rb' do
|
||||
task :'spec' do
|
||||
dir = File.dirname(__FILE__) + '/spec'
|
||||
@ -50,6 +50,12 @@ namespace :'gen-rb' do
|
||||
sh THRIFT, '--gen', 'rb:namespaced', '-recurse', '-o', dir, "#{dir}/ThriftNamespacedSpec.thrift"
|
||||
end
|
||||
|
||||
task :'flat_spec' do
|
||||
dir = File.dirname(__FILE__) + '/spec'
|
||||
mkdir_p("#{dir}/gen-rb/flat")
|
||||
sh THRIFT, '--gen', 'rb', '-recurse', '-out', "#{dir}/gen-rb/flat", "#{dir}/ThriftNamespacedSpec.thrift"
|
||||
end
|
||||
|
||||
task :'benchmark' do
|
||||
dir = File.dirname(__FILE__) + '/benchmark'
|
||||
sh THRIFT, '--gen', 'rb', '-o', dir, "#{dir}/Benchmark.thrift"
|
||||
|
62
lib/rb/spec/flat_spec.rb
Normal file
62
lib/rb/spec/flat_spec.rb
Normal file
@ -0,0 +1,62 @@
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you 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.
|
||||
#
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'generation' do
|
||||
before do
|
||||
require 'namespaced_nonblocking_service'
|
||||
end
|
||||
|
||||
it "did not generate the wrong files" do
|
||||
prefix = File.expand_path("../gen-rb/flat", __FILE__)
|
||||
["namespaced_spec_namespace/namespaced_nonblocking_service.rb",
|
||||
"namespaced_spec_namespace/thrift_namespaced_spec_constants.rb",
|
||||
"namespaced_spec_namespace/thrift_namespaced_spec_types.rb",
|
||||
"other_namespace/referenced_constants.rb",
|
||||
"other_namespace/referenced_types.rb"
|
||||
].each do |name|
|
||||
File.exist?(File.join(prefix, name)).should_not be_true
|
||||
end
|
||||
end
|
||||
|
||||
it "generated the right files" do
|
||||
prefix = File.expand_path("../gen-rb/flat", __FILE__)
|
||||
["namespaced_nonblocking_service.rb",
|
||||
"thrift_namespaced_spec_constants.rb",
|
||||
"thrift_namespaced_spec_types.rb",
|
||||
"referenced_constants.rb",
|
||||
"referenced_types.rb"
|
||||
].each do |name|
|
||||
File.exist?(File.join(prefix, name)).should be_true
|
||||
end
|
||||
end
|
||||
|
||||
it "has a service class in the right place" do
|
||||
defined?(NamespacedSpecNamespace::NamespacedNonblockingService).should be_true
|
||||
end
|
||||
|
||||
it "has a struct in the right place" do
|
||||
defined?(NamespacedSpecNamespace::Hello).should be_true
|
||||
end
|
||||
|
||||
it "required an included file" do
|
||||
defined?(OtherNamespace::SomeEnum).should be_true
|
||||
end
|
||||
end
|
@ -59,3 +59,6 @@ module Fixtures
|
||||
COMPACT_PROTOCOL_TEST_STRUCT.set_byte_map = nil
|
||||
COMPACT_PROTOCOL_TEST_STRUCT.map_byte_map = nil
|
||||
end
|
||||
|
||||
$:.unshift File.join(File.dirname(__FILE__), *%w[gen-rb/flat])
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user