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:
jfarrell 2015-01-29 23:03:34 -05:00
parent 176c9261ed
commit 4e16718e99
4 changed files with 81 additions and 6 deletions

View File

@ -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";

View File

@ -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
View 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

View File

@ -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])