mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	This gives us a consistent test framework across all Ruby versions which should help avoid errors that are only found when CI runs the tests on different Rubies. (And this fixes an immediate bug where there's no `skip` method in the version of test-unit we're currently using only on Ruby 2.2.)
		
			
				
	
	
		
			507 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			507 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require_relative "./helper"
 | |
| 
 | |
| class TestBlob < Minitest::Test
 | |
|   include Linguist
 | |
| 
 | |
|   def setup
 | |
|     # git blobs are normally loaded as ASCII-8BIT since they may contain data
 | |
|     # with arbitrary encoding not known ahead of time
 | |
|     @original_external = Encoding.default_external
 | |
|     Encoding.default_external = Encoding.find("ASCII-8BIT")
 | |
|   end
 | |
| 
 | |
|   def teardown
 | |
|     Encoding.default_external = @original_external
 | |
|   end
 | |
| 
 | |
|   def samples_path
 | |
|     File.expand_path("../../samples", __FILE__)
 | |
|   end
 | |
| 
 | |
|   def fixtures_path
 | |
|     File.expand_path("../fixtures", __FILE__)
 | |
|   end
 | |
| 
 | |
|   def sample_blob(name)
 | |
|     name = File.join(samples_path, name) unless name =~ /^\//
 | |
|     FileBlob.new(name, samples_path)
 | |
|   end
 | |
| 
 | |
|   def fixture_blob(name)
 | |
|     name = File.join(fixtures_path, name) unless name =~ /^\//
 | |
|     FileBlob.new(name, fixtures_path)
 | |
|   end
 | |
| 
 | |
|   def script_blob(name)
 | |
|     blob = sample_blob(name)
 | |
|     blob.instance_variable_set(:@name, 'script')
 | |
|     blob
 | |
|   end
 | |
| 
 | |
|   def test_name
 | |
|     assert_equal "foo.rb", sample_blob("foo.rb").name
 | |
|   end
 | |
| 
 | |
|   def test_mime_type
 | |
|     assert_equal "application/postscript", fixture_blob("Binary/octocat.ai").mime_type
 | |
|     assert_equal "application/x-ruby", sample_blob("Ruby/grit.rb").mime_type
 | |
|     assert_equal "application/x-sh", sample_blob("Shell/script.sh").mime_type
 | |
|     assert_equal "application/xml", sample_blob("XML/bar.xml").mime_type
 | |
|     assert_equal "audio/ogg", fixture_blob("Binary/foo.ogg").mime_type
 | |
|     assert_equal "text/plain", fixture_blob("Data/README").mime_type
 | |
|   end
 | |
| 
 | |
|   def test_content_type
 | |
|     assert_equal "application/pdf", fixture_blob("Binary/foo.pdf").content_type
 | |
|     assert_equal "audio/ogg", fixture_blob("Binary/foo.ogg").content_type
 | |
|     assert_equal "image/png", fixture_blob("Binary/foo.png").content_type
 | |
|     assert_equal "text/plain; charset=iso-8859-2", fixture_blob("Data/README").content_type
 | |
|   end
 | |
| 
 | |
|   def test_disposition
 | |
|     assert_equal "attachment; filename=foo+bar.jar", fixture_blob("Binary/foo bar.jar").disposition
 | |
|     assert_equal "attachment; filename=foo.bin", fixture_blob("Binary/foo.bin").disposition
 | |
|     assert_equal "attachment; filename=linguist.gem", fixture_blob("Binary/linguist.gem").disposition
 | |
|     assert_equal "attachment; filename=octocat.ai", fixture_blob("Binary/octocat.ai").disposition
 | |
|     assert_equal "inline", fixture_blob("Data/README").disposition
 | |
|     assert_equal "inline", sample_blob("Text/foo.txt").disposition
 | |
|     assert_equal "inline", sample_blob("Ruby/grit.rb").disposition
 | |
|     assert_equal "inline", fixture_blob("Binary/octocat.png").disposition
 | |
|   end
 | |
| 
 | |
|   def test_data
 | |
