| /* |
| * Copyright (C) 2011 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.tools.lint.checks; |
| |
| import static com.android.tools.lint.checks.TypographyDetector.FRACTION_PATTERN; |
| import static com.android.tools.lint.checks.TypographyDetector.GRAVE_QUOTATION; |
| import static com.android.tools.lint.checks.TypographyDetector.HYPHEN_RANGE_PATTERN; |
| import static com.android.tools.lint.checks.TypographyDetector.SINGLE_QUOTE; |
| |
| import com.android.tools.lint.detector.api.Detector; |
| |
| @SuppressWarnings("javadoc") |
| public class TypographyDetectorTest extends AbstractCheckTest { |
| @Override |
| protected Detector getDetector() { |
| return new TypographyDetector(); |
| } |
| |
| public void test() throws Exception { |
| assertEquals( |
| "res/values/typography.xml:17: Warning: Replace \"-\" with an \"en dash\" character (–, –) ? [TypographyDashes]\n" + |
| " <string name=\"ndash\">For ages 3-5</string>\n" + |
| " ^\n" + |
| "res/values/typography.xml:18: Warning: Replace \"-\" with an \"en dash\" character (–, –) ? [TypographyDashes]\n" + |
| " <string name=\"ndash2\">Copyright 2007 - 2011</string>\n" + |
| " ^\n" + |
| "res/values/typography.xml:20: Warning: Replace \"--\" with an \"em dash\" character (—, —) ? [TypographyDashes]\n" + |
| " <string name=\"mdash\">Not found -- please try again</string>\n" + |
| " ^\n" + |
| "res/values/typography.xml:24: Warning: Replace \"-\" with an \"en dash\" character (–, –) ? [TypographyDashes]\n" + |
| " <item>Ages 3-5</item>\n" + |
| " ^\n" + |
| "res/values/typography.xml:15: Warning: Replace \"...\" with ellipsis character (…, …) ? [TypographyEllipsis]\n" + |
| " <string name=\"ellipsis\">40 times...</string>\n" + |
| " ^\n" + |
| "res/values/typography.xml:12: Warning: Use fraction character ½ (½) instead of 1/2 ? [TypographyFractions]\n" + |
| " <string name=\"fraction1\">5 1/2 times</string>\n" + |
| " ^\n" + |
| "res/values/typography.xml:13: Warning: Use fraction character ¼ (¼) instead of 1/4 ? [TypographyFractions]\n" + |
| " <string name=\"fraction4\">1/4 times</string>\n" + |
| " ^\n" + |
| "res/values/typography.xml:25: Warning: Use fraction character ½ (½) instead of 1/2 ? [TypographyFractions]\n" + |
| " <item>Age 5 1/2</item>\n" + |
| " ^\n" + |
| "res/values/typography.xml:3: Warning: Replace straight quotes ('') with directional quotes (‘’, ‘ and ’) ? [TypographyQuotes]\n" + |
| " <string name=\"home_title\">Home 'Sample'</string>\n" + |
| " ^\n" + |
| "res/values/typography.xml:5: Warning: Replace straight quotes (\") with directional quotes (“”, “ and ”) ? [TypographyQuotes]\n" + |
| " <string name=\"show_all_apps2\">Show \"All\"</string>\n" + |
| " ^\n" + |
| "res/values/typography.xml:6: Warning: Replace straight quotes (\") with directional quotes (“”, “ and ”) ? [TypographyQuotes]\n" + |
| " <string name=\"escaped\">Skip \\\"All\\\"</string>\n" + |
| " ^\n" + |
| "res/values/typography.xml:7: Warning: Replace apostrophe (') with typographic apostrophe (’, ’) ? [TypographyQuotes]\n" + |
| " <string name=\"single\">Android's</string>\n" + |
| " ^\n" + |
| "res/values/typography.xml:9: Warning: Replace apostrophe (') with typographic apostrophe (’, ’) ? [TypographyQuotes]\n" + |
| " <string name=\"badquotes1\">`First'</string>\n" + |
| " ^\n" + |
| "res/values/typography.xml:10: Warning: Avoid quoting with grave accents; use apostrophes or better yet directional quotes instead [TypographyQuotes]\n" + |
| " <string name=\"badquotes2\">``second''</string>\n" + |
| " ^\n" + |
| "res/values/typography.xml:11: Warning: Replace straight quotes ('') with directional quotes (‘’, ‘ and ’) ? [TypographyQuotes]\n" + |
| " <string name=\"notbadquotes\">Type Option-` then 'Escape'</string>\n" + |
| " ^\n" + |
| "res/values/typography.xml:8: Warning: Replace (c) with copyright symbol © (©) ? [TypographyOther]\n" + |
| " <string name=\"copyright\">(c) 2011</string>\n" + |
| " ^\n" + |
| "0 errors, 16 warnings\n" + |
| "", |
| |
| lintProject("res/values/typography.xml")); |
| } |
| |
| public void testAnalytics() throws Exception { |
| assertEquals("" |
| + "No warnings.", |
| |
| lintProject("res/values/analytics.xml")); |
| } |
| |
| public void testPlurals() throws Exception { |
| // Regression test for https://code.google.com/p/android/issues/detail?id=82588 |
| assertEquals("" |
| + "res/values/plurals_typography.xml:5: Warning: Replace \"-\" with an \"en dash\" character (–, –) ? [TypographyDashes]\n" |
| + " <item quantity=\"one\">For ages 3-5</item>\n" |
| + " ^\n" |
| + "res/values/plurals_typography.xml:6: Warning: Use fraction character ¼ (¼) instead of 1/4 ? [TypographyFractions]\n" |
| + " <item quantity=\"few\">1/4 times</item>\n" |
| + " ^\n" |
| + "res/values/plurals_typography.xml:14: Warning: Avoid quoting with grave accents; use apostrophes or better yet directional quotes instead [TypographyQuotes]\n" |
| + " <item>``second''</item>\n" |
| + " ^\n" |
| + "0 errors, 3 warnings\n", |
| |
| lintProject("res/values/plurals_typography.xml")); |
| } |
| |
| public void testSingleQuotesRange() { |
| assertTrue(SINGLE_QUOTE.matcher("Foo: 'bar'").matches()); |
| assertTrue(SINGLE_QUOTE.matcher("'Foo': bar").matches()); |
| assertTrue(SINGLE_QUOTE.matcher("\"'foo'\"").matches()); |
| assertTrue(SINGLE_QUOTE.matcher("\"'foo bar'\"").matches()); |
| |
| assertFalse(SINGLE_QUOTE.matcher("foo bar'").matches()); |
| assertFalse(SINGLE_QUOTE.matcher("Mind your P's and Q's").matches()); |
| |
| // This isn't asserted by the regexp: checked independently in |
| // the detector. The goal here is to assert that we need to |
| // have some text on either side of the quotes. |
| //assertFalse(SINGLE_QUOTE.matcher("'foo bar'").matches()); |
| } |
| |
| public void testGraveRegexp() { |
| assertTrue(GRAVE_QUOTATION.matcher("`a'").matches()); |
| assertTrue(GRAVE_QUOTATION.matcher(" `a' ").matches()); |
| assertTrue(GRAVE_QUOTATION.matcher(" ``a'' ").matches()); |
| assertFalse(GRAVE_QUOTATION.matcher("`a''").matches()); |
| } |
| |
| public void testFractionRegexp() { |
| assertTrue(FRACTION_PATTERN.matcher("fraction 1/2.").matches()); |
| assertTrue(FRACTION_PATTERN.matcher("1/2").matches()); |
| assertTrue(FRACTION_PATTERN.matcher("1/3").matches()); |
| assertTrue(FRACTION_PATTERN.matcher("1/4").matches()); |
| assertTrue(FRACTION_PATTERN.matcher("3/4").matches()); |
| assertTrue(FRACTION_PATTERN.matcher("1 / 2").matches()); |
| assertTrue(FRACTION_PATTERN.matcher("1 / 3").matches()); |
| assertTrue(FRACTION_PATTERN.matcher("1 / 4").matches()); |
| assertTrue(FRACTION_PATTERN.matcher("3 / 4").matches()); |
| |
| assertFalse(FRACTION_PATTERN.matcher("3 // 4").matches()); |
| assertFalse(FRACTION_PATTERN.matcher("11 / 2").matches()); |
| assertFalse(FRACTION_PATTERN.matcher("1 / 22").matches()); |
| } |
| |
| public void testNDashRegexp() { |
| assertTrue(HYPHEN_RANGE_PATTERN.matcher("3-4").matches()); |
| assertTrue(HYPHEN_RANGE_PATTERN.matcher("13- 14").matches()); |
| assertTrue(HYPHEN_RANGE_PATTERN.matcher("13 - 14").matches()); |
| assertTrue(HYPHEN_RANGE_PATTERN.matcher("The range is 13 - 14").matches()); |
| assertTrue(HYPHEN_RANGE_PATTERN.matcher("13 - 14.").matches()); |
| |
| assertFalse(HYPHEN_RANGE_PATTERN.matcher("13 - x").matches()); |
| assertFalse(HYPHEN_RANGE_PATTERN.matcher("x - 14").matches()); |
| assertFalse(HYPHEN_RANGE_PATTERN.matcher("x-y").matches()); |
| assertFalse(HYPHEN_RANGE_PATTERN.matcher("-y").matches()); |
| assertFalse(HYPHEN_RANGE_PATTERN.matcher("x-").matches()); |
| } |
| } |