|
12 | 12 | (ns clojure.test-clojure.compilation
|
13 | 13 | (:import (clojure.lang Compiler Compiler$CompilerException))
|
14 | 14 | (:require [clojure.test.generative :refer (defspec)]
|
15 |
| - [clojure.data.generators :as gen]) |
| 15 | + [clojure.data.generators :as gen] |
| 16 | + [clojure.test-clojure.compilation.line-number-examples :as line]) |
16 | 17 | (:use clojure.test
|
17 | 18 | [clojure.test-helper :only (should-not-reflect should-print-err-message)]))
|
18 | 19 |
|
|
30 | 31 |
|
31 | 32 | (string? (:doc m)) true
|
32 | 33 | (> (.length (:doc m)) 0) true
|
33 |
| - |
| 34 | + |
34 | 35 | (string? (:file m)) true
|
35 | 36 | (> (.length (:file m)) 0) true
|
36 | 37 |
|
|
53 | 54 | (is (eval `(= Integer/TYPE ~Integer/TYPE)))
|
54 | 55 | (is (eval `(= Long/TYPE ~Long/TYPE)))
|
55 | 56 | (is (eval `(= Short/TYPE ~Short/TYPE)))))
|
56 |
| - |
| 57 | + |
57 | 58 | (deftest test-compiler-resolution
|
58 | 59 | (testing "resolve nonexistent class create should return nil (assembla #262)"
|
59 | 60 | (is (nil? (resolve 'NonExistentClass.)))))
|
|
171 | 172 | (deftest primitive-return-decl
|
172 | 173 | (should-not-reflect #(loop [k 5] (recur (clojure.test-clojure.compilation/primfn))))
|
173 | 174 | (should-not-reflect #(loop [k 5.0] (recur (clojure.test-clojure.compilation/primfn 0))))
|
174 |
| - |
| 175 | + |
175 | 176 | (should-print-err-message #"(?s).*k is not matching primitive.*"
|
176 | 177 | #(loop [k (clojure.test-clojure.compilation/primfn)] (recur :foo))))
|
177 | 178 |
|
|
257 | 258 | (binding [*compile-path* "target/test-classes"]
|
258 | 259 | (compile 'clojure.test-clojure.compilation.examples))
|
259 | 260 |
|
| 261 | + |
| 262 | +(deftest test-compiler-line-numbers |
| 263 | + (let [fails-on-line-number? (fn [expected function] |
| 264 | + (try |
| 265 | + (function) |
| 266 | + nil |
| 267 | + (catch Throwable t |
| 268 | + (let [frames (filter #(= "line_number_examples.clj" (.getFileName %)) |
| 269 | + (.getStackTrace t)) |
| 270 | + _ (if (zero? (count frames)) |
| 271 | + (.printStackTrace t) |
| 272 | + ) |
| 273 | + actual (.getLineNumber ^StackTraceElement (first frames))] |
| 274 | + (= expected actual)))))] |
| 275 | + (is (fails-on-line-number? 13 line/instance-field)) |
| 276 | + (is (fails-on-line-number? 19 line/instance-field-reflected)) |
| 277 | + (is (fails-on-line-number? 25 line/instance-field-unboxed)) |
| 278 | + (is (fails-on-line-number? 32 line/instance-field-assign)) |
| 279 | + (is (fails-on-line-number? 40 line/instance-field-assign-reflected)) |
| 280 | + (is (fails-on-line-number? 47 line/static-field-assign)) |
| 281 | + (is (fails-on-line-number? 54 line/instance-method)) |
| 282 | + (is (fails-on-line-number? 61 line/instance-method-reflected)) |
| 283 | + (is (fails-on-line-number? 68 line/instance-method-unboxed)) |
| 284 | + (is (fails-on-line-number? 74 line/static-method)) |
| 285 | + (is (fails-on-line-number? 80 line/static-method-reflected)) |
| 286 | + (is (fails-on-line-number? 86 line/static-method-unboxed)) |
| 287 | + (is (fails-on-line-number? 92 line/invoke)) |
| 288 | + (is (fails-on-line-number? 101 line/threading)) |
| 289 | + (is (fails-on-line-number? 112 line/keyword-invoke)) |
| 290 | + (is (fails-on-line-number? 119 line/invoke-cast)))) |
| 291 | + |
260 | 292 | (deftest CLJ-979
|
261 | 293 | (is (= clojure.test_clojure.compilation.examples.X
|
262 | 294 | (class (clojure.test-clojure.compilation.examples/->X))))
|
|
0 commit comments