|     assert_equal "module Foo\nend\n", sample_blob("Ruby/foo.rb").data
 | |
|   end
 | |
| 
 | |
|   def test_lines
 | |
|     assert_equal ["module Foo", "end", ""], sample_blob("Ruby/foo.rb").lines
 | |
|     assert_equal ["line 1", "line 2", ""], sample_blob("Text/mac.txt").lines
 | |
|     assert_equal 475, sample_blob("Emacs Lisp/ess-julia.el").lines.length
 | |
|   end
 | |
| 
 | |
|   def test_lines_maintains_original_encoding
 | |
|     # Even if the file's encoding is detected as something like UTF-16LE,
 | |
|     # earlier versions of the gem made implicit guarantees that the encoding of
 | |
|     # each `line` is in the same encoding as the file was originally read (in
 | |
|     # practice, UTF-8 or ASCII-8BIT)
 | |
|     assert_equal Encoding.default_external, fixture_blob("Data/utf16le").lines.first.encoding
 | |
|   end
 | |
| 
 | |
|   def test_size
 | |
|     assert_equal 15, sample_blob("Ruby/foo.rb").size
 | |
|   end
 | |
| 
 | |
|   def test_loc
 | |
|     assert_equal 3, sample_blob("Ruby/foo.rb").loc
 | |
|   end
 | |
| 
 | |
|   def test_sloc
 | |
|     assert_equal 2, sample_blob("Ruby/foo.rb").sloc
 | |
|     assert_equal 3, fixture_blob("Data/utf16le-windows").sloc
 | |
|     assert_equal 1, fixture_blob("Data/iso8859-8-i").sloc
 | |
|   end
 | |
| 
 | |
|   def test_encoding
 | |
|     assert_equal "ISO-8859-2", fixture_blob("Data/README").encoding
 | |
|     assert_equal "ISO-8859-2", fixture_blob("Data/README").ruby_encoding
 | |
|     assert_equal "UTF-8", sample_blob("Text/foo.txt").encoding
 | |
|     assert_equal "UTF-8", sample_blob("Text/foo.txt").ruby_encoding
 | |
|     assert_equal "UTF-16LE", fixture_blob("Data/utf16le").encoding
 | |
|     assert_equal "UTF-16LE", fixture_blob("Data/utf16le").ruby_encoding
 | |
|     assert_equal "UTF-16LE", fixture_blob("Data/utf16le-windows").encoding
 | |
|     assert_equal "UTF-16LE", fixture_blob("Data/utf16le-windows").ruby_encoding
 | |
|     assert_equal "ISO-2022-KR", sample_blob("Text/ISO-2022-KR.txt").encoding
 | |
|     assert_equal "binary", sample_blob("Text/ISO-2022-KR.txt").ruby_encoding
 | |
|     assert_nil fixture_blob("Binary/dog.o").encoding
 | |
|   end
 | |
| 
 | |
|   def test_binary
 | |
|     # Large blobs aren't loaded
 | |
|     large_blob = sample_blob("git.exe")
 | |
|     large_blob.instance_eval do
 | |
|       def data; end
 | |
|     end
 | |
|     assert large_blob.binary?
 | |
| 
 | |
|     assert fixture_blob("Binary/git.deb").binary?
 | |
|     assert fixture_blob("Binary/git.exe").binary?
 | |
|     assert fixture_blob("Binary/hello.pbc").binary?
 | |
|     assert fixture_blob("Binary/linguist.gem").binary?
 | |
|     assert fixture_blob("Binary/octocat.ai").binary?
 | |
|     assert fixture_blob("Binary/octocat.png").binary?
 | |
|     assert fixture_blob("Binary/zip").binary?
 | |
|     assert !fixture_blob("Data/README").binary?
 | |
|     assert !sample_blob("Ruby/foo.rb").binary?
 | |
|     assert !sample_blob("Perl/script.pl").binary?
 | |
|   end
 | |
| 
 | |
|   def test_all_binary
 | |
|     Samples.each do |sample|
 | |
|       blob = sample_blob(sample[:path])
 | |
