mirror of
				https://github.com/fooflington/selfdefined.git
				synced 2025-11-03 23:29:03 +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
							 |