packages feed

call-alloy 0.3 → 0.3.0.1

raw patch · 7 files changed

+72/−12 lines, 7 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

ChangeLog.md view
@@ -4,6 +4,11 @@  ## Released changes +### 0.3.0.1++- support "State0" line in retrieved instances (introduced by Alloy 6)+- support CRLF at line end+ ### 0.3  - upgrade to Alloy 6.0.0
README.md view
@@ -4,7 +4,7 @@ This package includes a simple Java Library to make an API call to the Alloy Library. Alloy is included (as JAR file) within this library as well. -## Requriements+## Requirements  - Java Runtime Environment:   There is currently no warning if you have not set up any Java Runtime Environment.@@ -15,7 +15,7 @@  The Java interface to get Alloy instances as well as the [Alloy Jar](https://github.com/AlloyTools/org.alloytools.alloy/releases/download/v5.1.0/org.alloytools.alloy.dist.jar)-file are backed into this library.+file are baked into this library.  On every call the application checks the [`XdgDirectory`](https://hackage.haskell.org/package/directory/docs/System-Directory.html#t:XdgDirectory) if the libraries exist in a current version. If not they are placed there together with a version identifier.@@ -59,7 +59,7 @@  ### An instance example -Calling Alloy using `getInstances` and the above program,+Calling Alloy using `getInstances` and the above program could return the following (abbreviated) instance:  ``` Haskell
call-alloy.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack  name:           call-alloy-version:        0.3+version:        0.3.0.1 synopsis:       A simple library to call Alloy given a specification description:    Please see the README on GitHub at <https://github.com/marcellussiegburg/call-alloy#readme> category:       Language@@ -57,7 +57,7 @@     , file-embed >=0.0.11 && <0.1     , filepath ==1.4.*     , hashable >=1.2 && <1.5-    , mtl ==2.2.*+    , mtl >=2.2 && <2.4     , process ==1.6.*     , split ==0.2.*     , trifecta >=2 && <2.2@@ -99,7 +99,7 @@     , filepath ==1.4.*     , hashable >=1.2 && <1.5     , hspec-    , mtl ==2.2.*+    , mtl >=2.2 && <2.4     , process ==1.6.*     , split ==0.2.*     , trifecta >=2 && <2.2
src/Language/Alloy/Functions.hs view
@@ -194,7 +194,7 @@ lookupRel kind rel e = case M.lookup rel (relation e) of   Nothing -> throwError $ fromString $ "relation " ++ fromString rel     ++ " is missing in the Alloy instance"-    ++ " available are: " ++ intercalate ", " (M.keys $ relation e)+    ++ "; available are: " ++ intercalate ", " (M.keys $ relation e)   Just r  -> kind r  {-|@@ -208,7 +208,7 @@ lookupSig s insta = case M.lookup s insta of   Nothing -> throwError $ fromString $ showSignature s     ++ " is missing in the Alloy instance"-    ++ " available are: \"" ++ intercalate "\", " (showSignature <$> M.keys insta)+    ++ "; available are: \"" ++ intercalate "\", " (showSignature <$> M.keys insta)   Just e   -> return e  identity
src/Language/Alloy/Internal/Call.hs view
@@ -237,6 +237,51 @@   mclassPath' <- readIORef mclassPath   maybe readClassPath return mclassPath' +{-+{-+data CallAlloyConfig = Config {+    alloyJarFile   :: FilePath,+    alloyClassFile :: FilePath,+    keepFiles      :: Bool+  }+-}++jarFileEnv :: String+jarFileEnv = "ALLOY_JAR_FILE"++callAlloyEnv :: String+callAlloyEnv = "CALL_ALLOY_CLASS_FILE"++keepFilesEnv :: String+keepFilesEnv = "KEEP_ALLOY_FILES"++{-|+Lookup environment variables which are to prefer if present.+-}+getEnvironmentInformation :: IO CallAlloyConfig+getEnvironmentInformation = do+  alloy     <- lookupEnv jarFileEnv+  callAlloy <- lookupEnv callAlloyEnv+  keep      <- lookupEnv keepFilesEnv+  let mconfig = Config <$> alloy <*> callAlloy <*> pure (isJust keep)+  case mconfig of+    Nothing -> do+      dataDir <- getXdgDirectory XdgData $ appName </> "dataDir"+    Just c  -> return c+-}+{-+getVersionFile :: IO FilePath+getVersionFile = do+  configDir <- getXdgDirectory XdgConfig appName+  let versionFile = configDir </> "version"+  exists <- doesFileExist versionFile+  if exists+    then do+    version <- read <$> readFile versionFile+    unless (version == versionHash) $ createVersionFile configDir versionFile+    else createVersionFile configDir versionFile+-}+ fallbackToTempDir :: IO FilePath -> IO FilePath fallbackToTempDir m = catch m $ \e ->   if isDoesNotExistError e
src/Language/Alloy/Parser.hs view
@@ -57,9 +57,19 @@     alterSig e Nothing  = e { relation = uncurry M.singleton $ relation e}     alterSig e (Just y) = y { relation = uncurry M.insert (relation e) (relation y) } +crlf :: Parser Char+crlf = char '\r' *> char '\n'++endOfLine :: Parser Char+endOfLine = newline <|> crlf+ alloyInstance :: Parser [Entries (,)]-alloyInstance = (try (void $ string "---INSTANCE---" *> newline) <|> return ())-  *> many entry+alloyInstance = (++)+  <$> entrySection "---INSTANCE---"+  <*> entrySection "------State 0-------"+  where+    entrySection x = (try (void $ string x *> endOfLine) <|> return ())+      *> many entry  entry :: Parser (Entries (,)) entry = do@@ -69,7 +79,7 @@     <$> (Entry entryAnnotation          <$> ((,)               <$> ((string "<:" *> word) <|> pure "")-              <*> parseRelations <* (void newline <|> eof)))+              <*> parseRelations <* (void endOfLine <|> eof)))  sig :: Parser Signature sig = do
test/Language/Alloy/CallSpec.hs view
@@ -25,6 +25,6 @@       existsInstance "pred a (a: Int) { a > a }\nrun a" `shouldReturn` False   describe "getInstances" $ do     it "an empty spec returns a single trivial instance" $-      (show <$> getInstances (Just 2) "") `shouldReturn` "[fromList [(Signature {scope = Nothing, sigName = \"end\"},Entry {annotation = Nothing, relation = fromList [(\"\",Id (NumberObject {number = 0}))]}),(Signature {scope = Nothing, sigName = \"integers\"},Entry {annotation = Nothing, relation = fromList [(\"\",Single (fromList [NumberObject {number = -8},NumberObject {number = -7},NumberObject {number = -6},NumberObject {number = -5},NumberObject {number = -4},NumberObject {number = -3},NumberObject {number = -2},NumberObject {number = -1},NumberObject {number = 0},NumberObject {number = 1},NumberObject {number = 2},NumberObject {number = 3},NumberObject {number = 4},NumberObject {number = 5},NumberObject {number = 6},NumberObject {number = 7}]))]}),(Signature {scope = Nothing, sigName = \"loop\"},Entry {annotation = Nothing, relation = fromList [(\"\",Id (NumberObject {number = 0}))]})]]"+      (show <$> getInstances (Just 2) "") `shouldReturn` "[fromList [(Signature {scope = Nothing, sigName = \"Int\"},Entry {annotation = Nothing, relation = fromList [(\"\",Single (fromList [NumberObject {number = -8},NumberObject {number = -7},NumberObject {number = -6},NumberObject {number = -5},NumberObject {number = -4},NumberObject {number = -3},NumberObject {number = -2},NumberObject {number = -1},NumberObject {number = 0},NumberObject {number = 1},NumberObject {number = 2},NumberObject {number = 3},NumberObject {number = 4},NumberObject {number = 5},NumberObject {number = 6},NumberObject {number = 7}]))]}),(Signature {scope = Nothing, sigName = \"String\"},Entry {annotation = Nothing, relation = fromList [(\"\",EmptyRelation)]}),(Signature {scope = Nothing, sigName = \"end\"},Entry {annotation = Nothing, relation = fromList [(\"\",Id (NumberObject {number = 0}))]}),(Signature {scope = Nothing, sigName = \"integers\"},Entry {annotation = Nothing, relation = fromList [(\"\",Single (fromList [NumberObject {number = -8},NumberObject {number = -7},NumberObject {number = -6},NumberObject {number = -5},NumberObject {number = -4},NumberObject {number = -3},NumberObject {number = -2},NumberObject {number = -1},NumberObject {number = 0},NumberObject {number = 1},NumberObject {number = 2},NumberObject {number = 3},NumberObject {number = 4},NumberObject {number = 5},NumberObject {number = 6},NumberObject {number = 7}]))]}),(Signature {scope = Nothing, sigName = \"loop\"},Entry {annotation = Nothing, relation = fromList [(\"\",Id (NumberObject {number = 0}))]}),(Signature {scope = Nothing, sigName = \"none\"},Entry {annotation = Nothing, relation = fromList [(\"\",EmptyRelation)]}),(Signature {scope = Nothing, sigName = \"univ\"},Entry {annotation = Nothing, relation = fromList [(\"\",Single (fromList [NumberObject {number = -8},NumberObject {number = -7},NumberObject {number = -6},NumberObject {number = -5},NumberObject {number = -4},NumberObject {number = -3},NumberObject {number = -2},NumberObject {number = -1},NumberObject {number = 0},NumberObject {number = 1},NumberObject {number = 2},NumberObject {number = 3},NumberObject {number = 4},NumberObject {number = 5},NumberObject {number = 6},NumberObject {number = 7}]))]}),(Signature {scope = Just \"seq\", sigName = \"Int\"},Entry {annotation = Nothing, relation = fromList [(\"\",Single (fromList [NumberObject {number = 0},NumberObject {number = 1},NumberObject {number = 2},NumberObject {number = 3}]))]})]]"     it "a conflicting spec returns no instance" $       getInstances (Just 1) "pred a (a: Int) { a > a }\nrun a" `shouldReturn` []