|       assert ! (blob.likely_binary? || blob.binary?), "#{sample[:path]} is a binary file"
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def test_text
 | |
|     assert fixture_blob("Data/README").text?
 | |
|     assert fixture_blob("Data/md").text?
 | |
|     assert sample_blob("Shell/script.sh").text?
 | |
|     assert fixture_blob("Data/txt").text?
 | |
|   end
 | |
| 
 | |
|   def test_image
 | |
|     assert fixture_blob("Binary/octocat.gif").image?
 | |
|     assert fixture_blob("Binary/octocat.jpeg").image?
 | |
|     assert fixture_blob("Binary/octocat.jpg").image?
 | |
|     assert fixture_blob("Binary/octocat.png").image?
 | |
|     assert !fixture_blob("Binary/octocat.ai").image?
 | |
|     assert !fixture_blob("Binary/octocat.psd").image?
 | |
|   end
 | |
| 
 | |
|   def test_solid
 | |
|     assert fixture_blob("Binary/cube.stl").solid?
 | |
|     assert fixture_blob("Data/cube.stl").solid?
 | |
|   end
 | |
| 
 | |
|   def test_csv
 | |
|     assert fixture_blob("Data/cars.csv").csv?
 | |
|   end
 | |
| 
 | |
|   def test_pdf
 | |
|     assert fixture_blob("Binary/foo.pdf").pdf?
 | |
|   end
 | |
| 
 | |
|   def test_viewable
 | |
|     assert fixture_blob("Data/README").viewable?
 | |
|     assert sample_blob("Ruby/foo.rb").viewable?
 | |
|     assert sample_blob("Perl/script.pl").viewable?
 | |
|     assert !fixture_blob("Binary/linguist.gem").viewable?
 | |
|     assert !fixture_blob("Binary/octocat.ai").viewable?
 | |
|     assert !fixture_blob("Binary/octocat.png").viewable?
 | |
|   end
 | |
| 
 | |
|   def test_generated
 | |
|     assert !fixture_blob("Data/README").generated?
 | |
| 
 | |
|     # Xcode project files
 | |
|     assert !sample_blob("XML/MainMenu.xib").generated?
 | |
|     assert fixture_blob("Binary/MainMenu.nib").generated?
 | |
|     assert !sample_blob("XML/project.pbxproj").generated?
 | |
| 
 | |
|     # Gemfile.lock is NOT generated
 | |
|     assert !sample_blob("Gemfile.lock").generated?
 | |
| 
 | |
|     # Generated .NET Docfiles
 | |
|     assert sample_blob("XML/net_docfile.xml").generated?
 | |
| 
 | |
|     # Long line
 | |
|     assert !sample_blob("JavaScript/uglify.js").generated?
 | |
| 
 | |
|     # Inlined JS, but mostly code
 | |
|     assert !sample_blob("JavaScript/json2_backbone.js").generated?
 | |
| 
 | |
|     # Minified JS
 | |
|     assert !sample_blob("JavaScript/jquery-1.6.1.js").generated?
 | |
|     assert sample_blob("JavaScript/jquery-1.6.1.min.js").generated?
 | |
|     assert sample_blob("JavaScript/jquery-1.4.2.min.js").generated?
 | |
| 
 | |
|     # CoffeeScript-generated JS
 | |
|     # TODO
 | |
| 
 | |
|     # TypeScript-generated JS
 | |
|     # TODO
 | |
| 
 | |
|     # Composer generated composer.lock file
 | |
|     assert sample_blob("JSON/composer.lock").generated?
 | |
| 
 | |
|     # PEG.js-generated parsers
 | |
|     assert sample_blob("JavaScript/parser.js").generated?
 | |
| 
 | |
|     # Generated PostScript
 | |
|     assert !sample_blob("PostScript/sierpinski.ps").generated?
 | |
| 
 | |
|     # These examples are too basic to tell
 | |
|     assert !sample_blob("JavaScript/hello.js").generated?
 | |
| 
 | |
