mirror of
				https://github.com/fooflington/selfdefined.git
				synced 2025-10-31 14:18:32 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			330 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			330 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
 | |
| describe 'haml'
 | |
|   describe '.version'
 | |
|     it 'should be a triplet'
 | |
|       haml.version.should.match(/^\d+\.\d+\.\d+$/)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '.compile()'
 | |
|     it 'should return a function'
 | |
|       var fn = haml.compile('%foo= bar');
 | |
|       fn({ bar: 'baz' }).should.equal '\n<foo>baz</foo>'
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe 'Parser'
 | |
|     it 'should be available for extension'
 | |
|       haml.Parser.should.not.be_undefined
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '.render()'
 | |
|     before
 | |
|       assertAs = function(name, type, options) {
 | |
|         var str = fixture(name + '.haml')
 | |
|         try {
 | |
|           var html = haml.render(str, options).trim(),
 | |
|               expected = fixture(name + '.' + type).trim()
 | |
|           if (html === expected)
 | |
|             pass()
 | |
|           else
 | |
|             fail('got:\n' + html + '\n\nexpected:\n' + expected)
 | |
|         } catch (err) {
 | |
|           if (err instanceof haml.HamlError) {
 | |
|             throw err
 | |
|           } else {
 | |
|             fail('\n:' + err.stack + '\n')
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|       assert = function(name, options) {
 | |
|         assertAs(name, 'html', options, 'CRLF', '\r\n')
 | |
|       }
 | |
|       assertXML = function(name, options) {
 | |
|         assertAs(name, 'xml', options, 'CRLF', '\r\n')
 | |
|       }
 | |
|     end
 | |
|     
 | |
|     it 'should allow passing of a context object'
 | |
|       assert('context', { context: 'yay' })
 | |
|     end
 | |
|     
 | |
|     it 'should allow passing of literals'
 | |
|       assert('literals', { locals: { user: 'tj' }})
 | |
|     end
 | |
|     
 | |
|     it 'should not fail on trailing indents'
 | |
|       assert('trailing-indent')
 | |
|     end
 | |
|     
 | |
|     it 'should add xml support via the "xml" option'
 | |
|       assertXML('feed', { xml: true })
 | |
|     end
 | |
|     
 | |
|     it 'should support xml namespaces'
 | |
|       assertXML('namespace')
 | |
|     end
 | |
|     
 | |
|     it 'should utilize "filename" option when an error is thrown'
 | |
|       try { assert('error', { filename: 'error.haml' }) }
 | |
|       catch (err) {
 | |
|         err.message.should.eql '(error.haml):3 invalid indentation; got 3, when previous was 1'
 | |
|       }
 | |
|     end
 | |
|     
 | |
|     it 'should default filename to "Haml" when an error is thrown'
 | |
|       try { assert('error') }
 | |
|       catch (err) {
 | |
|         err.message.should.eql '(Haml):3 invalid indentation; got 3, when previous was 1'
 | |
|       }
 | |
|     end
 | |
|     
 | |
|     it 'should bitch when "cache" is true without a filename given'
 | |
|       // -{ assert('tag.simple', { cache: true }) }.should.throw_error
 | |
|     end
 | |
|     
 | |
|     it 'should pre-compiled and cache when "cache" is true'
 | |
|       assert('tag.simple', { cache: true, filename: 'tag.simple.haml' })
 | |
|       assert('tag.simple', { cache: true, filename: 'tag.simple.haml' })
 | |
|     end
 | |
|     
 | |
|     it 'should support blank lines'
 | |
|       assert('newlines')
 | |
|     end
 | |
|     
 | |
|     describe '.class'
 | |
|       it 'should output a div with the given class'
 | |
|         assert('class')
 | |
|       end
 | |
|       
 | |
|       it 'should work with several classes'
 | |
|         assert('classes')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '#id'
 | |
|       it 'should output a div with the given id'
 | |
|         assert('id')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '%tag'
 | |
|       it 'should work with no text or block'
 | |
|         assert('tag.simple')
 | |
|       end
 | |
|       
 | |
|       it 'should work with text'
 | |
|         assert('tag.text')
 | |
|       end
 | |
|       
 | |
|       it 'should work with block text'
 | |
|         assert('tag.text.block')
 | |
|       end
 | |
|       
 | |
|       it 'should work with blocks of text and tags'
 | |
|         assert('tag.text.block.complex')
 | |
|       end
 | |
|       
 | |
|       it 'should work with many classes / ids / attrs'
 | |
|         assert('tag.complex')
 | |
|       end
 | |
|       
 | |
|       it 'should allow empty tags'
 | |
|         assert('tag.empty')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '%tag.class'
 | |
|       it 'should output tag with a class'
 | |
|         assert('tag.class')
 | |
|       end
 | |
|       
 | |
|       it 'should work with several classes'
 | |
|         assert('tag.classes')
 | |
|       end
 | |
|       
 | |
|       it 'should support self-closing tags'
 | |
|         assert('tag.self-close')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '%tag!='
 | |
|       it 'should output the evaluated code'
 | |
|         assert('tag.code')
 | |
|       end
 | |
|       
 | |
|       it 'should not escape output'
 | |
|         assert('tag.code.no-escape')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '%tag='
 | |
|       it 'should escape the evaluated code'
 | |
|         assert('tag.escape')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '%namespace:tag'
 | |
|       it 'should output a tag with a namespace prefix'
 | |
|         assert('namespace.tag')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '{...}'
 | |
|       it 'should be mapped as html attributes'
 | |
|         assert('tag.attrs')
 | |
|       end
 | |
|       
 | |
|       it 'should escape values'
 | |
|         assert('tag.attrs.escape')
 | |
|       end
 | |
|       
 | |
|       it 'should allow booleans'
 | |
|         assert('tag.attrs.bools')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '!!!'
 | |
|       it 'should default the doctype to 1.0 transitional'
 | |
|         assert('doctype')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '!!! NAME'
 | |
|       it 'should output a specific doctype'
 | |
|         assert('doctype.xml')
 | |
|       end
 | |
|       
 | |
|       it 'should be case-insensitive'
 | |
|         assert('doctype.xml.case')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe 'nesting'
 | |
|       it 'should work when nested downwards'
 | |
|         assert('nesting.simple')
 | |
|       end
 | |
|       
 | |
|       it 'should work when blocks outdent'
 | |
|         assert('nesting.complex')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '- code'
 | |
|       it 'should work with if statements'
 | |
|         assert('code.if')
 | |
|       end
 | |
|       
 | |
|       it 'should work when nested'
 | |
|         assert('code.nested')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '- each'
 | |
|       it 'should iterate'
 | |
|         assert('code.each', { locals: { items: ['one', 'two', 'three'] }})
 | |
|         assert('code.each.non-enumerable', { locals: { items: null }})
 | |
|       end
 | |
|       
 | |
|       it 'should iterate objects'
 | |
|         assert('code.each', { locals: { items: { 0: 'one', 1: 'two', 2: 'three' }}})
 | |
|         assert('code.each.index', { locals: { items: { 0: 'one', 1: 'two', 2: 'three' }}})
 | |
|       end
 | |
|       
 | |
|       it 'should iterate with index'
 | |
|         assert('code.each.index', { locals: { items: ['one', 'two', 'three'] }})
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '= code'
 | |
|       it 'should output evaluation'
 | |
|         assert('code')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '&= code'
 | |
|       it 'should output evaluation while escaping html entities'
 | |
|         assert('code.escape')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '<literal></html>'
 | |
|       it 'should remain intact'
 | |
|         assert('html')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '\\char'
 | |
|       it 'should escape the character'
 | |
|         assert('escape')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '-#'
 | |
|       it 'should become a silent comment'
 | |
|         assert('comment')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '/'
 | |
|       it 'should comment out tags'
 | |
|         assert('comment.tag')
 | |
|       end
 | |
|       
 | |
|       it 'should comment out blocks'
 | |
|         assert('comment.block')
 | |
|       end
 | |
|       
 | |
|       it 'should comment out text'
 | |
|         assert('comment.text')
 | |
|       end
 | |
|       
 | |
|       it 'should work in blocks'
 | |
|         assert('comment.text.complex')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe '/[]'
 | |
|       it 'should insert conditional comment blocks'
 | |
|         assert('comment.block.conditional')
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     describe ':filter'
 | |
|       describe 'plain'
 | |
|         it 'should ignore haml specific characters'
 | |
|           assert('filter.plain')
 | |
|         end
 | |
|       end
 | |
|     
 | |
|       describe 'cdata'
 | |
|         it 'should wrap with CDATA tags'
 | |
|           assert('filter.cdata')
 | |
|         end
 | |
|         
 | |
|         it 'should retain whitespace'
 | |
|           assert('filter.cdata.whitespace')
 | |
|         end
 | |
|       end
 | |
|       
 | |
|       describe 'javascript'
 | |
|         it 'should wrap with <script> and CDATA tags'
 | |
|           assert('filter.javascript')
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|     
 | |
|     describe 'bug fixes'
 | |
|       it '#8 code block'
 | |
|         assert('issue.#8', { locals: { items: ['foo', 'bar', 'baz'] }})
 | |
|       end
 | |
|       
 | |
|       it '#10 Attributes should not need quotes'
 | |
|         assert('issue.#10')
 | |
|       end
 | |
|     end
 | |
|     
 | |
|   end
 | |
| end
 | 
