Merge pull request #48 from leonsenft/improve-term-errors

Prevents exception for invalid dimension terms
diff --git a/lib/parser.dart b/lib/parser.dart
index 3dff61e..cd4f6c0 100644
--- a/lib/parser.dart
+++ b/lib/parser.dart
@@ -2475,7 +2475,7 @@
         break;
     }
 
-    return processDimension(t, value, _makeSpan(start));
+    return t != null ? processDimension(t, value, _makeSpan(start)) : null;
   }
 
   /** Process all dimension units. */
diff --git a/test/declaration_test.dart b/test/declaration_test.dart
index 733a198..af6fdef 100644
--- a/test/declaration_test.dart
+++ b/test/declaration_test.dart
@@ -69,6 +69,17 @@
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
   expect(prettyPrint(stylesheet), generated2);
+
+  // Regression test to ensure invalid percentages don't throw an exception and
+  // instead print a useful error message when not in checked mode.
+  var css = '''
+.foo {
+  width: Infinity%;
+}''';
+  stylesheet = parseCss(css, errors: errors..clear(), opts: simpleOptions);
+  expect(errors, isNotEmpty);
+  expect(errors.first.message, 'expected }, but found %');
+  expect(errors.first.span.text, '%');
 }
 
 /**