PageRenderTime 42ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/test/lib/xbrlware/instance_test.rb

https://code.google.com/p/xbrlware/
Ruby | 423 lines | 364 code | 56 blank | 3 comment | 0 complexity | eedc0bda90964201927313a02b3edea6 MD5 | raw file
Possible License(s): Apache-2.0
  1. require File.dirname(__FILE__) + '/../../test_helper.rb'
  2. class TestXbrlInstance < Test::Unit::TestCase
  3. @@xsd_file=File.dirname(__FILE__)+"/resources/us_gaap_schema_local.xsd"
  4. def setup
  5. xml_file=File.dirname(__FILE__)+"/resources/instance.xml"
  6. XbrlTest::SchemaValidator.validate(xml_file, @@xsd_file)
  7. @xbrl = Xbrlware::Instance.new(xml_file)
  8. end
  9. def test_get_all_contexts
  10. ctx = @xbrl.context
  11. assert_equal(8, ctx.size)
  12. end
  13. def test_get_context_by_dimension
  14. ctx = @xbrl.context(nil, ["us-gaap:StatementEquityComponentsAxis"])
  15. assert_equal(4, ctx.size)
  16. ctx = @xbrl.context(nil, ["us-gaap:IndefiniteLivedIntangibleAssetsBySegmentAxis"])
  17. assert_equal(2, ctx.size)
  18. ctx = @xbrl.context(nil, ["doesnot_exist"])
  19. assert_equal(0, ctx.size)
  20. end
  21. def test_ctx_groupby_dimension
  22. group=@xbrl.ctx_groupby_dim
  23. assert_equal(2, group.keys.size)
  24. assert_equal(4, group["us-gaap:StatementEquityComponentsAxis"].size)
  25. assert_equal(2, group["us-gaap:IndefiniteLivedIntangibleAssetsBySegmentAxis"].size)
  26. end
  27. def test_ctx_groupby_domain
  28. group=@xbrl.ctx_groupby_dom
  29. assert_equal(2, group.keys.size)
  30. assert_equal(4, group["us-gaap:CommonStockMember"].size)
  31. assert_equal(2, group["us-gaap:AdjustableRateResidentialMortgageMember"].size)
  32. end
  33. def test_ctx_groupby_domain_for_a_dimension
  34. group=@xbrl.ctx_groupby_dom(["us-gaap:StatementEquityComponentsAxis"])
  35. assert_equal(1, group.keys.size)
  36. assert_equal(4, group["us-gaap:CommonStockMember"].size)
  37. group=@xbrl.ctx_groupby_dom(["us-gaap:IndefiniteLivedIntangibleAssetsBySegmentAxis"])
  38. assert_equal(1, group.keys.size)
  39. assert_equal(2, group["us-gaap:AdjustableRateResidentialMortgageMember"].size)
  40. end
  41. def test_ctx_groupby_period
  42. group = @xbrl.ctx_groupby_period
  43. assert_equal(6, group.keys.size)
  44. period = Xbrlware::Context::Period.new(
  45. {"start_date"=> Date.parse("2008-01-02"), "end_date" => Date.parse("2008-12-30")}
  46. )
  47. assert_equal(2, group[period].size)
  48. end
  49. def test_context_for_item
  50. ctxs=@xbrl.context_for_item("ProfitLoss")
  51. assert_equal(6, ctxs.size)
  52. end
  53. def test_item_ctx_filter
  54. items=@xbrl.item_ctx_filter("ProfitLoss")
  55. assert_equal(6, items.size)
  56. items=@xbrl.item_ctx_filter("ProfitLoss") {|ctx| ctx.has_explicit_dimensions?}
  57. assert_equal(4, items.size)
  58. items=@xbrl.item_ctx_filter("ProfitLoss") {|ctx| ctx.has_explicit_dimensions?(["us-gaap:IndefiniteLivedIntangibleAssetsBySegmentAxis"])}
  59. assert_equal(2, items.size)
  60. items=@xbrl.item_ctx_filter("ProfitLoss") {|ctx| ctx.explicit_domains==["us-gaap:CommonStockMember"]}
  61. assert_equal(2, items.size)
  62. items=@xbrl.item_ctx_filter("ProfitLoss") {|ctx| ctx.explicit_domains==["us-gaap:CommonStockMember", "us-gaap:AdjustableRateResidentialMortgageMember"]}
  63. assert_equal(2, items.size)
  64. end
  65. def test_get_all_units
  66. units=@xbrl.unit
  67. assert_equal(2, units.size)
  68. end
  69. def test_get_unit_by_id
  70. unit=@xbrl.unit("USD")
  71. assert_not_nil(unit)
  72. unit=@xbrl.unit("not-exist")
  73. assert_nil(unit)
  74. end
  75. def test_taxonomy
  76. taxonomy_detail=@xbrl.taxonomy.definition("IncomeBeforeIncomeTaxes")
  77. assert_not_nil(taxonomy_detail)
  78. end
  79. def test_item_with_taxonomy
  80. items=@xbrl.item("IncomeBeforeIncomeTaxes")
  81. assert_not_nil(items)
  82. assert_equal(1, items.size)
  83. assert_equal("credit", items[0].def["xbrli:balance"])
  84. assert_equal("credit", items[0].meta["xbrli:balance"])
  85. # taxonomy elements are created as instance methods and instance variable
  86. # at runtime using ruby meta feature
  87. # "-" is not valid in method / variable name. The below test covers this scenario
  88. items=@xbrl.item("Income-Before-IncomeTaxes")
  89. assert_not_nil(items)
  90. assert_equal(1, items.size)
  91. assert_equal("credit", items[0].meta["xbrli:balance"])
  92. end
  93. def test_create_instance_from_xbrl_string
  94. xbrl_content=%{
  95. <?xml version="1.0" encoding="US-ASCII"?>
  96. <xbrli:xbrl xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:dei="http://xbrl.us/dei/2009-01-31" xmlns:iso4217="http://www.xbrl.org/2003/iso4217"
  97. xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:us-gaap="http://xbrl.us/us-gaap/2009-01-31"
  98. xmlns:xbrldi="http://xbrl.org/2006/xbrldi" xmlns:xlink="http://www.w3.org/1999/xlink"
  99. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:local="http://xbrl_us_gaap_local">
  100. <link:schemaRef xlink:href="us_gaap_schema_local.xsd" xlink:type="simple"/>
  101. <xbrli:context id="I2007Q">
  102. <xbrli:entity>
  103. <xbrli:identifier scheme="http://www.sec.gov/CIK">
  104. 0000056873
  105. </xbrli:identifier>
  106. <xbrli:segment>
  107. <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
  108. </xbrli:segment>
  109. </xbrli:entity>
  110. <xbrli:period>
  111. <xbrli:startDate>2007-01-02</xbrli:startDate>
  112. <xbrli:endDate>2007-03-30</xbrli:endDate>
  113. </xbrli:period>
  114. </xbrli:context>
  115. <xbrli:context id="I2008Q">
  116. <xbrli:entity>
  117. <xbrli:identifier scheme="http://www.sec.gov/CIK">
  118. 0000056873
  119. </xbrli:identifier>
  120. <xbrli:segment>
  121. <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
  122. </xbrli:segment>
  123. </xbrli:entity>
  124. <xbrli:period>
  125. <xbrli:startDate>2008-01-02</xbrli:startDate>
  126. <xbrli:endDate>2008-03-30</xbrli:endDate>
  127. </xbrli:period>
  128. </xbrli:context>
  129. <xbrli:context id="I2007Y-ADJ">
  130. <xbrli:entity>
  131. <xbrli:identifier scheme="http://www.sec.gov/CIK">
  132. 0000056873
  133. </xbrli:identifier>
  134. <xbrli:segment>
  135. <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
  136. <xbrldi:explicitMember dimension="us-gaap:IndefiniteLivedIntangibleAssetsBySegmentAxis">us-gaap:AdjustableRateResidentialMortgageMember</xbrldi:explicitMember>
  137. </xbrli:segment>
  138. </xbrli:entity>
  139. <xbrli:period>
  140. <xbrli:startDate>2007-01-02</xbrli:startDate>
  141. <xbrli:endDate>2007-12-30</xbrli:endDate>
  142. </xbrli:period>
  143. </xbrli:context>
  144. <xbrli:context id="I2008Y-ADJ">
  145. <xbrli:entity>
  146. <xbrli:identifier scheme="http://www.sec.gov/CIK">
  147. 0000056873
  148. </xbrli:identifier>
  149. <xbrli:segment>
  150. <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
  151. <xbrldi:explicitMember dimension="us-gaap:IndefiniteLivedIntangibleAssetsBySegmentAxis">us-gaap:AdjustableRateResidentialMortgageMember</xbrldi:explicitMember>
  152. </xbrli:segment>
  153. </xbrli:entity>
  154. <xbrli:period>
  155. <xbrli:startDate>2008-01-02</xbrli:startDate>
  156. <xbrli:endDate>2008-12-30</xbrli:endDate>
  157. </xbrli:period>
  158. </xbrli:context>
  159. <xbrli:context id="I2007Y">
  160. <xbrli:entity>
  161. <xbrli:identifier scheme="http://www.sec.gov/CIK">
  162. 0000056873
  163. </xbrli:identifier>
  164. </xbrli:entity>
  165. <xbrli:period>
  166. <xbrli:startDate>2007-01-02</xbrli:startDate>
  167. <xbrli:endDate>2007-12-30</xbrli:endDate>
  168. </xbrli:period>
  169. </xbrli:context>
  170. <xbrli:context id="I2008Y">
  171. <xbrli:entity>
  172. <xbrli:identifier scheme="http://www.sec.gov/CIK">
  173. 0000056873
  174. </xbrli:identifier>
  175. </xbrli:entity>
  176. <xbrli:period>
  177. <xbrli:startDate>2008-01-02</xbrli:startDate>
  178. <xbrli:endDate>2008-12-30</xbrli:endDate>
  179. </xbrli:period>
  180. </xbrli:context>
  181. <xbrli:context id="I2008">
  182. <xbrli:entity>
  183. <xbrli:identifier scheme="http://www.sec.gov/CIK">0000056873</xbrli:identifier>
  184. </xbrli:entity>
  185. <xbrli:period>
  186. <xbrli:instant>2008-12-30</xbrli:instant>
  187. </xbrli:period>
  188. </xbrli:context>
  189. <xbrli:context id="I2007">
  190. <xbrli:entity>
  191. <xbrli:identifier scheme="http://www.sec.gov/CIK">0000056873</xbrli:identifier>
  192. </xbrli:entity>
  193. <xbrli:period>
  194. <xbrli:instant>2007-12-30</xbrli:instant>
  195. </xbrli:period>
  196. </xbrli:context>
  197. <xbrli:unit id="USD">
  198. <xbrli:measure>iso4217:USD</xbrli:measure>
  199. </xbrli:unit>
  200. <xbrli:unit id="AUD">
  201. <xbrli:measure>iso4217:AUD</xbrli:measure>
  202. </xbrli:unit>
  203. <us-gaap:ProfitLoss contextRef="I2007Q" decimals="-6" unitRef="USD">947000000</us-gaap:ProfitLoss>
  204. <us-gaap:ProfitLoss contextRef="I2008Q" unitRef="USD" decimals="-6">702000000</us-gaap:ProfitLoss>
  205. <us-gaap:ProfitLoss contextRef="I2007Y-ADJ" unitRef="USD" decimals="-6">802000000</us-gaap:ProfitLoss>
  206. <us-gaap:ProfitLoss contextRef="I2008Y-ADJ" unitRef="USD" decimals="-6">902000000</us-gaap:ProfitLoss>
  207. <us-gaap:ProfitLoss contextRef="I2007Y" unitRef="USD" decimals="-6">805000000</us-gaap:ProfitLoss>
  208. <us-gaap:ProfitLoss contextRef="I2008Y" unitRef="USD" decimals="-6">905000000</us-gaap:ProfitLoss>
  209. <us-gaap:ReceivablesNetCurrent contextRef="I2007" decimals="-6" unitRef="USD">944000000</us-gaap:ReceivablesNetCurrent>
  210. <us-gaap:ReceivablesNetCurrent contextRef="I2008" decimals="-6" unitRef="USD">945000000</us-gaap:ReceivablesNetCurrent>
  211. <local:IncomeBeforeIncomeTaxes contextRef="I2007Q" unitRef="USD" decimals="-6">902000000</local:IncomeBeforeIncomeTaxes>
  212. <local:Income-Before-IncomeTaxes contextRef="I2008Q" unitRef="USD" decimals="-6">902000000</local:Income-Before-IncomeTaxes>
  213. </xbrli:xbrl>
  214. }
  215. @xbrl = Xbrlware::Instance.new(xbrl_content)
  216. items=@xbrl.item("IncomeBeforeIncomeTaxes")
  217. assert_not_nil(items)
  218. assert_equal(1, items.size)
  219. end
  220. def test_item_all_map
  221. items=@xbrl.item_all_map
  222. assert_equal(6, items["PROFITLOSS"].size)
  223. assert_equal(2, items["RECEIVABLESNETCURRENT"].size)
  224. assert_equal(1, items["INCOMEBEFOREINCOMETAXES"].size)
  225. assert_equal(1, items["INCOME-BEFORE-INCOMETAXES"].size)
  226. assert_nil(items["NOT-EXIST"])
  227. end
  228. def test_item_all
  229. items=@xbrl.item_all
  230. assert_equal(10, items.size)
  231. end
  232. def test_entity_details
  233. entity_details=@xbrl.entity_details
  234. assert_equal("UNKNOWN", entity_details["name"])
  235. @xbrl.entity_details={"name" => "EntityName"}
  236. assert_equal("EntityName", entity_details["name"])
  237. assert_equal("UNKNOWN", entity_details["ci_keys"])
  238. end
  239. def test_create_instance_from_improper_xbrl_string
  240. xbrl_content=%{
  241. <?xml version="1.0" encoding="US-ASCII"?>
  242. <xbrli:xbrl xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:dei="http://xbrl.us/dei/2009-01-31" xmlns:iso4217="http://www.xbrl.org/2003/iso4217"
  243. xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:us-gaap="http://xbrl.us/us-gaap/2009-01-31"
  244. xmlns:xbrldi="http://xbrl.org/2006/xbrldi" xmlns:xlink="http://www.w3.org/1999/xlink"
  245. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:local="http://xbrl_us_gaap_local">
  246. <link:schemaRef xlink:href="us_gaap_schema_local.xsd" xlink:type="simple"/>
  247. <xbrli:context id="I2007Q">
  248. <xbrli:entity>
  249. <xbrli:identifier scheme="http://www.sec.gov/CIK">
  250. 0000056873
  251. </xbrli:identifier>
  252. <xbrli:segment>
  253. <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
  254. </xbrli:segment>
  255. </xbrli:entity>
  256. <xbrli:period>
  257. <xbrli:startDate>2007-01-02</xbrli:startDate>
  258. <xbrli:endDate>2007-03-30</xbrli:endDate>
  259. </xbrli:period>
  260. </xbrli:context>
  261. <xbrli:context id="I2008Q">
  262. <xbrli:entity>
  263. <xbrli:identifier scheme="http://www.sec.gov/CIK">
  264. 0000056873
  265. </xbrli:identifier>
  266. <xbrli:segment>
  267. <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
  268. </xbrli:segment>
  269. </xbrli:entity>
  270. <xbrli:period>
  271. <xbrli:startDate>2008-01-02</xbrli:startDate>
  272. <xbrli:endDate>2008-03-30</xbrli:endDate>
  273. </xbrli:period>
  274. </xbrli:context>
  275. <xbrli:context id="I2007Y-ADJ">
  276. <xbrli:entity>
  277. <xbrli:identifier scheme="http://www.sec.gov/CIK">
  278. 0000056873
  279. </xbrli:identifier>
  280. <xbrli:segment>
  281. <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
  282. <xbrldi:explicitMember dimension="us-gaap:IndefiniteLivedIntangibleAssetsBySegmentAxis">us-gaap:AdjustableRateResidentialMortgageMember</xbrldi:explicitMember>
  283. </xbrli:segment>
  284. </xbrli:entity>
  285. <xbrli:period>
  286. <xbrli:startDate>2007-01-02</xbrli:startDate>
  287. <xbrli:endDate>2007-12-30</xbrli:endDate>
  288. </xbrli:period>
  289. </xbrli:context>
  290. <xbrli:context id="I2008Y-ADJ">
  291. <xbrli:entity>
  292. <xbrli:identifier scheme="http://www.sec.gov/CIK">
  293. 0000056873
  294. </xbrli:identifier>
  295. <xbrli:segment>
  296. <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
  297. <xbrldi:explicitMember dimension="us-gaap:IndefiniteLivedIntangibleAssetsBySegmentAxis">us-gaap:AdjustableRateResidentialMortgageMember</xbrldi:explicitMember>
  298. </xbrli:segment>
  299. </xbrli:entity>
  300. <xbrli:period>
  301. <xbrli:startDate>2008-01-02</xbrli:startDate>
  302. <xbrli:endDate>2008-12-30</xbrli:endDate>
  303. </xbrli:period>
  304. </xbrli:context>
  305. <xbrli:context id="I2007Y">
  306. <xbrli:entity>
  307. <xbrli:identifier scheme="http://www.sec.gov/CIK">
  308. 0000056873
  309. </xbrli:identifier>
  310. </xbrli:entity>
  311. <xbrli:period>
  312. <xbrli:startDate>2007-01-02</xbrli:startDate>
  313. <xbrli:endDate>2007-12-30</xbrli:endDate>
  314. </xbrli:period>
  315. </xbrli:context>
  316. <xbrli:context id="I2008Y">
  317. <xbrli:entity>
  318. <xbrli:identifier scheme="http://www.sec.gov/CIK">
  319. 0000056873
  320. </xbrli:identifier>
  321. </xbrli:entity>
  322. <xbrli:period>
  323. <xbrli:startDate>2008-01-02</xbrli:startDate>
  324. <xbrli:endDate>2008-12-30</xbrli:endDate>
  325. </xbrli:period>
  326. </xbrli:context>
  327. <xbrli:context id="I2008">
  328. <xbrli:entity>
  329. <xbrli:identifier scheme="http://www.sec.gov/CIK">0000056873</xbrli:identifier>
  330. </xbrli:entity>
  331. <xbrli:period>
  332. <xbrli:instant>2008-12-30</xbrli:instant>
  333. </xbrli:period>
  334. </xbrli:context>
  335. <xbrli:context id="I2007">
  336. <xbrli:entity>
  337. <xbrli:identifier scheme="http://www.sec.gov/CIK">0000056873</xbrli:identifier>
  338. </xbrli:entity>
  339. <xbrli:period>
  340. <xbrli:instant>2007-12-30</xbrli:instant>
  341. </xbrli:period>
  342. </xbrli:context>
  343. <xbrli:unit id="USD">
  344. <xbrli:measure>iso4217:USD</xbrli:measure>
  345. </xbrli:unit>
  346. <xbrli:unit id="AUD">
  347. <xbrli:measure>iso4217:AUD</xbrli:measure>
  348. </xbrli:unit>
  349. <us-gaap:ProfitLoss contextRef="I2007Q" decimals="-6" unitRef="USD">947000000</us-gaap:ProfitLoss>
  350. <us-gaap:ProfitLoss contextRef="I2008Q" unitRef="USD" decimals="-6">702000000</us-gaap:ProfitLoss>
  351. <us-gaap:ProfitLoss contextRef="I2007Y-ADJ" unitRef="USD" decimals="-6">802000000</us-gaap:ProfitLoss>
  352. <us-gaap:ProfitLoss contextRef="I2008Y-ADJ" unitRef="USD" decimals="-6">902000000</us-gaap:ProfitLoss>
  353. <us-gaap:ProfitLoss contextRef="I2007Y" unitRef="USD" decimals="-6">805000000</us-gaap:ProfitLoss>
  354. <us-gaap:ProfitLoss contextRef="I2008Y" unitRef="USD" decimals="-6">905
  355. 000000</us-gaap:ProfitLoss>
  356. <us-gaap:ReceivablesNetCurrent contextRef="I2007" decimals="-6" unitRef="USD">944000000</us-gaap:ReceivablesNetCurrent>
  357. <us-gaap:ReceivablesNetCurrent contextRef="I2008" decimals="-6" unitRef="USD">945000000</us-gaap:ReceivablesNetCurrent>
  358. <local:IncomeBeforeIncomeTaxes contextRef="I2007Q" unitRef="USD" decimals="-6">902000000</local:IncomeBeforeIncomeTaxes>
  359. <local:Income-Before-IncomeTaxes contextRef="I2008Q" unitRef="USD" decimals="-6">902000000</local:Income-Before-IncomeTaxes>
  360. </xbrli:xbrl>
  361. }
  362. @xbrl = Xbrlware::Instance.new(xbrl_content)
  363. items=@xbrl.item("IncomeBeforeIncomeTaxes")
  364. assert_not_nil(items)
  365. assert_equal(1, items.size)
  366. end
  367. end