Frans de Jonge
e9df73f6dc
Developer documentation improvements
...
* Fixed up all of util and added when absent
* Updated widget examples to new coding style
2017-04-04 08:01:15 -07:00
Robert
a3c4254809
Added util.fixUtf8 ( #2704 )
...
* Remove invalid UTF-8 chars from OPDS
* add unit tests
2017-04-02 16:17:49 +02:00
Hzj_jie
ea2de9638b
LuaSettings:wrap() / LuaSettings:child() function to create an LuaSettings to represent a sub table of an existing one ( #2685 )
2017-03-28 15:10:36 -07:00
Frans de Jonge
8b7e18a7d7
MenuSorter: resolve review comments
...
* simplify user config loop
* simplify unit test for Travis memory use
* remove unused util variable
2017-03-26 11:12:44 +02:00
Frans de Jonge
ddf590eb6d
MenuSorter: split out menu order configuration
2017-03-26 11:12:44 +02:00
Frans de Jonge
33c848f813
MenuSorter: first unit tests
2017-03-26 11:12:44 +02:00
Frans de Jonge
653ff64438
MenuSorter: handle disabled
2017-03-26 11:12:44 +02:00
Frans de Jonge
8f31a81601
MenuSorter: some documentation
...
MenuSorter: forgot to add plugin style change
MenuSorter: worked out the final quirks
* Menu always compressed into tables without missing indexes for ipairs compatibility
* Orphans attached
* Separators no longer count as items
2017-03-26 11:12:44 +02:00
Frans de Jonge
56659ddb20
MenuSorter: avoid recursion in findById
2017-03-26 11:12:44 +02:00
Frans de Jonge
b7b5950e98
MenuSorter: review comments and various bug fixes
...
* fixed wrongful retention of submenus variable and added return to MenuSorter:findById
* fixed readerfooter_spec.lua error
* fixed review comments
2017-03-26 11:12:44 +02:00
Qingping Hou
2aa9d5d64e
test: add unit tests for docsettings
2017-03-06 07:47:20 +01:00
Qingping Hou
9b7aba3fba
fix: override readerhighlight hold in readerfooter
...
Also fix touch zone dependency graph generation code.
ReaderHighlight has now been migrated to use touch zone
Inputcontainer's touch event handling logic changed to only stop
propagation when handler returns `true`. Previously, it stops
propagation when a handler is found. This is needed to support
both readerhighlight_tap and tap_forward touch zones.
2017-01-30 05:53:44 -08:00
Qingping Hou
0b9c9d6ddb
test(chore): remove side effects
2017-01-30 05:53:44 -08:00
Hzj_jie
529d1b3d33
evernote: ReadHistory integration and text file output ( #2498 )
2017-01-21 01:32:42 -08:00
Qingping Hou
581039aed5
opds(fix): unescape name and value
2016-12-29 00:02:22 -08:00
poire-z
a8dd8c6f30
textboxwidget: even better text wrapping
...
util.isSplitable() accepts now also the previous char to help
decide if a space can be used to split a line.
TextBoxWidget:_splitCharWidthList() : simplified logic
2016-12-14 11:39:46 -08:00
poire-z
5040bfe4c5
textboxwidget and scrolltextwidget enhancements ( #2393 )
...
util: made isSplitable() accept an optional next_char
for wiser decision
textboxwidget: speed up rendering, enhanced text wrapping,
allow selection of multiple words with Hold.
scrolltextwidget: allow scrolling with Tap.
Details in #2393
2016-12-11 14:32:02 -08:00
Qingping Hou
a6c506dc10
kobolight(refactor): move into plugin & only enable for kobo
2016-12-10 16:06:51 -08:00
Qingping Hou
0c49b915de
refactor: add touch zone subsystem to inputcontainer
...
Touch zone decouples screen size from gesture event registration.
The win here is each individual widget does not need to update
gesture range on screen rotate/resize anymore.
Another advantage is we now have a centralized ordered array to handle
all registered touch event listeners, makes it much easier to resolve
gesture range conflicts between multiple widgets.
This patch also includes the following changes:
* migrate readerpaging to use readerui's touch zone
* migrate readerfooter to use readerui's touch zone
* move inverse read direction setting to touch menu's setting tab
* moved kobolight widget from readerview into readerui
* various dead code cleanups and comments
2016-12-10 16:06:51 -08:00
Hzj_jie
9efc723388
PR #2356 breaks CJK character splitting
2016-11-25 16:46:56 -08:00
Qingping Hou
cd24eb82d7
readerpaging(fix): handle edge cases where paging pan will crash the reader
2016-11-24 00:41:29 -08:00
robert00s
fc5ba9b862
Fix hyphenation words with unicode character in texboxwidget ( #2356 )
2016-11-19 12:26:53 -08:00
Qingping Hou
efae2ed16f
network(fix): automaticallly obtain IP if network is already authenticated
2016-11-06 23:56:29 -08:00
Qingping Hou
558754e9b5
footer(refactor): various bug fixes and optimizations
2016-11-05 00:06:26 -07:00
Qingping Hou
abbb72b6d3
readerrolling(fix): do not emit PageUpdate event until document is ready
2016-10-08 15:53:58 -07:00
Hzj_jie
f1637ef19b
Merge pull request #2268 from Hzj-jie/master
...
This is the implementation of whisper sync
2016-10-07 14:47:58 -07:00
Hzj_jie
fd7ae875c0
Whisper sync feature
...
Now KOReader supports more sync options, and most of the sync operation can be
executed automatically.
2016-10-07 11:23:27 -07:00
Qingping Hou
ebc7055b43
chore: move kobo specific code into kobo/device.lua
2016-09-19 01:10:53 -07:00
Qingping Hou
31470efa3b
Merge pull request #2250 from Hzj-jie/master2
...
Add readhistory_spec / docsettings_spec
2016-09-13 00:35:28 -07:00
Zijie He
ced671bc69
Add readhistory_spec / docsettings_spec
2016-09-12 20:04:13 -07:00
Zijie He
125fb6dfc6
unload network manager package to ensure it is initialized correctly.
2016-09-12 14:52:22 -07:00
Zijie He
9b66bf1149
Restore WIFI state when koreader starts.
2016-09-12 11:53:42 -07:00
Hzj_jie
da2c57f93a
Automatically connect WIFI after Kobo has been resumed ( #2215 )
...
* Add bash scripts to control WIFI / IP, so we can share them with frontend/device/kobo/device.lua.
* add test cases
2016-09-01 00:05:40 -07:00
chrox
001433e6bc
various test/coverage optimization
2016-08-15 00:32:40 +08:00
chrox
7fd6037bb0
fix #2219
...
The ABS_PRESSURE ABS code is also detected on some KOBO devices
if ABS_PRESSURE events are feeded to handle orientation those devices
will have a unresponsive screen as described in #2219 .
This patch registers an event adjustment handler for Kindle Oasis to
adjust the ABS_PRESSURE code to ABS_OASIS_ORIENTATION code so that
it won't affect event handling on other devices.
2016-08-13 18:57:15 +08:00
chrox
9ab005a1d3
fix unit test of readerlink and readerpaging
...
and have more confidence with the unit testing framework.
Now `make testfront` won't retry on failure and testing files are
ordered in each run so that it's possible to reproduce testing failure.
And this patch also fix flush settings not working before suspend issue:
at some point the `FlushSettings` event is sent to `UIManager` instead
of `ReaderUI`, but `UIManager` only delegated events to active widgets
and `ReaderUI` is actually not an active widgets thus will miss the event.
This patch also add a verbose debug mode with "-v" as a switch to turn
on this mode. With verbose mode on, event handling will be logged.
2016-08-12 17:05:07 +08:00
Qingping Hou
61b6896391
Merge pull request #2217 from chrox/benchmark_tool
...
fix k2pdfopt performance degradation
2016-08-11 13:37:39 -04:00
chrox
9afad43a3e
refactoring utils to tools as discussed in #2197
2016-08-11 19:29:09 +08:00
chrox
7ea12c0198
fix broken unit tests on Travis CI
...
1. It turns out that `device_id` is not defined in unit test environment
which makes the `assert(self.kosync_device_id)` fail and somehow makes `luajit` segmentation fault.
2. In the device spec, stubbing `io.open` will make subsquent `require`
all return boolean value and segmentation fault `luajit`.
This patch is a minimum viable change that makes CI work on both my
local box and Travis.
2016-08-11 18:17:09 +08:00
Zijie He
820a39c8f7
Update KOSyncClient
2016-08-10 10:42:51 -07:00
Qingping Hou
1c5543358c
readerfooter(fix): avoid setting mini footer to invisible when full progress bar is on
...
Our previous assumption is user will only choose between full or min
bar. The does not hold anymore as many more info has been added to the
mini bar and sometimes user might want to have both of them on. This
patch makes the reader behavior consistent when both bars are set to be
on for a document.
2016-07-23 18:00:37 -07:00
Qingping Hou
f30e487959
readerpaging(fix): set the corrent page number on GoBackLink event
2016-07-18 01:33:35 -07:00
Qingping Hou
3339ed4e5f
test(fix): update tests for default scroll mode
2016-07-17 23:33:03 -07:00
Qingping Hou
0d9fc17d7c
chore: rename SetDefaults:SaveSettings
2016-07-16 22:47:19 -07:00
Qingping Hou
20eb36a03d
feat: add network management UI for kobo
2016-07-11 23:50:19 -07:00
chrox
71bf9efc7c
split accient greek words with spacing character
...
This should fix #1705 .
2016-06-28 23:50:25 +08:00
Qingping Hou
fadad90447
uimanager(fix): handle stack change in close
2016-06-21 01:53:42 -07:00
Qingping Hou
af2f3c30c7
uimanager(fix): handle last widget in broadcast event properly
2016-06-18 22:32:08 -07:00
chrox
f5ea29c8d3
fix unit test of defaults since we deleted one global default
...
I'm afraid this unit test is not maintainable, each time we
change the structure of the defaults.lua we must change this spec
accordingly. We probably will get rid of defaults.lua as well as the
filemanagersetdefaults and this spec.
2016-06-15 02:52:58 +08:00
Qingping Hou
ce7ae2dfac
uimanager(fix): handle edge case where second widget in stack is ignored
2016-06-11 12:17:18 -07:00
Hzj_jie
cf8c0aa81f
Add docsettings unittest
2016-06-06 10:05:16 -07:00
Hzj_jie
016aaa92b9
Merge remote-tracking branch 'upstream/master'
...
Conflicts:
frontend/docsettings.lua
2016-06-06 08:56:07 -07:00
Qingping Hou
301925e34a
textboxwidget(fix): handle onHoldWord event
2016-06-05 00:37:54 -07:00
Qingping Hou
adf5ffdd26
dictquicklookup(fix): use self.region for matching hold event
2016-06-05 00:08:23 -07:00
Qingping Hou
2e417cfbd8
filemanager(refactor): use purge method from docsettings
2016-06-03 22:06:02 -07:00
Qingping Hou
8268d8d32c
test(fix): clean up after screenshot test
2016-06-01 21:32:35 -07:00
chrox
449089881c
accommodation of EPUB spec for new crengine
2016-06-01 21:35:14 +08:00
Huang Xin
f718b0669f
Merge pull request #2045 from koreader/defaults
...
defaults(refactor): remove global hack in filemanagersetdefaults
2016-06-01 08:31:36 -05:00
Qingping Hou
a92a88e063
uimanager(fix): check active widgets in the correct order
2016-05-29 22:03:04 -07:00
Qingping Hou
9586b36eb6
defaults(fix): purge entry from persistent file
2016-05-26 00:44:42 -07:00
Qingping Hou
60587e08c6
defaults(refactor): remove global hack in filemanagersetdefaults
...
also added screensaver folder setting dialog for kobo
2016-05-25 22:07:20 -07:00
Qingping Hou
82a3e0f9ad
automatically adjust ev time for kobo touch
2016-05-23 23:21:14 -07:00
Qingping Hou
068cefe8fc
test: flush book settings before suspend
2016-05-02 22:42:19 -07:00
Qingping Hou
f01b261188
test: add kindle init and fl tests
2016-04-30 22:41:44 -07:00
Qingping Hou
ef4004e72b
test(fix): disable footer in readerlink_spec
2016-04-28 20:31:17 -07:00
Qingping Hou
7c380121ea
test: more readerfooter progressbar tests
2016-04-28 01:26:10 -07:00
Qingping Hou
0f3eeb24c9
progressbar(fix): persist progressbar visibility
2016-04-28 01:25:18 -07:00
Qingping Hou
eb71d29716
kodev(minor): fix arg test
2016-04-23 21:22:57 -07:00
chrox
7071ae2b6e
fix unit test of occurrences search
2016-04-23 21:53:06 +08:00
Qingping Hou
d7b1b403c1
progresswidget(fix): ignore nil self.last
2016-04-20 23:16:40 -07:00
Qingping Hou
572412b1f6
readerrolling(fix): detect end of book properly
2016-04-20 23:12:07 -07:00
Qingping Hou
c22a3747d8
fix all the tests
2016-04-19 00:01:28 -07:00
Qingping Hou
4a66036eb0
test: update test to match the new crengine typesetting
2016-04-18 23:51:06 -07:00
Frans de Jonge
5638819f25
Removed a bunch of "successfully", replaced an ellipsis, and some deviant spellings of KOReader.
2016-04-16 12:37:08 +02:00
Qingping Hou
eb37d9b8b6
kobo: fix screen probe for touch
2016-04-02 23:06:09 -07:00
Qingping Hou
144fd170f1
uimanager(refactor): replace autosuspend if check with noop
2016-03-29 10:02:53 -07:00
Qingping Hou
e3137134f8
dbg(add): guard method to toggle assert at based at runtimemode
2016-03-28 23:38:25 -07:00
Zijie He
b86aa5a02b
Implement auto-suspend function for Kobo. Add test case for UIManager:_checkTasks, which should not clear _task_queue_dirty bit before looping.
2016-03-28 17:53:18 -07:00
Qingping Hou
e5c1ff1ef6
test(bookmark): purge doc settings before test
2016-03-27 17:17:46 -07:00
Qingping Hou
11d5b5c0a1
fix(readerlink): restore reader view context on go back
2016-03-27 16:01:56 -07:00
Qingping Hou
2d5222ef33
readerview: add get/set methods for view context
2016-03-27 15:39:59 -07:00
Qingping Hou
f48d9bd6d9
fix(readerfooter): marker ticks initialization
2016-03-18 23:24:51 -07:00
Qingping Hou
adc7ddccfc
test: start every test suit with a clean reader setting
2016-03-12 15:52:04 -08:00
Qingping Hou
c8cd1d67f5
test: more readerfooter tests
2016-03-12 01:00:52 -08:00
Zijie He
61ec784f91
Add eink_optimization_spec
2016-03-08 19:38:06 -08:00
Qingping Hou
e52c74afcc
test: more uimanager scheduler test
2016-03-07 22:52:52 -08:00
Qingping Hou
b65983da1a
multi-touch: add tests for gesturerange moudle
2016-03-06 22:45:40 -08:00
Qingping Hou
8190093f83
kobo: don't create FrontLightState config if it didn't exist to begin with
2016-03-02 18:25:17 +01:00
zijiehe
e84093c414
Add a flState in Kobo, and KoboPowerD:toggleFrontlight uses flState to control the light instead of intensity.
2016-02-26 15:34:23 +08:00
Qingping Hou
8c01835458
fix: only show reader status at the end of the book
2016-02-23 22:43:35 -08:00
Qingping Hou
69f9ebd528
build: fix doc generation
...
also moved MD5 to koreader-base/ffi
2016-02-23 22:01:12 -08:00
Qingping Hou
03e81cfa4d
test: fix readerui instance reset test
2016-02-17 00:06:55 -08:00
Qingping Hou
417bb5fb14
test: kill in fly hinting event
2016-02-16 23:26:08 -08:00
Qingping Hou
5e3100874f
test: purge doc settings before test
2016-02-15 22:43:47 -08:00
Qingping Hou
12c6bd7121
test: fix readerbookmark unit test
2016-02-14 23:55:32 -08:00
chrox
493c887829
fix travis testfront
2016-02-07 21:48:26 +08:00
Qingping Hou
71ef994318
test: add nickle conf spec
2016-02-03 10:35:47 -08:00
Qingping Hou
d1ca8bc494
fix(filemanager): delete document with settings
2016-01-09 12:12:10 -08:00
Qingping Hou
722eaed4b2
feat: docsettings:getSidecarDir
2016-01-09 12:12:10 -08:00
Qingping Hou
3b92bdc084
feat: support screenshot in filemanager
2016-01-03 00:47:44 -08:00
Qingping Hou
5aefb41631
fix readerfooter spec
2015-12-26 14:20:51 -08:00
Qingping Hou
ab98097e72
add tests for scheduler
2015-12-26 12:59:57 -08:00
Qingping Hou
55234ef899
fix: read stats crashes pdf/djvu documents
2015-12-25 20:57:11 -08:00
chrox
19979fb8f8
postpone loading of httpclient module in unit test
2015-10-07 23:00:49 +08:00
chrox
54f5166254
add koptinterface spec
2015-10-07 22:42:12 +08:00
chrox
429eeed372
verbose unit test log so that we have a clue when there is segfault
2015-10-07 15:14:27 +08:00
Qingping Hou
cdd17906f6
refactor: ui/font:getFace
2015-09-13 01:10:09 -07:00
chrox
f0dbd5939c
fix travis build segfault hopefully
2015-09-13 03:28:17 +08:00
Frans de Jonge
6eca0be44b
Spec updates for new font
2015-09-07 09:42:23 +02:00
Qingping Hou
a30fe26de0
Merge pull request #1543 from chrox/plugable-turbo
...
disable turbo lib by default
2015-06-03 12:47:07 -04:00
chrox
a59621953d
use turbo library in coverage test
2015-06-02 21:23:30 +08:00
chrox
c7cac7b333
disable turbo lib by default
2015-06-02 13:07:17 +08:00
chrox
1fcc425eac
regression test to safeguard droid sans fallback
2015-06-02 12:29:54 +08:00
chrox
a4404cfb10
Add missing urw fonts and fix unit test
2015-04-28 22:20:12 +08:00
chrox
d468b05567
Use turbo looper on Android
2015-04-28 11:06:38 +08:00
Qingping Hou
3a55edd0d5
chore: remove test tag
2015-04-27 00:46:01 -04:00
chrox
0058bc8511
Fix readerbookmark unit test
2015-04-27 11:09:28 +08:00
Qingping Hou
186673587e
chore: fix some of the luacheck errors
2015-04-26 20:57:45 -04:00
chrox
932df2a2f9
Refactor out string.gsplit to util.gsplit
2015-04-22 14:27:33 +08:00
chrox
2f2611af42
fix Travis test
2015-03-21 17:02:25 +08:00
chrox
3984d5b31d
disable debug in unit test
2015-03-09 20:44:37 +08:00
chrox
d08e22ec2e
add simple sync service as a plugin
...
The 'KOSync' plugin will synchronize furthest reading progress
across different koreader devices after users registering their
devices.
The synchronizing service is open-sourced as the project
[koreader/koreader-sync-server](https://github.com/koreader/koreader-sync-server ).
2015-03-09 20:20:36 +08:00
chrox
9ab6224963
add lua Spore to build REST client
2015-03-07 17:05:24 +08:00
chrox
d7faba5b5c
request from async http client only accept one callback
...
and error should be checked in the callback
2015-03-07 11:19:43 +08:00
chrox
0191dc6530
revert busted to v1.10.0 to avoid segmentation fault in testing
2015-03-05 17:56:03 +08:00
chrox
4053b5adac
fix unit test with latest busted
2015-03-03 18:00:38 +08:00
chrox
e74d1fa557
turn off debug in unit test
2015-03-02 17:24:35 +08:00
chrox
9299b9a5e8
add async http client
...
it uses non-blocking turbo I/O looper to process http request
so that multiple http request can be handled simultaneously and http request
won't block user input, and most importantly, in Lua's way.
2015-03-02 17:21:26 +08:00
chrox
5c9a9198fb
add Document:fastDigest method to calculate document hash without performance overhead
2015-03-02 14:55:16 +08:00
chrox
07ff30f89c
add md5:update and md5:sum methods
2015-03-02 14:55:16 +08:00
Qingping Hou
f1d44ec809
test: add imagewidget_spec
2014-12-18 03:33:44 -05:00
chrox
4f35834b2e
wrap computation intensive functions in hook free env when makeing coverage test
...
so that Travis CI job won't fail because of timeout.
2014-12-03 11:01:12 +08:00
chrox
d6c4465c47
fix coverage test fails on OPDS browser module
...
for some reason luxl.lua has problem when being set hook for luacov
2014-12-01 14:46:17 +08:00
Frans de Jonge
47d7a48555
OPDS: refactored unit test and fixed a minor bug with undefined image_rel
2014-11-30 21:44:47 +01:00
Frans de Jonge
c25254a7ec
OPDS: embryonic unit test for OPDS browser
...
This initial seed specifically tests against what recently broke in Gutenberg and FeedBooks.
2014-11-30 19:06:27 +01:00
chrox
fe885be563
refactoring readerbookmark to show both bookmarks and highlights
...
in the bookmark menu
and use binary search of the sorted bookmarks table whenever is
possible.
2014-11-27 22:01:57 +08:00
chrox
08dff3a158
turn off debug in unit test by default
...
Uncommnet the `DEBUG:turnOn()` line to turn it on.
2014-11-27 22:01:57 +08:00
chrox
08f0f14ba3
fix dictionary spec
2014-11-21 18:45:07 +08:00
chrox
566586619a
add unit tests for readerdictionary and readerhighlight
2014-11-21 18:32:43 +08:00
chrox
033ffb1d0f
update readersearch and readertoc specs as crengine is updated
2014-11-18 16:08:39 +08:00
chrox
b80dd1f966
add fulltext search for PDF documents
2014-11-17 17:58:44 +08:00
Hans-Werner Hilse
841e8bd9fa
add test for md5 implementation
2014-11-11 16:24:26 +01:00
chrox
616ef3ba8e
quit uimanager before run uimanager in test
2014-11-05 18:06:05 +08:00
chrox
ae1dd3b380
screenshot to PNG files by default
2014-11-05 16:58:09 +08:00
chrox
bd0975896d
add fulltext search for EPUB documents
2014-11-05 12:28:28 +08:00
Hans-Werner Hilse
3066c86e38
Refactoring hardware abstraction
...
This is a major overhaul of the hardware abstraction layer.
A few notes:
General platform distinction happens in
frontend/device.lua
which will delegate everything else to
frontend/device/<platform_name>/device.lua
which should extend
frontend/device/generic/device.lua
Screen handling is implemented in
frontend/device/screen.lua
which includes the *functionality* to support device specifics.
Actually setting up the device specific functionality, however,
is done in the device specific setup code in the relevant
device.lua file.
The same goes for input handling.
2014-11-02 21:19:04 +01:00
Qingping Hou
df61760c82
test: add spec for Menu.itemTableFromTouchMenu
2014-10-25 19:32:30 -04:00
chrox
7c9130744c
add collapsable TOC menu
2014-10-14 21:34:56 +08:00
chrox
de38ea1199
count only leaf nodes of toc tree when level is zero
2014-10-11 21:10:07 +08:00
chrox
b422eb90cc
refactoring readerrolling
...
and fix lossing progress when switching screen mode
2014-10-10 18:14:33 +08:00
chrox
cec8ee3c29
add isChapterBegin/End API for readertoc
...
and add missing test epub
2014-10-07 17:44:10 +08:00
chrox
b09bb87d4e
refactoring readertoc and readerfooter
...
so that they don't repeat themselves.
2014-10-07 17:10:48 +08:00
chrox
d0b4fa2665
refactoring unit testsuite
2014-10-07 13:06:06 +08:00
chrox
f1f8d8dc4f
make coverage target for code coverage for the unit test
...
so that we can easily find which module needs unit test
In order to run 'make coverage' `luacov` need to be installed
with 'sudo luarocks install luacov'.
2014-10-06 21:31:08 +08:00
chrox
794baf4d8a
benchmark has no specifications so won't be run by default
2014-10-06 21:22:38 +08:00
chrox
8294a629b8
treate quoted slash as plain text in attribute value
2014-09-10 13:27:14 +08:00
chrox
21dcf787da
add OPDS support
...
This PR implements a simple OPDS browser which can be launched
from filemanager menu.
2014-09-05 21:07:43 +08:00
chrox
7048ca971b
add getCoverPageImage api for CreDocument
2014-08-22 21:32:03 +08:00
chrox
b6393b543b
no need of luagettext module
2014-05-30 23:22:13 +08:00
chrox
da84daf17f
add cache spec
2014-05-30 23:20:55 +08:00
chrox
2ad371853a
add reflowing benchmark
2014-05-30 23:16:40 +08:00
chrox
5d77abd804
add spec of document rendering benchmark
2014-05-18 23:39:32 +08:00
chrox
71eda7a0ca
busted test for frontend
2014-05-15 16:11:26 +08:00