|     assert sample_blob("JavaScript/intro-old.js").generated?
 | |
|     assert sample_blob("JavaScript/classes-old.js").generated?
 | |
| 
 | |
|     assert sample_blob("JavaScript/intro.js").generated?
 | |
|     assert sample_blob("JavaScript/classes.js").generated?
 | |
| 
 | |
|     # Protocol Buffer generated code
 | |
|     assert sample_blob("C++/protocol-buffer.pb.h").generated?
 | |
|     assert sample_blob("C++/protocol-buffer.pb.cc").generated?
 | |
|     assert sample_blob("Java/ProtocolBuffer.java").generated?
 | |
|     assert sample_blob("Python/protocol_buffer_pb2.py").generated?
 | |
| 
 | |
|     # Generated JNI
 | |
|     assert sample_blob("C/jni_layer.h").generated?
 | |
| 
 | |
|     # Minified CSS
 | |
|     assert !sample_blob("CSS/bootstrap.css").generated?
 | |
|     assert sample_blob("CSS/bootstrap.min.css").generated?
 | |
| 
 | |
|     # Generated VCR
 | |
|     assert sample_blob("YAML/vcr_cassette.yml").generated?
 | |
| 
 | |
|     # Generated by Zephir
 | |
|     assert sample_blob("Zephir/filenames/exception.zep.c").generated?
 | |
|     assert sample_blob("Zephir/filenames/exception.zep.h").generated?
 | |
|     assert sample_blob("Zephir/filenames/exception.zep.php").generated?
 | |
|     assert !sample_blob("Zephir/Router.zep").generated?
 | |
| 
 | |
| 
 | |
|     assert Linguist::Generated.generated?("node_modules/grunt/lib/grunt.js", nil)
 | |
| 
 | |
|     # Godep saved dependencies
 | |
|     assert sample_blob("Godeps/Godeps.json").generated?
 | |
|     assert sample_blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").generated?
 | |
|   end
 | |
| 
 | |
|   def test_vendored
 | |
|     assert !fixture_blob("Data/README").vendored?
 | |
|     assert !sample_blob("ext/extconf.rb").vendored?
 | |
| 
 | |
|     # Dependencies
 | |
|     assert sample_blob("dependencies/windows/headers/GL/glext.h").vendored?
 | |
| 
 | |
|     # Node dependencies
 | |
|     assert sample_blob("node_modules/coffee-script/lib/coffee-script.js").vendored?
 | |
| 
 | |
|     # Bower Components
 | |
|     assert sample_blob("bower_components/custom/custom.js").vendored?
 | |
|     assert sample_blob("app/bower_components/custom/custom.js").vendored?
 | |
|     assert sample_blob("vendor/assets/bower_components/custom/custom.js").vendored?
 | |
| 
 | |
|     # Go dependencies
 | |
|     assert !sample_blob("Godeps/Godeps.json").vendored?
 | |
|     assert sample_blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").vendored?
 | |
| 
 | |
|     # Rails vendor/
 | |
|     assert sample_blob("vendor/plugins/will_paginate/lib/will_paginate.rb").vendored?
 | |
| 
 | |
|     # 'thirdparty' directory
 | |
|     assert sample_blob("thirdparty/lib/main.c").vendored?
 | |
| 
 | |
|     # 'extern(al)' directory
 | |
|     assert sample_blob("extern/util/__init__.py").vendored?
 | |
|     assert sample_blob("external/jquery.min.js").vendored?
 | |
| 
 | |
|     # C deps
 | |
|     assert sample_blob("deps/http_parser/http_parser.c").vendored?
 | |
|     assert sample_blob("deps/v8/src/v8.h").vendored?
 | |
| 
 | |
|     # Chart.js
 | |
|     assert sample_blob("some/vendored/path/Chart.js").vendored?
 | |
|     assert !sample_blob("some/vendored/path/chart.js").vendored?
 | |
| 
 | |
|     # Codemirror deps
 | |
|     assert sample_blob("codemirror/mode/blah.js").vendored?
 | |
| 
 | |
|     # Debian packaging
 | |
