Ruby/JRuby på Android. Del 2 – Cucumber paketerad i jarfil!
Whoho!!! Mitt radikala omtänkande fungerade och nu har jag proof of concept att gå vidare med!
Så vad har jag gjort då?
Jag behöver en portabel stand-alone Cucumber som en jar som jag kan peta in i ett Android projekt för att testa mina prylar on target! Varför gör jag då inte detta lokalt när jag bygger undrar kanske ni? Därför jag vill är det enkla svaret och jag tror inte att någon annan har lyckats med det än… 😛 (inte vad jag vet i alla fall)
Jag har funderat på Cucumber och Javautveckling under en längre tid och framförallt Cucumber på Android™ och nu gav jag mig fan på att få det att fungera för att kunna köra riktig BDD på Android!
Så här har jag nu gjort för att göra min portabla lösning.
Ladda ner jruby källkoden (för javakopplingen). Detta exempel baserar jag på JRuby 1.6.6 (the latest and greatest)
Packa upp jruby och starta din favoriteditor för nu skall vi inkludera cucumber i jarfilen!
Lägg till följande rad i filen: (som en rad!)
cucumber.gems=${build.lib.dir}/cucumber-1.1.4.gem ${build.lib.dir} /builder-3.0.0.gem ${build.lib.dir}/diff-lcs-1.1.3.gem ${build.lib.dir}/gherkin-2.7.7-java.gem ${build.lib.dir} /json-1.6.5-java.gem ${build.lib.dir}/term-ansicolor-1.0.7.gem ${build.lib.dir}/rspec-core-2.8.0 ${build.lib.dir}/rspec-expectations-2.8.0 ${build.lib.dir}/rspec-mocks-2.8.0 ${build.lib.dir}/rspec-2.8.0
Leta upp complete.jar.gems och lägg till ${cucumber.gems} i slutet av raden. Så här kan det se ut:
complete.jar.gems=${rake.gem} ${cucumber.gems}
Nu är det dags att bygga hela rasket
#gem install cucumber
Nu installeras cucumber-1.1.4, builder-3.0.0, diff-lcs-1.1.3, gherkin-2.7.7-java, json-1.6.5-java och term-ansicolor-1.0.7
#gem install rspec
Nu installeras rspec-core-2.8.0, rspec-expectations-2.8.0, rspec-mocks-2.8.0 och rspec-2.8.0
Kopiera dessa gem-filerna från jruby-1.6.6/lib/ruby/gems/1.8/cache till jruby-1.6.6/build_lib
Nu är det dags att bygga din jarfil som innehåller Cucumber och allt smaskigt som behövs och det är inga större krusiduller. Har du inte ant så får du ladda ner det.
#ant #ant jar-complete
Nu kan du testa din jarfil, som ligger i jruby-1.6.6/lib
#java -jar jruby-complete.jar -S cucumber features/my.feature
Givetvis kräver detta att du redan har ett Cucumber testfall uppsatt…
I morgon så skall jag antingen skriva en apk som laddar och kör Cucumber eller så hittar jag ett sätt att exekvera java på Android plattformen. (japp, det går inte out-of-the-box dessvärre…)
Om det går att konvertera min Java jar till Dalvik bytekod och det fortfarande fungerar har jag ingen aning om och jag tror faktiskt inte det men jag skall testa… Annars har jag lite andra idéer om hur jag skall gå tillväga. Det funkade utmärkt!
Får ni problem med att få exakt mina versioner av gems så kan man specificera vilken version av en gem man vill ha när man installerar.
#gem install cucumber -v 1.1.4
-A small step for man, a giant leap for a cookie!
edit: Har konverterat den till dex nu och hackar mig sakta fram på target! Slutar för natten nu men här står jag nu!
# dalvikvm -verbose:class -Xss128k -classpath mycucumber.jar org.jruby.Main -X-C cucumber features LoadError: no such file to load -- optparse require at org/jruby/RubyKernel.java:1027 (root) at ./cucumber/rspec/disable_option_parser.rb:1 require at org/jruby/RubyKernel.java:1027 (root) at ./cucumber/rspec/disable_option_parser.rb:10
Recent Comments