# encoding: utf-8 #-- # Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . #++ require File.dirname(__FILE__) + '/../../test_helper' class BlobsHelperTest < ActionView::TestCase def included_modules (class << self; self; end).send(:included_modules) end should "includes the RepostoriesHelper" do assert included_modules.include?(RepositoriesHelper) end should "includes the TreesHelper" do assert included_modules.include?(TreesHelper) end context "render_highlighted()" do should "html escape the line & add the proper class" do res = render_highlighted("puts ''", "foo.rb") assert res.include?(%Q{
puts '<foo>'
}), res end should "add line numbers" do res = render_highlighted("alert('moo')\nalert('moo')", "foo.js") assert res.include?(%Q{2} ), res end end context "too_big_to_render" do should "knows when a blob is too big to be rendered within reasonable time" do assert !too_big_to_render?(1.kilobyte) assert too_big_to_render?(350.kilobyte+1) end end context "ascii/binary detection" do should "know that a plain text file is fine" do assert textual?(blob_with_name("jack.txt", "all work and no play")) end should "know that text files are fine" do assert textual?(blob_with_name("foo.rb", "class Lulz; end")) assert textual?(blob_with_name("foo.py", "class Lulz: pass")) assert textual?(blob_with_name("foo.c", "void lulz()")) assert textual?(blob_with_name("foo.m", "[lulz isForTehLaffs:YES]")) end should "know that binary aren't textual" do assert !textual?(blob_with_name("foo.png", File.read(File.join(RAILS_ROOT, "public/images/rails.png")))) assert !textual?(blob_with_name("foo.gif", "GIF89a\v\x00\r\x00\xD5!\x00\xBD")) assert !textual?(blob_with_name("foo.exe", "rabuf\06si\000ezodniw")) assert !textual?(blob_with_name("foo", "a"*1024 + "\000")) assert image?(blob_with_name("foo.png")) assert image?(blob_with_name("foo.gif")) assert image?(blob_with_name("foo.jpg")) assert image?(blob_with_name("foo.jpeg")) assert !image?(blob_with_name("foo.exe")) end end context "highlightable?" do should "be highlightable if it's codeish" do assert highlightable?(blob_with_name("foo.rb")) assert highlightable?(blob_with_name("foo.c")) assert highlightable?(blob_with_name("foo.h")) assert highlightable?(blob_with_name("foo.py")) assert highlightable?(blob_with_name("foo.css")) end should "not be highlightable if there's not file name extension" do assert !highlightable?(blob_with_name("README")) end should "not be highlightable if it's a plaintext file" do assert !highlightable?(blob_with_name("info.txt")) assert !highlightable?(blob_with_name("info.textile")) end end def blob_with_name(name, data = "") repo = mock("grit repo") Grit::Blob.create(repo, {:name => name, :data => data}) end context "language highlightinh of a given filename" do should "return the name of a known file type" do assert_equal "list", language_of_file("foo.lisp") assert_equal "css", language_of_file("foo.css") assert_equal "lua", language_of_file("foo.lua") end should "return nil if the filename can't be highlighted" do assert_nil language_of_file("foo.bar") end end end