|  | require 'google/protobuf' | 
|  | require 'test/unit' | 
|  |  | 
|  | class BackendTest < Test::Unit::TestCase | 
|  | # Verifies the implementation of Protobuf is the preferred one. | 
|  | # See protobuf.rb for the logic that defines PREFER_FFI. | 
|  | def test_prefer_ffi_aligns_with_implementation | 
|  | expected = Google::Protobuf::PREFER_FFI ? :FFI : :NATIVE | 
|  | assert_equal expected, Google::Protobuf::IMPLEMENTATION | 
|  | end | 
|  |  | 
|  | def test_prefer_ffi | 
|  | unless ENV['PROTOCOL_BUFFERS_RUBY_IMPLEMENTATION'] =~ /ffi/i | 
|  | omit"FFI implementation requires environment variable PROTOCOL_BUFFERS_RUBY_IMPLEMENTATION=FFI to activate." | 
|  | end | 
|  | assert_equal true, Google::Protobuf::PREFER_FFI | 
|  | end | 
|  | def test_ffi_implementation | 
|  | unless ENV['PROTOCOL_BUFFERS_RUBY_IMPLEMENTATION'] =~ /ffi/i | 
|  | omit "FFI implementation requires environment variable PROTOCOL_BUFFERS_RUBY_IMPLEMENTATION=FFI to activate." | 
|  | end | 
|  | assert_equal :FFI, Google::Protobuf::IMPLEMENTATION | 
|  | end | 
|  |  | 
|  | def test_prefer_native | 
|  | if ENV.include?('PROTOCOL_BUFFERS_RUBY_IMPLEMENTATION') and ENV['PROTOCOL_BUFFERS_RUBY_IMPLEMENTATION'] !~ /native/i | 
|  | omit"Native implementation requires omitting environment variable PROTOCOL_BUFFERS_RUBY_IMPLEMENTATION or setting it to `NATIVE` to activate." | 
|  | end | 
|  | assert_equal false, Google::Protobuf::PREFER_FFI | 
|  | end | 
|  | def test_native_implementation | 
|  | if ENV.include?('PROTOCOL_BUFFERS_RUBY_IMPLEMENTATION') and ENV['PROTOCOL_BUFFERS_RUBY_IMPLEMENTATION'] !~ /native/i | 
|  | omit"Native implementation requires omitting environment variable PROTOCOL_BUFFERS_RUBY_IMPLEMENTATION or setting it to `NATIVE` to activate." | 
|  | end | 
|  | assert_equal :NATIVE, Google::Protobuf::IMPLEMENTATION | 
|  | end | 
|  | end |