119 lines
3.8 KiB
Ruby
119 lines
3.8 KiB
Ruby
# Copyright (c) HashiCorp, Inc.
|
|
# SPDX-License-Identifier: BUSL-1.1
|
|
|
|
require_relative "../base"
|
|
require Vagrant.source_root.join("plugins/providers/virtualbox/driver/base")
|
|
|
|
describe VagrantPlugins::ProviderVirtualBox::Driver::Base do
|
|
describe "#env_lang" do
|
|
context "when locale command is not available" do
|
|
before do
|
|
allow(Vagrant::Util::Which).to receive(:which).with("locale").and_return(false)
|
|
end
|
|
|
|
it "should return default value" do
|
|
expect(subject.send(:env_lang)).to eq({LANG: "C"})
|
|
end
|
|
end
|
|
|
|
context "when the locale command is available" do
|
|
let(:result) { Vagrant::Util::Subprocess::Result.new(exit_code, stdout, stderr) }
|
|
let(:stderr) { "" }
|
|
let(:stdout) { "C.default" }
|
|
let(:exit_code) { 0 }
|
|
|
|
before do
|
|
allow(Vagrant::Util::Which).to receive(:which).with("locale").and_return(true)
|
|
allow(Vagrant::Util::Subprocess).to receive(:execute).with("locale", "-a").and_return(result)
|
|
end
|
|
|
|
context "when locale command errors" do
|
|
let(:exit_code) { 1 }
|
|
|
|
it "should return default value" do
|
|
expect(subject.send(:env_lang)).to eq({LANG: "C"})
|
|
end
|
|
end
|
|
|
|
context "when locale command does not error" do
|
|
let(:exit_code) { 0 }
|
|
let(:base) { "de_AT.utf8\nde_BE.utf8\nde_CH.utf8\nde_DE.utf8\nde_IT.utf8\nde_LI.utf8\nde_LU.utf8\nen_AG\nen_AG.utf8\nen_AU.utf8\nen_BW.utf8\nen_CA.utf8\nen_DK.utf8\nen_GB.utf8\nen_HK.utf8\nen_IE.utf8\nen_IL\nen_IL.utf8\nen_IN\nen_IN.utf8\nen_NG\n" }
|
|
|
|
context "when stdout includes C" do
|
|
let(:stdout) { "#{base}C\n" }
|
|
|
|
it "should use C for the lang" do
|
|
expect(subject.send(:env_lang)).to eq({LANG: "C"})
|
|
end
|
|
|
|
context "when stdout includes UTF-8 variants of C" do
|
|
let(:stdout) { "#{base}C\nC.UTF-8" }
|
|
|
|
it "should use the UTF-8 variant" do
|
|
expect(subject.send(:env_lang)).to eq({LANG: "C.UTF-8"})
|
|
end
|
|
end
|
|
|
|
context "when stdout includes utf8 variants of C" do
|
|
let(:stdout) { "#{base}C\nC.utf8" }
|
|
|
|
it "should use the utf8 variant" do
|
|
expect(subject.send(:env_lang)).to eq({LANG: "C.utf8"})
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when stdout does not include C" do
|
|
context "when stdout includes C.UTF-8" do
|
|
let(:stdout) { "#{base}C.UTF-8\n"}
|
|
|
|
it "should use C.UTF-8 for the lang" do
|
|
expect(subject.send(:env_lang)).to eq({LANG: "C.UTF-8"})
|
|
end
|
|
end
|
|
|
|
context "when stdout includes C.utf8" do
|
|
let(:stdout) { "#{base}C.utf8\n"}
|
|
|
|
it "should use C.utf8 for the lang" do
|
|
expect(subject.send(:env_lang)).to eq({LANG: "C.utf8"})
|
|
end
|
|
end
|
|
|
|
context "when stdout includes POSIX" do
|
|
let(:stdout) { "#{base}POSIX\n"}
|
|
|
|
it "should use POSIX for the lang" do
|
|
expect(subject.send(:env_lang)).to eq({LANG: "POSIX"})
|
|
end
|
|
end
|
|
|
|
context "when stdout includes en_US.UTF-8" do
|
|
let(:stdout) { "#{base}en_US.UTF-8\n"}
|
|
|
|
it "should use en_US.UTF-8 for the lang" do
|
|
expect(subject.send(:env_lang)).to eq({LANG: "en_US.UTF-8"})
|
|
end
|
|
end
|
|
|
|
context "when stdout includes en_US.utf8" do
|
|
let(:stdout) { "#{base}en_US.utf8\n"}
|
|
|
|
it "should use en_US.utf8 for the lang" do
|
|
expect(subject.send(:env_lang)).to eq({LANG: "en_US.utf8"})
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when stdout does not include any variations" do
|
|
let(:stdout) { base }
|
|
|
|
it "should default to C" do
|
|
expect(subject.send(:env_lang)).to eq({LANG: "C"})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|