あめ姫はメモリが少ない

技術関連・お仕事関連ブログ

concrete5に管理者ログインをしても、画面にメニューバーが出てこない

concrete5のインストールが無事に完了し、トップページに遷移。さあ管理画面を開くぞ!と思っても、普通表示されるはずの下画面のようなメニュー画面が出てこない。

[画像]

どうやらこの問題、編集のメニューバーをJavaScriptで取ってきて表示させる際に、必要な環境が足らずに起こる問題のよう。

/index.php/tools/required/page_controls_menu_js?cID=1&cvID=&btask=&ts=0

にアクセスすると

Notice: Sorry, your PCRE extension does not support UTF8 which is needed for the I18N core in ~

というエラーが表示されていて、JavaScriptでのページ制御が上手くいってない様子。

PCREの設定に問題があるらしく、少なくとも下記の環境ではダメ、とのこと。

# pcretest -C
PCRE version 6.6 06-Feb-2006
Compiled with
  UTF-8 support
  No Unicode properties support
  Newline character is LF
  Internal link size = 2
  POSIX malloc threshold = 10
  Default match limit = 10000000
  Default recursion depth limit = 10000000
  Match recursion uses stack

なので、

/index.php/dashboard/

から管理画面を開き、

管理画面 > システムと設定 > サーバー設定一覧 > デバッグ設定

で「来訪者からエラーを隠します。」にチェックを入れて、もう一度トップを表示させて、解決できました。

Volleyで通信エラー時のテストを実施する

Volleyライブラリを使った通信エラー時のテストの書き方

com.android.volley.toolbox.HttpStackを使った、サーバーエラーをレスポンスとして返すクラスを作成

private class HttpStackServerError implements HttpStack {
    @Override
    public HttpResponse performRequest(final Request request, final Map additionalHeaders) throws IOException, AuthFailureError {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
        }
        HttpResponse response = new BasicHttpResponse(new BasicStatusLine(HttpVersion.HTTP_1_1, 500, "Internal Server Error"));
        List
responseHeaders = getHeaders(); response.setHeaders(responseHeaders.toArray(new Header[responseHeaders.size()])); return response; } } private List
getHeaders() { ArrayList
headers = new ArrayList
(); /** 返したいヘッダの内容を記述 */ return headers; }

これをRequestQueueのコンストラクタのnetworkの部分で渡してあげる

RequestQueue requestQueue = new RequestQueue(new NoCache(), new BasicNetwork(new HttpStackServerError()));

StringRequest stringRequest = new StringRequest(Request.Method.GET,url,listener,errorListener);

requestQueue.add(stringRequest);

こうすることで、requestQueueがInternal Server Errorで返ってきたと判断し、stringRequestのerrorListenerを通らせることができる。

その他、sleepさせ続けてレスポンスを返させなければタイムアウトのテストになる模様。

参考

Unit testing with Android volley - stackoverflow


はてなにおける Android アプリのソフトウェアテスト - slide share


スライド22枚目、テスト用のNetworkクラスを作ってもできるらしい。

CheckStyleの"Unable to get class information for <Custom Exception Class>"をチェックしないようにする

Android Studioの野良Check Styleプラグインを使ってコードのスタイルチェックをしているんですが、"unable to get class information for "(日本語だと「のクラス情報が取得できません。」)を解決する方法が不明でした。他のIDEを使ってる人に向けて「ビルドしてからCheckStyleかけてはどうだいHAHAHA」みたいな記事はちらほら見かけましたが、Android Studioのやり方なのか、それをやっても解決はできませんでした。

"Unable to get class~"のエラーを吐いているのは、"RedundantThrows"というチェックプラグイン。どうやらコイツ、冗長なThrowをしていないかチェックしている模様。(参考:http://www.limy.org/program/java/checkstyle/coding.html

というわけで、"RedundantThrows"のプラグインをCheck Styleから除去して終了です。チェックを外してしまったので、冗長なThrowを書かないように意識しましょう。