|     assert sample_blob("debian/cron.d").vendored?
 | |
| 
 | |
|     # Minified JavaScript and CSS
 | |
|     assert sample_blob("foo.min.js").vendored?
 | |
|     assert sample_blob("foo.min.css").vendored?
 | |
|     assert sample_blob("foo-min.js").vendored?
 | |
|     assert sample_blob("foo-min.css").vendored?
 | |
|     assert !sample_blob("foomin.css").vendored?
 | |
|     assert !sample_blob("foo.min.txt").vendored?
 | |
| 
 | |
|     # Prototype
 | |
|     assert !sample_blob("public/javascripts/application.js").vendored?
 | |
|     assert sample_blob("public/javascripts/prototype.js").vendored?
 | |
|     assert sample_blob("public/javascripts/effects.js").vendored?
 | |
|     assert sample_blob("public/javascripts/controls.js").vendored?
 | |
|     assert sample_blob("public/javascripts/dragdrop.js").vendored?
 | |
| 
 | |
|     # jQuery
 | |
|     assert sample_blob("jquery.js").vendored?
 | |
|     assert sample_blob("public/javascripts/jquery.js").vendored?
 | |
|     assert sample_blob("public/javascripts/jquery.min.js").vendored?
 | |
|     assert sample_blob("public/javascripts/jquery-1.7.js").vendored?
 | |
|     assert sample_blob("public/javascripts/jquery-1.7.min.js").vendored?
 | |
|     assert sample_blob("public/javascripts/jquery-1.5.2.js").vendored?
 | |
|     assert sample_blob("public/javascripts/jquery-1.6.1.js").vendored?
 | |
|     assert sample_blob("public/javascripts/jquery-1.6.1.min.js").vendored?
 | |
|     assert sample_blob("public/javascripts/jquery-1.10.1.js").vendored?
 | |
|     assert sample_blob("public/javascripts/jquery-1.10.1.min.js").vendored?
 | |
|     assert !sample_blob("public/javascripts/jquery.github.menu.js").vendored?
 | |
| 
 | |
|     # jQuery UI
 | |
|     assert sample_blob("themes/ui-lightness/jquery-ui.css").vendored?
 | |
|     assert sample_blob("themes/ui-lightness/jquery-ui-1.8.22.custom.css").vendored?
 | |
|     assert sample_blob("themes/ui-lightness/jquery.ui.accordion.css").vendored?
 | |
|     assert sample_blob("ui/i18n/jquery.ui.datepicker-ar.js").vendored?
 | |
|     assert sample_blob("ui/i18n/jquery-ui-i18n.js").vendored?
 | |
|     assert sample_blob("ui/jquery.effects.blind.js").vendored?
 | |
|     assert sample_blob("ui/jquery-ui-1.8.22.custom.js").vendored?
 | |
|     assert sample_blob("ui/jquery-ui-1.8.22.custom.min.js").vendored?
 | |
|     assert sample_blob("ui/jquery-ui-1.8.22.js").vendored?
 | |
|     assert sample_blob("ui/jquery-ui-1.8.js").vendored?
 | |
|     assert sample_blob("ui/jquery-ui.min.js").vendored?
 | |
|     assert sample_blob("ui/jquery.ui.accordion.js").vendored?
 | |
|     assert sample_blob("ui/minified/jquery.effects.blind.min.js").vendored?
 | |
|     assert sample_blob("ui/minified/jquery.ui.accordion.min.js").vendored?
 | |
| 
 | |
|     # MooTools
 | |
|     assert sample_blob("public/javascripts/mootools-core-1.3.2-full-compat.js").vendored?
 | |
|     assert sample_blob("public/javascripts/mootools-core-1.3.2-full-compat-yc.js").vendored?
 | |
| 
 | |
|     # Dojo
 | |
|     assert sample_blob("public/javascripts/dojo.js").vendored?
 | |
| 
 | |
|     # MochiKit
 | |
|     assert sample_blob("public/javascripts/MochiKit.js").vendored?
 | |
| 
 | |
|     # YUI
 | |
|     assert sample_blob("public/javascripts/yahoo-dom-event.js").vendored?
 | |
|     assert sample_blob("public/javascripts/yahoo-min.js").vendored?
 | |
|     assert sample_blob("public/javascripts/yuiloader-dom-event.js").vendored?
 | |
| 
 | |
|     # WYS editors
 | |
|     assert sample_blob("public/javascripts/ckeditor.js").vendored?
 | |
|     assert sample_blob("public/javascripts/tiny_mce.js").vendored?
 | |
|     assert sample_blob("public/javascripts/tiny_mce_popup.js").vendored?
 | |
|     assert sample_blob("public/javascripts/tiny_mce_src.js").vendored?
 | |
| 
 | |
|     # AngularJS
 | |
|     assert sample_blob("public/javascripts/angular.js").vendored?
 | |
|     assert sample_blob("public/javascripts/angular.min.js").vendored?
 | |
| 
 | |
|     # D3.js
 | |
|     assert sample_blob("public/javascripts/d3.v3.js").vendored?
 | |
|     assert sample_blob("public/javascripts/d3.v3.min.js").vendored?
 | |
| 
 | |
|     # Modernizr
 | |
|     assert sample_blob("public/javascripts/modernizr-2.7.1.js").vendored?
 | |
|     assert sample_blob("public/javascripts/modernizr.custom.01009.js").vendored?
 | |
| 
 | |
|     # Fabric
 | |
|     assert sample_blob("fabfile.py").vendored?
 | |
| 
 | |
|     # WAF
 | |
|     assert sample_blob("waf").vendored?
 | |
| 
 | |
|     # Visual Studio IntelliSense
 | |
|     assert sample_blob("Scripts/jquery-1.7-vsdoc.js").vendored?
 | |
| 
 | |
|     # Microsoft Ajax
 | |
|     assert sample_blob("Scripts/MicrosoftAjax.debug.js").vendored?
 | |
|     assert sample_blob("Scripts/MicrosoftAjax.js").vendored?
 | |
|     assert sample_blob("Scripts/MicrosoftMvcAjax.debug.js").vendored?
 | |
|     assert sample_blob("Scripts/MicrosoftMvcAjax.js").vendored?
 | |
|     assert sample_blob("Scripts/MicrosoftMvcValidation.debug.js").vendored?
 | |
|     assert sample_blob("Scripts/MicrosoftMvcValidation.js").vendored?
 | |
| 
 | |
|     # jQuery validation plugin (MS bundles this with asp.net mvc)
 | |
|     assert sample_blob("Scripts/jquery.validate.js").vendored?
 | |
|     assert sample_blob("Scripts/jquery.validate.min.js").vendored?
 | |
|     assert sample_blob("Scripts/jquery.validate.unobtrusive.js").vendored?
 | |
|     assert sample_blob("Scripts/jquery.validate.unobtrusive.min.js").vendored?
 | |
|     assert sample_blob("Scripts/jquery.unobtrusive-ajax.js").vendored?
 | |
|     assert sample_blob("Scripts/jquery.unobtrusive-ajax.min.js").vendored?
 | |
| 
 | |
|     # NuGet Packages
 | |
|     assert sample_blob("packages/Modernizr.2.0.6/Content/Scripts/modernizr-2.0.6-development-only.js").vendored?
 | |
| 
 | |
|     # Font Awesome
 | |
|     assert sample_blob("some/asset/path/font-awesome.min.css").vendored?
 | |
|     assert sample_blob("some/asset/path/font-awesome.css").vendored?
 | |
| 
 | |
|     # Normalize
 | |
|     assert sample_blob("some/asset/path/normalize.css").vendored?
 | |
| 
 | |
|     # Cocoapods
 | |
|     assert sample_blob('Pods/blah').vendored?
 | |
| 
 | |
|     # Html5shiv
 | |
|     assert sample_blob("Scripts/html5shiv.js").vendored?
 | |
|     assert sample_blob("Scripts/html5shiv.min.js").vendored?
 | |
