forked from orhanobut/logger
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Remove Android dependency from LoggerPrinter (orhanobut#76)
* Remove Android dependency from LoggerPrinter In order to have Logger in Android unit tests, Logger classes should not depend on Android internals, otherwise exception "Method ... not mocked." will be thrown. For more info: https://goo.gl/Cl0xu3 In this commit, instead of introducing more dependecy from other some 3rd party lib (Appache etc) to do the same task, code is copppied from relevant Android methods to reduce change impact. * Remove support annotation from Helper class. * Fix errors reported by CI * Add private contructor in util class. * Update licence copyright
- Loading branch information
1 parent
de2ec28
commit 7ba7383
Showing
3 changed files
with
109 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
/* | ||
* Copyright 2015 Orhan Obut | ||
* | ||
* 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. | ||
* | ||
* This software contains code derived from the following Android classes: | ||
* android.util.Log, android.text.TextUtils. | ||
*/ | ||
package com.orhanobut.logger; | ||
|
||
import java.io.PrintWriter; | ||
import java.io.StringWriter; | ||
import java.net.UnknownHostException; | ||
|
||
/** | ||
* Helper util class to be used instead of Android methods to avoid direct dependency and enable | ||
* unit testing on Android projects. | ||
*/ | ||
final class Helper { | ||
|
||
private Helper() { | ||
// Hidden constructor. | ||
} | ||
|
||
/** | ||
* Returns true if the string is null or 0-length. | ||
* | ||
* @param str the string to be examined | ||
* @return true if str is null or zero length | ||
*/ | ||
static boolean isEmpty(CharSequence str) { | ||
return str == null || str.length() == 0; | ||
} | ||
|
||
/** | ||
* Returns true if a and b are equal, including if they are both null. | ||
* <p><i>Note: In platform versions 1.1 and earlier, this method only worked well if | ||
* both the arguments were instances of String.</i></p> | ||
* | ||
* @param a first CharSequence to check | ||
* @param b second CharSequence to check | ||
* @return true if a and b are equal | ||
* | ||
* NOTE: Logic slightly change due to strict policy on CI - | ||
* "Inner assignments should be avoided" | ||
*/ | ||
static boolean equals(CharSequence a, CharSequence b) { | ||
if (a == b) return true; | ||
if (a != null && b != null) { | ||
int length = a.length(); | ||
if (length == b.length()) { | ||
if (a instanceof String && b instanceof String) { | ||
return a.equals(b); | ||
} else { | ||
for (int i = 0; i < length; i++) { | ||
if (a.charAt(i) != b.charAt(i)) return false; | ||
} | ||
return true; | ||
} | ||
} | ||
} | ||
return false; | ||
} | ||
|
||
/** | ||
* Copied from "android.util.Log.getStackTraceString()" in order to avoid usage of Android stack | ||
* in unit tests. | ||
* | ||
* @return Stack trace in form of String | ||
*/ | ||
static String getStackTraceString(Throwable tr) { | ||
if (tr == null) { | ||
return ""; | ||
} | ||
|
||
// This is to reduce the amount of log spew that apps do in the non-error | ||
// condition of the network being unavailable. | ||
Throwable t = tr; | ||
while (t != null) { | ||
if (t instanceof UnknownHostException) { | ||
return ""; | ||
} | ||
t = t.getCause(); | ||
} | ||
|
||
StringWriter sw = new StringWriter(); | ||
PrintWriter pw = new PrintWriter(sw); | ||
tr.printStackTrace(pw); | ||
pw.flush(); | ||
return sw.toString(); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters