Skip to main content

Junit - Test fails on French or German string assertion

In my previous post about building a regex to check a text without special characters but allow German and French. I met a problem that the unit test works fine on my machine using Eclipse, but it was fail when running on Jenkins' build job.

Here is my test:

@Test
public void shouldAllowFrenchAndGermanCharacters(){
  String source = "ÄäÖöÜüß áÁàÀâÂéÉèÈêÊîÎçÇ"; 
  assertFalse(SpecialCharactersUtils.isExistSpecialCharater(source));
}

Production code:

public static boolean isExistNotAllowedCharacters(String source){  
  Pattern regex = Pattern.compile("^[a-zA-Z_0-9_ÄäÖöÜüß áÁàÀâÂéÉèÈêÊîÎçÇ]*$");  
  Matcher matcher = regex.matcher(source);  
  return !matcher.matches();  
 } 

The result likes the following:
 
Failed tests:
   SpecialCharactersUtilsTest.shouldAllowFrenchAndGermanCharacters:32 null

A guy from stackoverflow.com says:

"This is probably due to the default encoding used for your Java source files. The ö in the string literal in the JUnit source code is probably being converted to something else when the test is compiled. To avoid this, use Unicode escapes (\uxxxx) in the string literals in your JUnit source code"

So, I tried to find what and where exactly  the \uxxxx is. The answer they are Unicode character codes, and they could be easy to find. The following is an example:

https://en.wikipedia.org/wiki/List_of_Unicode_characters

I changed the function to use Unicode characters instead:

public static boolean isExistSpecialCharater(String source){
 Pattern regex = Pattern.compile("^[a-zA-Z_0-9_\u00c4\u00e4\u00d6\u00f6\u00dc\u00fc\u00df\u00e0\u00c0\u00e1\u00c1\u00e2\u00c2\u00e9\u00c9\u00e8\u00c8\u00ea\u00ca\u00ee\u00ce\u00e7\u00c7\u0020\u0027]*$");
 Matcher matcher = regex.matcher(source);
 return !matcher.matches();
  
} 

And, modified the test case also:

@Test
public void shouldAllowFrenchCharacters(){
   String source = "\u00e0\u00c0\u00e1\u00c1\u00e2\u00c2\u00e9\u00c9\u00e8\u00c8\u00ea\u00ca\u00ee\u00ce\u00e7\u00c7\u0020\u0027"; 
   assertFalse(SpecialCharactersUtils.isExistSpecialCharater(source));
}

Yeah, it works. Besides, I have already made it by writing an automation test with Selenium to make sure that it can also work on GUI as my expectation.

References:
[1]. http://stackoverflow.com/questions/4237581/comparing-unicode-characters-in-junit
[2]. http://www.widecodes.com/0zxqPkPkej/junit-fails-on-french-string-assertion.html

Comments

  1. By using Jenkins job, the Unicode character codes should be lower case all characters in Java code. for example: use '\u00e0' instead of '\u00E0'

    ReplyDelete
  2. it just work when You use lower case for all special character. for ex: \u00E0 will not work

    ReplyDelete
  3. You can use this tool to convert from unicode to hex:
    http://www.endmemo.com/unicode/unicodeconverter.php

    ReplyDelete

Post a Comment

Popular posts from this blog

Generating PDF/A From HTML in Meteor

My live-chat app was a folk of project Rocket.Chat which was built with Meteor. The app had a feature that administrative users were able to export the conversations into PDF files. And, they wanted to archive these files for a long time. I happened to know that PDF/A documents were good for this purpose. It was really frustrated to find a solution with free libraries. Actually, it took me more than two weeks to find a possible approach. TL, DR; Using Puppeteer to generate a normal PDF and using PDFBox to load and converting the generated PDF into PDF/A compliance. What is PDF/A? Here is a definition from Wikipedia: PDF/A  is an  ISO -standardized version of the  Portable Document Format  (PDF) specialized for use in the  archiving  and long-term  preservation  of  electronic documents . PDF/A differs from PDF by prohibiting features unsuitable for long-term archiving, such as  font  linking (as opposed to  font em...

The HelloWorld example of JSF 2.2 with Myfaces

I just did by myself create a very simple app "HelloWorld" of JSF 2.2 with a concrete implementation Myfaces that we can use it later on for our further JSF trying out. I attached the source code link at the end part. Just follow these steps below: 1. Create a Maven project in Eclipse (Kepler) with a simple Java web application archetype "maven-archetype-webapp". Maven should be the best choice for managing the dependencies , so far. JSF is a web framework that is the reason why I chose the mentioned archetype for my example. 2. Import dependencies for JSF implementation - Myfaces (v2.2.10) into file pom.xml . The following code that is easy to find from  http://mvnrepository.com/  with key words "myfaces". <dependency> <groupId>org.apache.myfaces.core</groupId> <artifactId>myfaces-api</artifactId> <version>2.2.10</version> </dependency> <dependency> <groupId>org.apache.myfaces.core<...

[Snippet] CSS - Child element overlap parent

I searched from somewhere and found that a lot of people says a basic concept for implementing this feature looks like below: HTML code: <div id="parent">  <div id="child">  </div> </div> And, CSS: #parent{   position: relative;   overflow:hidden; } #child{   position: absolute;   top: -1;   right: -1px; } However, I had a lot of grand-parents in my case and the above code didn't work. Therefore, I needed an alternative. I presumed that my app uses Boostrap and AngularJs, maybe some CSS from them affects mine. I didn't know exactly the problem, but I believed when all CSS is loaded into my browser, I could completely handle it. www.tom-collinson.com I tried to create an example to investigated this problem by Fiddle . Accidentally, I just changed: position: parent; to position: static; for one of parents -> the problem is solved. Look at my code: <div class="modal-body dn-placeholder-parent-positi...

DevOps for Dummies

Everyone talks about it, but not everyone knows what it is. Why DevOps? In general, whenever an organization adopts any new technology, methodology, or approach, that adoption has to be driven by a business need. Any kind of system that need rapid delivery of innovation requires DevOps (development and operations). Why? DevOps requires mechanisms to get fast feedback from all the stakeholders in the software application that's being delivered. DevOps approaches to reduce waste and rework and to shift resources to higher-value activities. DevOps aims to deliver value (of organization or project) faster and more efficiently. DevOps Capabilities The capabilities that make up DevOps are a broad set that span the software delivery life cycle. The following picture is a reference architecture which provides a template of a proven solution by using a set of preferred methods and capabilities. My Remarks Okay, that sounds cool. What does it simply mean, again? The f...

Styling Sort Icons Using Font Awesome for Primefaces' Data Table

So far, Primefaces has used image sprites for displaying the sort icons. This leads to a problem if we want to make a different style for these icons; for example, I would make the icon "arrow up" more blurry at the first time the table loading because I want to highlight the icon "arrow down". I found a way that I can replace these icons with Font Awesome icons. We will use "CSS Pseudo-classes" to achieve it. The hardest thing here is that we should handle displaying icons in different cases. There is a case both "arrow up" and "arrow down" showing and other case is only one of these icons is shown. .ui-sortable-column-icon.ui-icon.ui-icon-carat-2-n-s { background-image: none; margin-left: 5px; font-size: 1.1666em; position: relative; } .ui-sortable-column-icon.ui-icon.ui-icon-carat-2-n-s:not(.ui-icon-triangle-1-s)::before { content: "\f106"; font-family: "FontAwesome"; position: ...