| 
 | |
|     # Test fixtures
 | |
|     assert sample_blob("test/fixtures/random.rkt").vendored?
 | |
|     assert sample_blob("Test/fixtures/random.rkt").vendored?
 | |
| 
 | |
|     # Cordova/PhoneGap
 | |
|     assert sample_blob("cordova.js").vendored?
 | |
|     assert sample_blob("cordova.min.js").vendored?
 | |
|     assert sample_blob("cordova-2.1.0.js").vendored?
 | |
|     assert sample_blob("cordova-2.1.0.min.js").vendored?
 | |
| 
 | |
|     # Foundation js
 | |
|     assert sample_blob("foundation.js").vendored?
 | |
|     assert sample_blob("foundation.min.js").vendored?
 | |
|     assert sample_blob("foundation.abide.js").vendored?
 | |
| 
 | |
|     # Vagrant
 | |
|     assert sample_blob("Vagrantfile").vendored?
 | |
| 
 | |
|     # Gradle
 | |
|     assert sample_blob("gradlew").vendored?
 | |
|     assert sample_blob("gradlew.bat").vendored?
 | |
|     assert sample_blob("gradle/wrapper/gradle-wrapper.properties").vendored?
 | |
|     assert sample_blob("subproject/gradlew").vendored?
 | |
|     assert sample_blob("subproject/gradlew.bat").vendored?
 | |
|     assert sample_blob("subproject/gradle/wrapper/gradle-wrapper.properties").vendored?
 | |
| 
 | |
|     # Octicons
 | |
|     assert sample_blob("octicons.css").vendored?
 | |
|     assert sample_blob("public/octicons.min.css").vendored?
 | |
|     assert sample_blob("public/octicons/sprockets-octicons.scss").vendored?
 | |
| 
 | |
|     # Typesafe Activator
 | |
|     assert sample_blob("activator").vendored?
 | |
|     assert sample_blob("activator.bat").vendored?
 | |
|     assert sample_blob("subproject/activator").vendored?
 | |
|     assert sample_blob("subproject/activator.bat").vendored?
 | |
|   end
 | |
| 
 | |
|   def test_language
 | |
|     Samples.each do |sample|
 | |
|       blob = sample_blob(sample[:path])
 | |
|       assert blob.language, "No language for #{sample[:path]}"
 | |
|       assert_equal sample[:language], blob.language.name, blob.name
 | |
|     end
 | |
| 
 | |
|     # Test language detection for files which shouldn't be used as samples
 | |
|     root = File.expand_path('../fixtures', __FILE__)
 | |
|     Dir.entries(root).each do |language|
 | |
|       next if language == '.' || language == '..' || language == 'Binary' ||
 | |
|               File.basename(language) == 'ace_modes.json'
 | |
| 
 | |
|       # Each directory contains test files of a language
 | |
|       dirname = File.join(root, language)
 | |
|       Dir.entries(dirname).each do |filename|
 | |
|         # By default blob search the file in the samples;
 | |
|         # thus, we need to give it the absolute path
 | |
|         filepath = File.join(dirname, filename)
 | |
|         next unless File.file?(filepath)
 | |
| 
 | |
|         blob = fixture_blob(filepath)
 | |
|         if language == 'Data'
 | |
|           assert blob.language.nil?, "A language was found for #{filepath}"
 | |
|         else
 | |
|           assert blob.language, "No language for #{filepath}"
 | |
|           assert_equal language, blob.language.name, blob.name
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def test_minified_files_not_safe_to_highlight
 | |
|     assert !sample_blob("JavaScript/jquery-1.6.1.min.js").safe_to_colorize?
 | |
|   end
 | |
| 
 | |
|   def test_empty
 | |
|     blob = Struct.new(:data) { include Linguist::BlobHelper }
 | |
| 
 | |
|     assert blob.new("").empty?
 | |
|     assert blob.new(nil).empty?
 | |
|     refute blob.new(" ").empty?
 | |
|     refute blob.new("nope").empty?
 | |
|   end
 | |
| end
 |