# -*- encoding: utf-8 -*- require_relative '../../spec_helper' require_relative 'fixtures/classes' describe "String#ascii_only?" do describe "with ASCII only characters" do it "returns true if the encoding is UTF-8" do [ ["hello", true], ["hello".encode('UTF-8'), true], ["hello".force_encoding('UTF-8'), true], ].should be_computed_by(:ascii_only?) end it "returns true if the encoding is US-ASCII" do "hello".force_encoding(Encoding::US_ASCII).ascii_only?.should be_true "hello".encode(Encoding::US_ASCII).ascii_only?.should be_true end it "returns true for all single-character UTF-8 Strings" do 0.upto(127) do |n| n.chr.ascii_only?.should be_true end end end describe "with non-ASCII only characters" do it "returns false if the encoding is BINARY" do chr = 128.chr chr.encoding.should == Encoding::BINARY chr.ascii_only?.should be_false end it "returns false if the String contains any non-ASCII characters" do [ ["\u{6666}", false], ["hello, \u{6666}", false], ["\u{6666}".encode('UTF-8'), false], ["\u{6666}".force_encoding('UTF-8'), false], ].should be_computed_by(:ascii_only?) end it "returns false if the encoding is US-ASCII" do [ ["\u{6666}".force_encoding(Encoding::US_ASCII), false], ["hello, \u{6666}".force_encoding(Encoding::US_ASCII), false], ].should be_computed_by(:ascii_only?) end end it "returns true for the empty String with an ASCII-compatible encoding" do "".ascii_only?.should be_true "".encode('UTF-8').ascii_only?.should be_true end it "returns false for the empty String with a non-ASCII-compatible encoding" do "".force_encoding('UTF-16LE').ascii_only?.should be_false "".encode('UTF-16BE').ascii_only?.should be_false end it "returns false for a non-empty String with non-ASCII-compatible encoding" do "\x78\x00".force_encoding("UTF-16LE").ascii_only?.should be_false end it "returns false when interpolating non ascii strings" do base = "EU currency is" base.force_encoding(Encoding::US_ASCII) euro = "\u20AC" interp = "#{base} #{euro}" euro.ascii_only?.should be_false base.ascii_only?.should be_true interp.ascii_only?.should be_false end it "returns false after appending non ASCII characters to an empty String" do ("" << "λ").ascii_only?.should be_false end it "returns false when concatenating an ASCII and non-ASCII String" do "".concat("λ").ascii_only?.should be_false end it "returns false when replacing an ASCII String with a non-ASCII String" do "".replace("λ").ascii_only?.should be_false end end